use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.
the class StatsDTelegrafWriter method write.
@Override
public void write(@Nonnull Writer writer, @Nonnull Server server, @Nonnull Query query, @Nonnull Iterable<Result> results) throws IOException {
int resultIndex = -1;
for (Result result : results) {
resultIndex++;
String bucketType = getBucketType(resultIndex);
String attributeName = result.getAttributeName();
List<String> resultTagList = new ArrayList<>();
resultTagList.add(",jmxport=" + server.getPort());
//tagList.add("objectName=" + query.getObjectName());
resultTagList.add("attribute=" + attributeName);
for (Map.Entry<String, Object> values : result.getValues().entrySet()) {
String field = values.getKey();
Object value = values.getValue();
if (isNotValidValue(value)) {
log.debug("Skipping message key[{}] with value: {}.", field, value);
continue;
}
List<String> tagList = new ArrayList(resultTagList);
boolean isSingleValueAttribute = StringUtils.equals(attributeName, field);
if (!isSingleValueAttribute) {
tagList.add("resultKey=" + values.getKey());
}
for (Map.Entry e : tags.entrySet()) {
tagList.add(e.getKey() + "=" + e.getValue());
}
Number actualValue = computeActualValue(value);
StringBuilder sb = new StringBuilder(result.getKeyAlias()).append(StringUtils.join(tagList, ",")).append(":").append(actualValue).append("|").append(bucketType).append("\n");
String output = sb.toString();
if (actualValue.floatValue() < 0 && !StatsDMetricType.GAUGE.getKey().equals(bucketType)) {
log.debug("Negative values are only supported for gauges, not sending: {}.", output);
} else {
log.debug(output);
writer.write(output);
}
}
}
}
use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.
the class JmxProcessingTests method querySimpleAttribute.
@Test
public void querySimpleAttribute() throws Exception {
OutputWriterFactory outputWriterFactory = mock(OutputWriterFactory.class);
OutputWriter outputWriter = mock(OutputWriter.class);
when(outputWriterFactory.create()).thenReturn(outputWriter);
Query query = Query.builder().setObj(MBEAN_NAME).addAttr("DummyValue").addOutputWriterFactory(outputWriterFactory).build();
Server server = localServer();
Iterable<Result> results1 = server.execute(query);
query.runOutputWritersForQuery(server, results1);
verify(outputWriter).doWrite(any(Server.class), queryCaptor.capture(), resultsCaptor.capture());
assertThat(queryCaptor.getValue()).isEqualTo(query);
List<Result> results = resultsCaptor.getValue();
assertThat(results).hasSize(1);
Result result = results.get(0);
assertThat(result.getValues().get("DummyValue")).isEqualTo(123);
}
use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.
the class JmxResultProcessorTest method canReadSingleBooleanValue.
@Test
public void canReadSingleBooleanValue() throws MalformedObjectNameException, InstanceNotFoundException {
Attribute booleanAttribute = new Attribute("BootClassPathSupported", true);
ObjectInstance runtime = getRuntime();
List<Result> results = new JmxResultProcessor(dummyQueryWithResultAlias(), runtime, ImmutableList.of(booleanAttribute), runtime.getClassName(), TEST_DOMAIN_NAME).getResults();
assertThat(results).hasSize(1);
Result result = results.get(0);
assertThat(result.getAttributeName()).isEqualTo("BootClassPathSupported");
assertThat(result.getValues()).hasSize(1);
Object objectValue = result.getValues().get("BootClassPathSupported");
assertThat(objectValue).isInstanceOf(Boolean.class);
Boolean booleanValue = (Boolean) objectValue;
assertThat(booleanValue).isEqualTo(TRUE);
}
use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.
the class JmxResultProcessorTest method doesNotReorderTypeNames.
@Test
public void doesNotReorderTypeNames() throws MalformedObjectNameException {
String className = "java.lang.SomeClass";
String propertiesOutOfOrder = "z-key=z-value,a-key=a-value,k-key=k-value";
List<Result> results = new JmxResultProcessor(dummyQueryWithResultAlias(), new ObjectInstance(className + ":" + propertiesOutOfOrder, className), ImmutableList.of(new Attribute("SomeAttribute", 1)), className, TEST_DOMAIN_NAME).getResults();
assertThat(results).hasSize(1);
Result integerResult = results.get(0);
assertThat(integerResult.getTypeName()).isEqualTo(propertiesOutOfOrder);
}
use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.
the class JmxResultProcessorTest method canReadSingleIntegerValue.
@Test
public void canReadSingleIntegerValue() throws MalformedObjectNameException, InstanceNotFoundException {
Attribute integerAttribute = new Attribute("CollectionCount", 51L);
ObjectInstance runtime = getRuntime();
List<Result> results = new JmxResultProcessor(dummyQueryWithResultAlias(), runtime, ImmutableList.of(integerAttribute), runtime.getClassName(), TEST_DOMAIN_NAME).getResults();
assertThat(results).hasSize(1);
Result integerResult = results.get(0);
assertThat(integerResult.getAttributeName()).isEqualTo("CollectionCount");
assertThat(integerResult.getValues()).hasSize(1);
Object objectValue = integerResult.getValues().get("CollectionCount");
assertThat(objectValue).isInstanceOf(Long.class);
Long integerValue = (Long) objectValue;
assertThat(integerValue).isEqualTo(51L);
}
Aggregations