public void run() { lp.checkStore(); } };
String name = p.getName(); if(name == null) name = jrds.Util.parseTemplate(p.getPd().getProbeName(), p); p.setName(name); for(String graphName: p.getPd().getGraphClasses()) { GraphDesc gd = graphDescMap.get(graphName); if(gd != null) { p.addGraph(new GraphNode(p, gd)); } else { logger.warn(Util.delayedFormatString("Unknown graph %s for probe %s", graphName, p)); } catch (SecurityException e) { } catch (NoSuchMethodException e) { logger.warn("Probe arguments not matching configurators for " + p.getPd().getName() + ": " + e.getMessage()); return false; } catch (Exception ex) { if(t != null) showException = t; logger.warn("Error during probe creation of type " + p.getPd().getName() + " with args " + constArgs + ": ", showException); return false;
/** * A special case constructor, mainly used by virtual probe * * @param pd */ public Probe(ProbeDesc<KeyType> pd) { super(); setPd(pd); }
/** * Return true if is collect key was marked optionnal in the probe * description * * @param collect * @return */ public boolean isOptional(KeyType collect) { return getPd().isOptional(getCollectMapping().get(collect)); }
public void addProbe(Probe<?, ?> p) { probeMap.put(p.hashCode(), p); addGraphs(p.getGraphList()); }
p.readProperties(pm); p.setStep(timer.getStep()); p.setTimeout(timer.getTimeout()); p.setArchives(archives); if(label != null && !"".equals(label)) { logger.trace(Util.delayedFormatString("Adding label %s to %s", label, p)); p.setLabel(jrds.Util.parseTemplate(label, host, properties)); p.setHost(shost); ProbeDesc<?> pd = p.getPd(); List<Object> args = ArgFactory.makeArgs(probeNode, host, properties); if (connectionName != null && p.find(connectionName) == null) { if (logger.isTraceEnabled()) logger.trace(Util.delayedFormatString("Looking for connection %s in %s", connectionName, host.getConnections())); p.setMainStore(pm.defaultStore, empty); } catch (Exception e1) { logger.error(Util.delayedFormatString("Failed to configure the default store for the probe %s", pm.defaultStore.getClass(), p)); p.addStore(e.getValue()); } catch (Exception e1) { logger.warn(Util.delayedFormatString("Failed to configure the store %s for the probe %s", e.getKey(), e.getValue().getClass().getCanonicalName(), p)); if(p.checkStore()) {
@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)); } }
pd = new ProbeDesc<String>(); p.setPd(pd); p.setHost(hs); name = "EmptyProbe"; p.setName(name); p.setStep(pm.step); p.setTimeout(pm.timeout); factoryArgs = Collections.emptyMap(); p.setMainStore(sf, factoryArgs);
w.object(); if (p != null) { Optional.ofNullable(p.getQualifiedName()).ifPresent( i -> w.key("probequalifiedname").value(i)); Optional.ofNullable(p.getName()).ifPresent( i-> w.key("probeinstancename").value(i)); Optional.ofNullable(p.getPd().getName()).ifPresent( i-> w.key("probename").value(i)); Optional.ofNullable(p.getHost().getName()).ifPresent( i-> w.key("hostname").value(i)); Optional.ofNullable(params.getPid()).ifPresent( i-> w.key("pid").value(i)); if(p instanceof IndexedProbe) { w.array(); List<String> dsNames = new ArrayList<>(); dsNames.addAll(p.getPd().getDs()); Collections.sort(dsNames, Util.nodeComparator); for(String datasource: dsNames) { w.key("graphs"); w.array(); for(GraphNode gn: p.getGraphList()) { w.object(); w.key("id").value(gn.getQualifiedName().hashCode());
@SuppressWarnings("unchecked") @Before public void prepare() throws Exception { pm = Tools.makePm(testFolder); hl = new HostsList(pm); GenerateProbe.ChainedMap<Object> args = GenerateProbe.ChainedMap.start().set(PropertiesManager.class, pm); p = GenerateProbe.quickProbe(testFolder, args); p.getPd().add("data", DsType.GAUGE); Assert.assertTrue("Failed to create probe " + p.getMainStore().getPath(), p.checkStore()); }
Probe<String, Number> p = (MokeProbe<String, Number>) GenerateProbe.quickProbe(testFolder, args); p.checkStore(); long endSec = Full.fill(p); Period pr = Full.getPeriod(p, endSec); gd.setGraphName("SumTest"); gd.setName("SumTest"); p.addGraph(gd); hl.addHost(p.getHost()); hl.addProbe(p); glist.add(p.getGraphList().iterator().next().getQualifiedName()); Sum s = new Sum("A sum test", glist); s.configure(hl); DataProcessor dp = p.extract(ei);
/** * 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; }
@Test public void create() throws Exception { @SuppressWarnings("unchecked") Probe<String, Number> p = GenerateProbe.quickProbe(testFolder); p.setPd(Full.getPd()); File rrdFile = new File(p.getMainStore().getPath()); Assert.assertTrue("Failed to create probe " + rrdFile.getAbsolutePath(), p.checkStore()); logger.debug("Created " + p + " stored in " + p.getMainStore().getStoreObject()); long endSec = Full.fill(p); logger.debug("fill time: " + endSec); logger.debug(p.getLastUpdate()); Period pr = Full.getPeriod(p, endSec); Graphics2D g2d = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB).createGraphics(); GraphDesc gd = Full.getGd(); gd.initializeLimits(g2d); GraphNode gn = new GraphNode(p, gd); Graph g = new Graph(gn); g.setPeriod(pr); int h = g.getDimension().height; int w = g.getDimension().width; File outputFile = testFolder.newFile(); OutputStream out = new FileOutputStream(outputFile); g.writePng(out); BufferedImage img = ImageIO.read(outputFile); Assert.assertEquals(h, img.getHeight()); Assert.assertEquals(w, img.getWidth()); Assert.assertTrue(rrdFile.exists()); Assert.assertTrue(rrdFile.length() > 0); }
@Test public void readDatasourcesNames() throws Exception { GenerateProbe.ChainedMap<Object> factoryArgs = GenerateProbe.ChainedMap.start(1).set("rrdfile", rrdfile.getCanonicalPath()); GenerateProbe.ChainedMap<Object> args = GenerateProbe.ChainedMap.start(2) .set(StoreFactory.class, new RRDToolStoreFactory()) .set(GenerateProbe.FACTORYCONFIG, factoryArgs); Probe<?,?> p = GenerateProbe.fillProbe(new GenerateProbe.EmptyProbe(), testFolder, args); p.getPd().add("speed", DsType.GAUGE); p.getPd().add("weight", DsType.GAUGE); Assert.assertTrue(p.checkStore()); Period period = new Period("1999-03-07T13:00:00", "1999-03-07T13:15:00"); DataProcessor dp = p.extract(ExtractInfo.get().make(period.getBegin(), period.getEnd())); String[] dsNames = dp.getSourceNames(); Assert.assertEquals("data source weight not found", "weight", dsNames[0]); Assert.assertEquals("data source speed not found", "speed", dsNames[1]); Assert.assertEquals("Missing last values", 2, p.getMainStore().getLastValues().size()); }
public Document dumpAsXml(boolean sorted) throws ParserConfigurationException, IOException { String probeName = getPd().getName(); String name = getName(); String host = ""; if(getHost() != null) host = getHost().getName(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); graph.setAttribute("id", String.valueOf(gn.hashCode())); String[] dss = getPd().getDs().toArray(new String[] {}); dsNameElement.setAttribute("pid", String.valueOf(hashCode())); dsNameElement.setAttribute("dsName", dsName); dsNameElement.appendChild(document.createTextNode(dsName));
@Override public CacheStore create(Probe<?, ?> p) { String hostname = p.getHost().getName(); String probeName = p.getName(); if(!cache.containsKey(hostname)) cache.put(hostname, new HashMap<String, Map<String, Number>>()); Map<String, Map<String, Number>> probes = cache.get(hostname); if(!probes.containsKey(probeName)) probes.put(probeName, new HashMap<String, Number>(p.getPd().getDsDefs().length)); return new CacheStore(p, probes.get(probeName)); }
ServletOutputStream out = res.getOutputStream(); Date lastupdate = p.getLastUpdate(); long age = (new Date().getTime() - lastupdate.getTime()) / 1000; if(age > p.getStep() * 2) { out.println("Probe too old: " + age); return; Extractor ex = p.fetchData(); ExtractInfo ei = ExtractInfo.get().make(paste, lastupdate).make(p.getStep()); if (ds != null && !"".equals(ds.trim())) { String dsName = ds.trim(); out.print(val); } else { for(String dsName: p.getPd().getDs()) { ex.addSource(dsName, dsName); out.println(dsName + ": " + val); out.println("Last update: " + p.getLastUpdate()); out.println("Last update age (ms): " + (new Date().getTime() - p.getLastUpdate().getTime()));
logger.trace("Will create probedesc " + pd.getName()); Probe<?, ?> p = pf.makeProbe(pd.getName()); p.setHost(hs); for(GenericBean bean: pd.getBeans()) { try { p.configureStarters(pm); for(String graphName: p.getPd().getGraphClasses()) { try { GraphDesc gd = graphDescMap.get(graphName); p.addGraph(gd); GraphNode gn = new GraphNode(p, gd); allgraphs.add(gn);
/** * Check the final status of the probe. It must be called once before an * probe can be used * * Open the rrd backend of the probe. it's created if it's needed * */ public boolean checkStore() { ProbeDesc<KeyType> pd = getPd(); if(pd == null) { log(Level.ERROR, "Missing Probe description"); return false; } if(getHost() == null) { log(Level.ERROR, "Missing host"); return false; } // Name can be set by other means if(name == null) name = parseTemplate(pd.getProbeName()); finished = mainStore.checkStoreFile(archives); return finished; }