/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.hyperic.hq.plugin.system; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hyperic.hq.product.Collector; import org.hyperic.hq.product.Metric; /** * * @author glaullon */ public class LinuxCollector extends Collector { private static final Log log = LogFactory.getLog(LinuxCollector.class); private final Map<String, DeviceStats> sdpMap = new HashMap<String, DeviceStats>(); @Override public void collect() { log.debug("[collect]"); List<String[]> stats = LinuxUtils.getBlockDevicesStats(); for (String[] fields : stats) { String dev = fields[LinuxUtils.DS_DEV_NAME]; DeviceStats sdc = new DeviceStats(); DeviceStats sdp = sdpMap.get(dev); if(sdp==null){ sdp = new DeviceStats(); } int rd_ios = Integer.parseInt(fields[LinuxUtils.rd_ios]); int wr_ios = Integer.parseInt(fields[LinuxUtils.wr_ios]); int tot_ticks = Integer.parseInt(fields[LinuxUtils.tot_ticks]); int rq_ticks = Integer.parseInt(fields[LinuxUtils.rq_ticks]); sdc.nr_ios = rd_ios + wr_ios; sdc.rd_sect = Integer.parseInt(fields[LinuxUtils.rd_sect]); sdc.wr_sect = Integer.parseInt(fields[LinuxUtils.wr_sect]); sdc.rd_ticks = Integer.parseInt(fields[LinuxUtils.rd_ticks]); sdc.wr_ticks = Integer.parseInt(fields[LinuxUtils.wr_ticks]); double arqsz = 0; double await = 0; if ((sdc.nr_ios - sdp.nr_ios) != 0) { arqsz = ((sdc.rd_sect - sdp.rd_sect) + (sdc.wr_sect - sdp.wr_sect)) / ((double) (sdc.nr_ios - sdp.nr_ios)); await = ((sdc.rd_ticks - sdp.rd_ticks) + (sdc.wr_ticks - sdp.wr_ticks)) / ((double) (sdc.nr_ios - sdp.nr_ios)); } setValue(dev + ".tps", sdc.nr_ios); setValue(dev + ".rd_ios", rd_ios); setValue(dev + ".wr_ios", wr_ios); setValue(dev + ".arqsz", arqsz); setValue(dev + ".await", await); setValue(dev + ".tot_ticks", tot_ticks); setValue(dev + ".rq_ticks", rq_ticks/1000); setValue(dev + ".Availability", Metric.AVAIL_UP); sdpMap.put(dev, sdc); } } private class DeviceStats { private double nr_ios; private double rd_sect; private double wr_sect; private double rd_ticks; private double wr_ticks; } }