@Override public void modifySample(JrdsSample oneSample, Map<OID, Object> values) { oneSample.put(READ, joinCounter32((Long) values.get(cpqDaPhyDrvHReads), (Long) values.get(cpqDaPhyDrvReads))); oneSample.put(WRITE, joinCounter32((Long) values.get(cpqDaPhyDrvHWrites), (Long) values.get(cpqDaPhyDrvWrites))); } }
@Override public void modifySample(JrdsSample oneSample, Map<OID, Object> snmpVars) { int[] counts = new int[RUNSTAT.values().length]; Arrays.fill(counts, 0); for(Object status: snmpVars.values()) { if(status == null) continue; if(!(status instanceof Number)) continue; // ordinal is stat value - 1 int state = ((Number) status).intValue(); counts[state - 1]++; } snmpVars.clear(); oneSample.clear(); for (RUNSTAT stat: RUNSTAT.values()) { oneSample.put(stat.name(), counts[stat.ordinal()]); } }
public void send(Probe<?, ?> probe, JrdsSample sample) throws IOException { String prefix = getPrefix(probe); for(Map.Entry<String, Number> e: sample.entrySet()) { String msg = prefix + "." + e.getKey() + " " + e.getValue() + " " + (int) (sample.getTime().getTime() / 1000); ensureGraphiteConnection(); try { write(msg); } catch (IOException e1) { failed(e1); } } try { writer.flush(); } catch (IOException e1) { failed(e1); } }
/** * The sample itself can be modified<br> * * @param sample * @param values */ public void modifySample(JrdsSample sample, Map<KeyType, ValueType> values) { for(Map.Entry<String, ProbeDesc.Joined> e: getPd().getHighlowcollectmap().entrySet()) { Long joined = joinCounter32(values.remove(e.getValue().keyhigh), values.remove(e.getValue().keylow)); if(joined != null) { Map<KeyType, String> mapping = getPd().getCollectMapping(); sample.remove(mapping.get(e.getValue().keyhigh)); sample.remove(mapping.get(e.getValue().keylow)); sample.put(e.getKey(), joined.doubleValue()); } } }
static public long fill(Probe<?, ?> p) throws IOException { long start = System.currentTimeMillis() / 1000; long end = start + 3600 * 24 * 30; // update database GaugeSource sunSource = new GaugeSource(1200, 20); GaugeSource shadeSource = new GaugeSource(300, 10); long t = start; // Keep an handle to the object, for faster run Object o = p.getMainStore().getStoreObject(); while (t <= end + 86400L) { JrdsSample sample = p.newSample(); sample.setTime(new Date(t * 1000)); sample.put("sun", sunSource.getValue()); sample.put("shade", shadeSource.getValue()); p.getMainStore().commit(sample); t += RANDOM.nextDouble() * STEP + 1; } p.getMainStore().closeStoreObject(o); return t; }
/** * Used by the listener starter to store value * * @param rawValues */ public void store(Date time, Map<KeyType, Number> rawValues) { JrdsSample sample = newSample(); sample.setTime(time); injectSample(sample, rawValues); storeSample(sample); }
@Override public void commit(JrdsSample sample) { try { cnx.send(p, sample); lastUpdate = sample.getTime(); } catch (Exception e) { log(Level.ERROR, e, "Failed to send sample to graphite server: %s", e.getMessage()); } }
if(sample != null && sample.size() > 0 && isCollectRunning()) { storeSample(sample); interrupted = false;
@Test public void testFill() throws Exception { @SuppressWarnings("unchecked") Probe<?, ?> p = GenerateProbe.quickProbe(testFolder); p.setStep(30); p.getPd().add("test", DsType.GAUGE); Assert.assertTrue("Probe file creation failed", p.checkStore()); Extractor e = p.getMainStore().getExtractor(); e.addSource("test", "test"); String[] dsNames = e.getNames(); Assert.assertEquals("data source test not found", "test", dsNames[0]); long start = p.getLastUpdate().getTime(); for(int i = 1; i <= 30; i++) { JrdsSample s = p.newSample(); long sampletime = i * p.getStep() * 1000 + start; sampletime = (sampletime) - (sampletime % (p.getStep() * 1000)); s.setTime(new Date(sampletime)); s.put("test", i); p.getMainStore().commit(s); } ExtractInfo ei = ExtractInfo.get().make(new Date(start), new Date(start + 30 * p.getStep() * 1000)); DataProcessor dp = p.extract(ei); double[][] values = dp.getValues(); for(int i = 1; i <= 30; i++) { // Check raw values Assert.assertEquals("Wrong values stored", i, values[0][i], 1e-10); long sampletime = i * p.getStep() * 1000 + start; sampletime = (sampletime) - (sampletime % (p.getStep() * 1000)); } }
@Override public void modifySample(JrdsSample oneSample, Map<String, Long> values) { oneSample.setTime(new Date((getLastUpdate().getTime() + 1000) * 1000)); super.modifySample(oneSample, values); } };
public void commit(JrdsSample sample) { RrdDb rrdDb = null; try { rrdDb = factory.getRrd(getPath()); Sample onesample = rrdDb.createSample(sample.getTime().getTime() / 1000); for(Map.Entry<String, Number> e: sample.entrySet()) { onesample.setValue(e.getKey(), e.getValue().doubleValue()); } if(p.getNamedLogger().isDebugEnabled()) log(Level.DEBUG, "%s", onesample.dump()); onesample.update(); } catch (IOException e) { log(Level.ERROR, e, "Error while collecting: %s", e.getMessage()); } finally { if(rrdDb != null) factory.releaseRrd(rrdDb); } }
@Override public void modifySample(JrdsSample oneSample, Map<OID, Object> snmpVars) { log(Level.TRACE, "Will uses snmp values from %s", snmpVars); double max = 0; double min = Double.MAX_VALUE; double average = 0; int nbvalue = 0; double cpuUsed = 0; for(Map.Entry<OID, Object> e: snmpVars.entrySet()) { OID oid = e.getKey(); if(oid.startsWith(hrSWRunPerfMem)) { double value = ((Number) e.getValue()).doubleValue() * 1024; max = Math.max(max, value); min = Math.min(min, value); average += value; nbvalue++; } else if(oid.startsWith(hrSWRunPerfCPU)) { cpuUsed += ((Number) e.getValue()).doubleValue() / 100.0; } } average /= nbvalue; oneSample.put(NUM, nbvalue); oneSample.put(MAX, max); oneSample.put(MIN, min); oneSample.put(AVERAGE, average); oneSample.put(CPU, cpuUsed); }
/** * Store the collected values in the sample * * @param oneSample */ public boolean injectSample(JrdsSample oneSample, Map<KeyType, ValueType> sampleVals) { log(Level.TRACE, "Collected values: %s", sampleVals); if(getUptime() * pd.getUptimefactor() < pd.getHeartBeatDefault()) { log(Level.INFO, "uptime too low: %.0f", getUptime() * pd.getUptimefactor()); return false; } // Set the default values that might be defined in the probe description for(Map.Entry<String, Double> e: getPd().getDefaultValues().entrySet()) { oneSample.put(e); } Map<?, String> nameMap = getCollectMapping(); log(Level.TRACE, "Collect keys: %s", nameMap); Map<KeyType, Number> filteredSamples = filterValues(sampleVals); log(Level.TRACE, "Filtered values: %s", filteredSamples); for(Map.Entry<KeyType, Number> e: filteredSamples.entrySet()) { String dsName = nameMap.get(e.getKey()); if(dsName != null) { oneSample.put(dsName, e.getValue()); } else { log(Level.TRACE, "Dropped entry: %s", e.getKey()); } } modifySample(oneSample, sampleVals); return true; }