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"; + } +}
