package org.stagemonitor.os.metrics; import static org.stagemonitor.core.metrics.metrics2.MetricName.name; import java.util.HashMap; import java.util.Map; import com.codahale.metrics.Gauge; import com.codahale.metrics.Metric; import org.hyperic.sigar.FileSystemUsage; import org.hyperic.sigar.Sigar; import org.hyperic.sigar.SigarException; import org.stagemonitor.core.metrics.metrics2.MetricName; public class FileSystemMetricSet extends AbstractSigarMetricSet<FileSystemUsage> { private String mountpoint; public FileSystemMetricSet(String mountpoint, Sigar sigar) throws SigarException { super(sigar); this.mountpoint = mountpoint; } @Override public Map<MetricName, Metric> getMetrics() { Map<MetricName, Metric> metrics = new HashMap<MetricName, Metric>(); metrics.put(name("disk_usage").tag("mountpoint", mountpoint).type("total").build(), new Gauge<Long>() { @Override public Long getValue() { return getSnapshot().getTotal() * 1024; } }); metrics.put(name("disk_usage").tag("mountpoint", mountpoint).type("free").build(), new Gauge<Long>() { @Override public Long getValue() { return getSnapshot().getFree() * 1024; } }); metrics.put(name("disk_usage").tag("mountpoint", mountpoint).type("used").build(), new Gauge<Long>() { @Override public Long getValue() { return getSnapshot().getUsed() * 1024; } }); metrics.put(name("disk_usage_percent").tag("mountpoint", mountpoint).build(), new Gauge<Double>() { @Override public Double getValue() { return getSnapshot().getUsePercent() * 100.0; } }); metrics.put(name("disk_io").tag("mountpoint", mountpoint).type("read").build(), new Gauge<Long>() { @Override public Long getValue() { return getSnapshot().getDiskReadBytes(); } }); metrics.put(name("disk_io").tag("mountpoint", mountpoint).type("write").build(), new Gauge<Long>() { @Override public Long getValue() { return getSnapshot().getDiskWriteBytes(); } }); metrics.put(name("disk_queue").tag("mountpoint", mountpoint).build(), new Gauge<Double>() { @Override public Double getValue() { return getSnapshot().getDiskQueue(); } }); if (getSnapshot().getDiskServiceTime() >= 0) { metrics.put(name("disk_service_time").tag("mountpoint", mountpoint).build(), new Gauge<Double>() { @Override public Double getValue() { return getSnapshot().getDiskServiceTime(); } }); } return metrics; } @Override FileSystemUsage loadSnapshot(Sigar sigar) throws SigarException { return sigar.getFileSystemUsage(mountpoint); } }