public void connectSensors() { sensors().set(Attributes.MAIN_URI, URI.create(config().get(MESOS_URL))); HttpFeed.Builder httpFeedBuilder = HttpFeed.builder() .entity(this) .period(1, TimeUnit.MINUTES) .baseUri(sensors().get(Attributes.MAIN_URI)) .credentialsIfNotNull(config().get(MESOS_USERNAME), config().get(MESOS_PASSWORD)) .poll( HttpPollConfig.forSensor(SERVICE_UP) .suburl("/master/health") .onSuccess(HttpValueFunctions.responseCodeEquals(200)) .onFailureOrException(Functions.constant(Boolean.FALSE))) .poll( HttpPollConfig.forSensor(CLUSTER_NAME) .suburl("/master/state.json") .onSuccess(HttpValueFunctions.jsonContents("cluster", String.class)) .onFailureOrException(Functions.constant(""))) .poll( HttpPollConfig.forSensor(CLUSTER_ID) .suburl("/master/state.json") .onSuccess(HttpValueFunctions.jsonContents("id", String.class)) .onFailureOrException(Functions.constant(""))) .poll( HttpPollConfig.forSensor(MESOS_VERSION) .suburl("/master/state.json") .onSuccess(HttpValueFunctions.jsonContents("version", String.class)) .onFailureOrException(Functions.constant(""))) .poll( HttpPollConfig.forSensor(CPUS_TOTAL) .suburl("/system/stats.json") .onSuccess(HttpValueFunctions.jsonContents("cpus_total", Integer.class)) .onFailureOrException(Functions.constant(-1))) .poll( HttpPollConfig.forSensor(LOAD_1MIN) .suburl("/system/stats.json") .onSuccess(HttpValueFunctions.jsonContents("avg_load_1min", Double.class)) .onFailureOrException(Functions.constant(-1.0d))) .poll( HttpPollConfig.forSensor(LOAD_5MIN) .suburl("/system/stats.json") .onSuccess(HttpValueFunctions.jsonContents("avg_load_5min", Double.class)) .onFailureOrException(Functions.constant(-1.0d))) .poll( HttpPollConfig.forSensor(LOAD_15MIN) .suburl("/system/stats.json") .onSuccess(HttpValueFunctions.jsonContents("avg_load_15min", Double.class)) .onFailureOrException(Functions.constant(-1.0d))) .poll( HttpPollConfig.forSensor(MEMORY_FREE_BYTES) .suburl("/system/stats.json") .onSuccess(HttpValueFunctions.jsonContents("mem_free_bytes", Long.class)) .onFailureOrException(Functions.constant(-1L))) .poll( HttpPollConfig.forSensor(MEMORY_TOTAL_BYTES) .suburl("/system/stats.json") .onSuccess(HttpValueFunctions.jsonContents("mem_total_bytes", Long.class)) .onFailureOrException(Functions.constant(-1L))); httpFeed = httpFeedBuilder.build(); Duration scanInterval = config().get(SCAN_INTERVAL); HttpFeed.Builder scanBuilder = HttpFeed.builder() .entity(this) .period(scanInterval) .baseUri(sensors().get(Attributes.MAIN_URI)) .credentialsIfNotNull(config().get(MESOS_USERNAME), config().get(MESOS_PASSWORD)) .poll( HttpPollConfig.forSensor(MESOS_SLAVE_LIST) .description("Scan Cluster Slaves") .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), JsonFunctions.walk("slaves"), new Function<JsonElement, List<String>>() { @Override public List<String> apply(JsonElement slaves) { try { return scanSlaves(slaves.getAsJsonArray()); } catch (UnknownHostException e) { throw Exceptions.propagate(e); } } })) .onFailureOrException(Functions.<List<String>>constant(null))) .poll( HttpPollConfig.forSensor(MESOS_FRAMEWORK_LIST) .description("Scan Cluster Frameworks") .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), JsonFunctions.walk("frameworks"), new Function<JsonElement, List<String>>() { @Override public List<String> apply(JsonElement frameworks) { return scanFrameworks(frameworks.getAsJsonArray()); } })) .onFailureOrException(Functions.<List<String>>constant(null))); scanner = scanBuilder.build(); }
@Override public void connectSensors() { super.connectSensors(); final String id = sensors().get(MESOS_SLAVE_ID); HttpFeed.Builder httpFeedBuilder = HttpFeed.builder() .entity(this) .period(30, TimeUnit.SECONDS) .baseUri(getMesosCluster().sensors().get(Attributes.MAIN_URI)) .credentialsIfNotNull( config().get(MesosCluster.MESOS_USERNAME), config().get(MesosCluster.MESOS_PASSWORD)) .poll( new HttpPollConfig<Long>(MEMORY_AVAILABLE) .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), Functions.compose( MesosUtils.selectM( new Predicate<JsonElement>() { @Override public boolean apply(JsonElement input) { return input .getAsJsonObject() .get("id") .getAsString() .equals(id); } }), JsonFunctions.walk("slaves")), JsonFunctions.walkM("resources", "mem"), JsonFunctions.castM(Long.class))) .onFailureOrException(Functions.constant(-1L))) .poll( new HttpPollConfig<Double>(CPU_AVAILABLE) .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), Functions.compose( MesosUtils.selectM( new Predicate<JsonElement>() { @Override public boolean apply(JsonElement input) { return input .getAsJsonObject() .get("id") .getAsString() .equals(id); } }), JsonFunctions.walk("slaves")), JsonFunctions.walkM("resources", "cpus"), JsonFunctions.castM(Double.class))) .onFailureOrException(Functions.constant(-1d))) .poll( new HttpPollConfig<Long>(DISK_AVAILABLE) .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), Functions.compose( MesosUtils.selectM( new Predicate<JsonElement>() { @Override public boolean apply(JsonElement input) { return input .getAsJsonObject() .get("id") .getAsString() .equals(id); } }), JsonFunctions.walk("slaves")), JsonFunctions.walkM("resources", "disk"), JsonFunctions.castM(Long.class))) .onFailureOrException(Functions.constant(-1L))) .poll( new HttpPollConfig<Long>(MEMORY_USED) .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), Functions.compose( MesosUtils.selectM( new Predicate<JsonElement>() { @Override public boolean apply(JsonElement input) { return input .getAsJsonObject() .get("id") .getAsString() .equals(id); } }), JsonFunctions.walk("slaves")), JsonFunctions.walkM("used_resources", "mem"), JsonFunctions.castM(Long.class))) .onFailureOrException(Functions.constant(-1L))) .poll( new HttpPollConfig<Double>(CPU_USED) .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), Functions.compose( MesosUtils.selectM( new Predicate<JsonElement>() { @Override public boolean apply(JsonElement input) { return input .getAsJsonObject() .get("id") .getAsString() .equals(id); } }), JsonFunctions.walk("slaves")), JsonFunctions.walkM("used_resources", "cpus"), JsonFunctions.castM(Double.class))) .onFailureOrException(Functions.constant(-1d))) .poll( new HttpPollConfig<Long>(DISK_USED) .suburl("/master/state.json") .onSuccess( Functionals.chain( HttpValueFunctions.jsonContents(), Functions.compose( MesosUtils.selectM( new Predicate<JsonElement>() { @Override public boolean apply(JsonElement input) { return input .getAsJsonObject() .get("id") .getAsString() .equals(id); } }), JsonFunctions.walk("slaves")), JsonFunctions.walkM("used_resources", "disk"), JsonFunctions.castM(Long.class))) .onFailureOrException(Functions.constant(-1L))); httpFeed = httpFeedBuilder.build(); }