Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 86da1643d -> f3216d6ef


Iniital entity for the crate db


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/35588b82
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/35588b82
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/35588b82

Branch: refs/heads/master
Commit: 35588b8257ebf348d00f5fe9e23533d78d6055a4
Parents: a850f45
Author: Adam Jackson <[email protected]>
Authored: Thu Jan 22 15:37:26 2015 +0000
Committer: Sam Corbett <[email protected]>
Committed: Thu Jan 22 15:49:03 2015 +0000

----------------------------------------------------------------------
 .../entity/database/crate/CrateNode.java        | 40 ++++++++++
 .../entity/database/crate/CrateNodeDriver.java  |  6 ++
 .../entity/database/crate/CrateNodeImpl.java    | 63 +++++++++++++++
 .../database/crate/CrateNodeSshDriver.java      | 84 ++++++++++++++++++++
 4 files changed, 193 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/35588b82/software/database/src/main/java/brooklyn/entity/database/crate/CrateNode.java
----------------------------------------------------------------------
diff --git 
a/software/database/src/main/java/brooklyn/entity/database/crate/CrateNode.java 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNode.java
new file mode 100644
index 0000000..4ee28c3
--- /dev/null
+++ 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNode.java
@@ -0,0 +1,40 @@
+package brooklyn.entity.database.crate;
+
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.basic.ConfigKeys;
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.java.UsesJava;
+import brooklyn.entity.java.UsesJavaMXBeans;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.AttributeSensorAndConfigKey;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
+import brooklyn.event.basic.Sensors;
+import brooklyn.util.flags.SetFromFlag;
+
+@ImplementedBy(CrateNodeImpl.class)
+public interface CrateNode extends SoftwareProcess, UsesJava,UsesJmx, 
UsesJavaMXBeans {
+
+    @SetFromFlag("version")
+    ConfigKey<String> SUGGESTED_VERSION = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION,
+            "0.45.7");
+
+    @SetFromFlag("downloadUrl")
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = new 
BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey(
+            Attributes.DOWNLOAD_URL,
+            "https://cdn.crate.io/downloads/releases/crate-${version}.tar.gz";);
+
+    AttributeSensor<String> MANAGEMENT_URI = Sensors.newStringSensor(
+            "crate.managementUri", "The address at which the Crate server 
listens");
+
+    AttributeSensor<String> SERVER_NAME = Sensors.newStringSensor(
+            "crate.serverName", "The name of the server");
+
+    AttributeSensor<Integer> SERVER_STATUS = Sensors.newIntegerSensor(
+            "create.serverStatus", "The status of the server");
+
+    AttributeSensor<String> SERVER_BUILD_TIMESTAMP = Sensors.newStringSensor(
+            "create.serverBuildTimestamp", "The Timestamp of the server 
build");
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/35588b82/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeDriver.java
----------------------------------------------------------------------
diff --git 
a/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeDriver.java
 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeDriver.java
new file mode 100644
index 0000000..af35858
--- /dev/null
+++ 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeDriver.java
@@ -0,0 +1,6 @@
+package brooklyn.entity.database.crate;
+
+import brooklyn.entity.java.JavaSoftwareProcessDriver;
+
+public interface CrateNodeDriver extends JavaSoftwareProcessDriver {
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/35588b82/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeImpl.java
----------------------------------------------------------------------
diff --git 
a/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeImpl.java
 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeImpl.java
new file mode 100644
index 0000000..72a11e6
--- /dev/null
+++ 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeImpl.java
@@ -0,0 +1,63 @@
+package brooklyn.entity.database.crate;
+
+import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.entity.java.JavaAppUtils;
+import brooklyn.event.feed.http.HttpFeed;
+import brooklyn.event.feed.http.HttpPollConfig;
+import brooklyn.event.feed.http.HttpValueFunctions;
+import brooklyn.event.feed.jmx.JmxFeed;
+
+
+public class CrateNodeImpl extends SoftwareProcessImpl implements CrateNode{
+
+    private JmxFeed jmxFeed;
+    private HttpFeed httpFeed;
+
+    private static final int CRATE_PORT = 4200;
+
+    static {
+        JavaAppUtils.init();
+    }
+
+    @Override
+    public Class getDriverInterface() {
+        return CrateNodeDriver.class;
+    }
+
+    @Override
+    protected void disconnectSensors() {
+        disconnectServiceUpIsRunning();
+        jmxFeed.stop();
+        httpFeed.stop();
+        super.disconnectSensors();
+    }
+
+    @Override
+    protected void connectSensors() {
+        super.connectSensors();
+        connectServiceUpIsRunning();
+        jmxFeed = getJmxFeed();
+        String uri = "http://"; + getAttribute(HOSTNAME) + ":" + CRATE_PORT;
+        setAttribute(MANAGEMENT_URI, uri);
+
+        httpFeed = HttpFeed.builder()
+                .entity(this)
+                .baseUri(uri)
+                .poll(new HttpPollConfig<String>(CrateNode.SERVER_NAME)
+                        .onSuccess(HttpValueFunctions.jsonContents("name", 
String.class)))
+                .poll(new HttpPollConfig<Integer>(CrateNode.SERVER_STATUS)
+                        .onSuccess(HttpValueFunctions.jsonContents("status", 
Integer.class)))
+                .poll(new 
HttpPollConfig<String>(CrateNode.SERVER_BUILD_TIMESTAMP)
+                        .onSuccess(HttpValueFunctions.jsonContents(new 
String[] {"version", "build_timestamp"}, String.class)))
+                .build();
+    }
+
+    @Override
+    protected void postStart() {
+        super.postStart();
+
+    }
+    private JmxFeed getJmxFeed() {
+        return JavaAppUtils.connectMXBeanSensors(this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/35588b82/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeSshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeSshDriver.java
 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeSshDriver.java
new file mode 100644
index 0000000..17ec637
--- /dev/null
+++ 
b/software/database/src/main/java/brooklyn/entity/database/crate/CrateNodeSshDriver.java
@@ -0,0 +1,84 @@
+package brooklyn.entity.database.crate;
+
+import static java.lang.String.format;
+
+import java.util.List;
+
+import brooklyn.util.collections.MutableMap;
+import com.google.common.collect.ImmutableList;
+
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.os.Os;
+import brooklyn.util.ssh.BashCommands;
+
+public class CrateNodeSshDriver extends JavaSoftwareProcessSshDriver {
+
+    public CrateNodeSshDriver(EntityLocal entity, SshMachineLocation machine) {
+        super(entity, machine);
+    }
+
+    @Override
+    public void preInstall() {
+        resolver = Entities.newDownloader(this);
+        setExpandedInstallDir(Os.mergePaths(getInstallDir(),
+                resolver.getUnpackedDirectoryName(format("crate-%s", 
getVersion()))));
+    }
+
+    @Override
+    public void install() {
+        List<String> urls = resolver.getTargets();
+        String saveAs = resolver.getFilename();
+
+        List<String> commands = ImmutableList.<String>builder()
+                .addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs))
+                .add ("tar xvfz "+saveAs)
+                .build();
+
+        newScript(INSTALLING)
+                .failOnNonZeroResultCode()
+                .body.append(commands).execute();
+    }
+
+    @Override
+    public void customize() {
+
+    }
+
+    @Override
+    public void launch() {
+        StringBuilder command = new StringBuilder(getExpandedInstallDir())
+                .append("/bin/crate >").append(getLogFileLocation())
+                .append(" 2> err.log < /dev/null")
+                .append(" -d")
+                .append(" -p ").append(getPidFileLocation());
+        newScript(LAUNCHING)
+                .failOnNonZeroResultCode()
+                .body.append(command).execute();
+
+    }
+
+    @Override
+    public boolean isRunning() {
+        return newScript (MutableMap.of("usePidFile", getPidFileLocation()), 
CHECK_RUNNING)
+                .execute() == 0;
+    }
+
+    @Override
+    public void stop() {
+        newScript (MutableMap.of("usePidFile", getPidFileLocation()), STOPPING)
+                .execute();
+
+    }
+
+    @Override
+    protected String getLogFileLocation() {
+        return getRunDir() + "/server.log";
+    }
+
+    protected String getPidFileLocation () {
+        return getRunDir() + "/pid.txt";
+    }
+}

Reply via email to