
com.librato.metrics.LibratoUtil Maven / Gradle / Ivy
package com.librato.metrics;
import com.librato.metrics.LibratoBatch;
import com.yammer.metrics.core.MetricName;
import com.yammer.metrics.core.VirtualMachineMetrics;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
/**
* User: mihasya
* Date: 6/14/12
* Time: 2:05 PM
* keeping general Librato utilities out of the way
*/
public class LibratoUtil {
/**
* turn a MetricName into a Librato-able string key
*/
public String nameToString(MetricName name) {
StringBuilder builder = new StringBuilder();
builder
.append(name.getGroup()).append(".")
.append(name.getType()).append(".")
.append(name.getName());
if (name.hasScope()) {
builder.append(".").append(name.getScope());
}
return builder.toString();
}
/**
* helper method for adding VM metrics to a batch
*/
public void addVmMetricsToBatch(VirtualMachineMetrics vm, LibratoBatch batch) {
// memory
batch.addGaugeMeasurement("jvm.memory.heap_usage", vm.heapUsage());
batch.addGaugeMeasurement("jvm.memory.non_heap_usage", vm.nonHeapUsage());
for (Map.Entry pool : vm.memoryPoolUsage().entrySet()) {
batch.addGaugeMeasurement("jvm.memory.memory_pool_usages."+pool.getKey(), pool.getValue());
}
// threads
batch.addGaugeMeasurement("jvm.daemon_thread_count", vm.daemonThreadCount());
batch.addGaugeMeasurement("jvm.thread_count", vm.threadCount());
batch.addGaugeMeasurement("jvm.uptime", vm.uptime());
batch.addGaugeMeasurement("jvm.fd_usage", vm.fileDescriptorUsage());
for (Map.Entry entry : vm.threadStatePercentages().entrySet()) {
batch.addGaugeMeasurement("jvm.thread-states." + entry.getKey().toString().toLowerCase(), entry.getValue());
}
// garbage collection
for (Map.Entry entry : vm.garbageCollectors().entrySet()) {
final String name = "jvm.gc." + entry.getKey();
batch.addCounterMeasurement(name +".time", entry.getValue().getTime(TimeUnit.MILLISECONDS));
batch.addCounterMeasurement(name +".runs", entry.getValue().getRuns());
}
}
public static interface Sanitizer {
public String apply(String name);
}
private static final Pattern disallowed = Pattern.compile("([^A-Za-z0-9.:-_]|[\\[\\]])");
private static final int LENGTH_LIMIT = 256;
/**
* Metric names restrictions are described here.
*/
public static final Sanitizer lastPassSanitizer = new Sanitizer() {
// not sure I understand why brackets need to be specified separately, but behavior is the same in python
@Override
public String apply(String name) {
name = disallowed.matcher(name).replaceAll("");
if (name.length() > LENGTH_LIMIT) {
name = name.substring(name.length() - LENGTH_LIMIT, name.length());
}
return name;
}
};
/**
* a stub to be used when the user doesn't specify a sanitizer
*/
public static final Sanitizer noopSanitizer = new Sanitizer() {
@Override
public String apply(String name) {
return name;
}
};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy