private Map<OID, String> initNameMap() { return getPd().getCollectMapping(); }
public Boolean configure() { if(cmd == null) return false; String cmdargs = getPd().getSpecific("arguments"); if(cmdargs != null && !cmdargs.trim().isEmpty()) { cmd = cmd + " " + Util.parseTemplate(cmdargs, this); } return true; }
public void start(String[] args) throws Exception { ProbeDesc<OID> pd = new ProbeDesc<>(); pd.setProbeClass(jrds.probe.snmp.RdsSnmpSimple.class); boolean indexed = false; for(int i = 0; i < args.length; i++) { for(String specargs: args[++i].split(",")) { String[] specinfo = specargs.split("="); pd.addSpecific(specinfo[0], specinfo[1]); pd.setProbeClass(jrds.probe.snmp.RdsIndexedSnmpRrd.class); pd.addSpecific(RdsIndexedSnmpRrd.INDEXOIDNAME, info.oid.toString()); indexed = true; } else if("--probeclass".equals(cmd.toLowerCase())) { @SuppressWarnings("unchecked") Class<? extends Probe<OID, ?>> c = (Class<? extends Probe<OID, ?>>)Class.forName(args[++i]); pd.setProbeClass(c); } else if("--graphs".equals(cmd.toLowerCase())) { String graphsList = args[++i]; for(String g: graphsList.split(",")) { pd.addGraph(g.trim()); pd.add(info.name, info.type, info.oid.format()); pd.addSpecific(RdsSnmpSimple.REQUESTERNAME, "simple"); prop.put(OutputKeys.INDENT, "yes"); prop.put("{http://xml.apache.org/xslt}indent-amount", "4"); jrds.Util.serialize(pd.dumpAsXml(), System.out, null, prop); System.out.println();
static public ProbeDesc<String> getPd() { ProbeDesc<String> pd = new ProbeDesc<String>(); pd.setName("MokeProbeDesc"); pd.setProbeName("mokeprobedesc"); pd.add("MokeDs", DsType.COUNTER); return pd; }
Class<? extends Probe<KeyType, ValueType>> probeClass = (Class<? extends Probe<KeyType, ValueType>>) pd.getProbeClass(); if(probeClass == null) { logger.error("Invalid probe description " + pd.getName() + ", probe class name not found"); return null; retValue = c.newInstance(); } catch (LinkageError ex) { logger.warn("Error creating probe's " + pd.getName() + ": " + ex); return null; } catch (ClassCastException ex) { if(t != null) showException = t; logger.warn("Error during probe instantation of type " + pd.getName() + ": ", showException); return null;
@SuppressWarnings("unchecked") public <KeyType> ProbeDesc<KeyType> makeProbeDesc(JrdsDocument n) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, ClassNotFoundException, InstantiationException { ProbeDesc<KeyType> pd = new ProbeDesc<KeyType>(); logger.trace(Util.delayedFormatString("Creating probe description %s", pd.getName())); throw new RuntimeException("Probe " + pd.getProbeName() + "defined without class"); pd.setProbeClass((Class<? extends Probe<KeyType, ?>>) c); pd.setHeartBeatDefault(pm.step * 2); graphName = graphName != null ? graphName.trim() : ""; if(graphDescMap.containsKey(graphName)) { pd.addGraph(graphName); withgraphs = true; logger.trace(Util.delayedFormatString("Adding graph: %s", graphName)); } else { logger.info(Util.delayedFormatString("Missing graph %s for probe %s", graphName, pd.getName())); logger.debug(Util.delayedFormatString("No graph defined for probe %s", pd.getName())); String name = m.get("name"); String value = specificNode.getTextContent().trim(); pd.addSpecific(name, value); logger.trace(Util.delayedFormatString("Specific added: %s='%s'", name, value)); snmpRequester = snmpRequester.trim(); if(!snmpRequester.isEmpty()) { pd.addSpecific("requester", snmpRequester);
@Test public void loadProbeDesc() throws Exception { JrdsDocument d = Tools.parseRessource("fulldesc.xml"); PropertiesManager pm = new PropertiesManager(); ProbeDescBuilder builder = new ProbeDescBuilder(); builder.setPm(new PropertiesManager()); ProbeDesc<?> pd = builder.makeProbeDesc(d); Assert.assertEquals("name", pd.getName()); Assert.assertEquals("probename", pd.getProbeName()); Assert.assertEquals(jrds.mockobjects.MokeProbe.class, pd.getProbeClass()); Assert.assertEquals("specificvalue1", pd.getSpecific("specificname1")); Assert.assertEquals("specificvalue2", pd.getSpecific("specificname2")); Assert.assertEquals(0.5, pd.getUptimefactor(), 0); Assert.assertEquals((long) pm.step * 2, pd.getHeartBeatDefault()); logger.trace(pd.getCollectMapping()); logger.trace(pd.getDefaultBeans()); // An empty collect string should not be collected Assert.assertEquals(5, pd.getCollectMapping().size()); }
private void dumpProbe(ProbeDesc<Object> pd) throws InstantiationException, IllegalAccessException, InvocationTargetException { Class<? extends Probe<Object, ?>> c = (Class<? extends Probe<Object, ?>>) pd.getProbeClass(); Probe<Object, ?> p = c.newInstance(); p.setPd(pd); System.out.println(oneLine(p)); System.out.println(doTitle(pd.getName())); System.out.println(); System.out.println(doTitle("Source type")); System.out.println(doTitle("Probe class")); System.out.println(); System.out.println(classToLink(pd.getProbeClass())); System.out.println(); System.out.println(doTitle("Arguments")); for(GenericBean bean: pd.getBeans()) { tryBeans.add(bean); Map<String, ProbeDesc.DefaultBean> defaultBeans = pd.getDefaultBeans(); if(!tryBeans.isEmpty()) { System.out.println(doTitle("Attributes")); System.out.println(); System.out.println("^ Name ^ Type ^ Description ^"); for(DsDef ds: pd.getDsDefs()) { System.out.println(String.format("| %s | %s | |", ds.getDsName(), ds.getDsType())); System.out.println(); System.out.println("^ Name ^ Description ^");
ProbeDesc<A> pd = getPd(); if(pd == null) { pd = new ProbeDesc<A>(); pd.setName(probeType); pd.setProbeName("dummyprobe"); Map<String, Object> dsMap = new HashMap<String, Object>(); dsMap.put("dsName", "ds0"); dsMap.put("dsType", DsType.COUNTER); dsMap.put("collectKey", "/jrdsstats/stat[@key='a']/@value"); pd.add(dsMap); dsMap = new HashMap<String, Object>(); dsMap.put("dsName", "ds1"); dsMap.put("dsType", DsType.COUNTER); dsMap.put("collectKey", "/jrdsstats/stat[@key='b']/@value"); pd.add(dsMap); dsMap = new HashMap<String, Object>(); dsMap.put("dsName", "ds2"); dsMap.put("dsType", DsType.COUNTER); pd.add(dsMap); setPd(pd); if(pd.getProbeClass() == null) try { pd.setProbeClass((Class<? extends Probe<A, B>>) this.getClass()); } catch (InvocationTargetException e) { throw new RuntimeException("Can't build moke probe", e);
public void start(String[] args) throws Exception { ProbeDesc<OID> pd = new ProbeDesc<>(); pd.setProbeClass(jrds.probe.snmp.RdsSnmpSimple.class); List<String> xmlPaths = new ArrayList<>(); MibLoader loader = new MibLoader();
@Override public Boolean configure() { collectKeys = new HashMap<>(getPd().getCollectMapping().size()); for(Map.Entry<String, String> e: getPd().getCollectMapping().entrySet()) { String solved = Util.parseTemplate(e.getKey(), this); JsonPath xpath = JsonPath.compile(solved); if (getPd().getSpecific("nouptime") == null) { String upTimePointer = getPd().getSpecific("upTimePath"); if (upTimePointer != null && !upTimePointer.isEmpty()) { uptimePointer = JsonPath.compile(Util.parseTemplate(upTimePointer, this)); } else { String startTimePath = getPd().getSpecific("startTimePath"); String currentTimePath = getPd().getSpecific("currentTimePath"); timePattern = getPd().getSpecific("timePattern"); if(startTimePath != null && currentTimePath != null && timePattern != null) { startPointer = JsonPath.compile(Util.parseTemplate(startTimePath, this));
@Override public boolean readSpecific() { getPd().addSpecific(REQUESTERNAME, "RAW"); String oidString = getPd().getSpecific(INDEXOIDNAME); if(oidString != null && oidString.length() > 0) { indexOid = new OID(oidString); } return super.readSpecific(); }
@Test public void testBean() throws IOException, InvocationTargetException, IllegalArgumentException, IllegalAccessException { RRDToolProbe p = new RRDToolProbe(); p.setHost(new HostStarter(new HostInfo("toto"))); ProbeDesc<String> pd = new ProbeDesc<String>(); pd.setProbeClass(p.getClass()); pd.setName("Rrdtool"); pd.setProbeName("rrdtool"); p.setPd(pd); p.setRrdfile(rrdfile); Assert.assertEquals("invalid rrdfile bean", p.getRrdfile(), pd.getBean("rrdfile").get(p)); Assert.assertEquals("invalid rrdfile bean template ", p.getRrdfile().toString(), Util.parseTemplate("${attr.rrdfile}", p)); }
Class<?> pc = pd.getProbeClass(); while (pc != null && pc != StarterNode.class) { if(pc.isAnnotationPresent(ProbeMeta.class)) { Collection<String> graphs = pd.getGraphClasses(); if(graphs.size() == 0) { System.out.println("no graphs for probe desc: " + pd.getName()); continue; System.out.println("Unknown graph " + graph + " for probe desc: " + pd.getName());
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) { } 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;
@Override public Map<String, Number> parseRs(ResultSet rs) throws SQLException { Map<String, Number> retValues = new HashMap<String, Number>(getPd().getSize()); Set<String> toCollect = getPd().getCollectMapping().keySet(); for(Map<String, Object> m: parseRsVerticaly(rs, false)) { for(Map.Entry<String, Object> e: m.entrySet()) { Double d = Double.NaN; // We only keep the data in data stores list if(toCollect.contains(e.getKey())) { if(e.getValue() instanceof String) d = Util.parseStringNumber((String) e.getValue(), Double.NaN).doubleValue(); retValues.put(e.getKey(), d); } } } return retValues; } }
ProbeDesc<?> oldpd = pf.getProbeDesc(type); try { ProbeDesc<?> pd = (ProbeDesc<?>) oldpd.clone(); pd.replaceDs(dsList); p = pf.makeProbe(pd); } catch (CloneNotSupportedException e) { List<Object> args = ArgFactory.makeArgs(probeNode, host, properties); Map<String, ProbeDesc.DefaultBean> defaultBeans = pd.getDefaultBeans(); for(Map.Entry<String, ProbeDesc.DefaultBean> e: defaultBeans.entrySet()) { if(e.getValue().delayed) { setAttributes(defaultBeans, probeNode, p, host, properties); } catch (IllegalArgumentException e) { logger.error(String.format("Can't configure %s for %s: %s", pd.getName(), host, e)); return null;
/** * * @see jrds.ProbeConnected#configure() */ public Boolean configure(List<?> args) { if(super.configure()) { ProbeDesc<String> pd = getPd(); query = jrds.Util.parseTemplate(pd.getSpecific("query"), getHost(), args); keyColumn = jrds.Util.parseTemplate(pd.getSpecific("key"), getHost(), args); uptimeQuery = jrds.Util.parseTemplate(pd.getSpecific("uptimeQuery"), getHost(), args); uptimeRow = jrds.Util.parseTemplate(pd.getSpecific("uptimeRow"), getHost(), args); String indexTemplate = pd.getSpecific("index"); if(indexTemplate != null && !"".equals(indexTemplate)) index = jrds.Util.parseTemplate(indexTemplate, getHost(), args); setName(jrds.Util.parseTemplate(pd.getProbeName(), args)); return true; } return false; }
@SuppressWarnings("unchecked") @Test public void build3() throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { HttpProbe<String> p = new HttpProbe<String>() { @Override protected Map<String, Number> parseStream(InputStream stream) { return null; } }; p.setHost(webserver); ProbeDesc<String> pd = new ProbeDesc<String>(); pd.setProbeClass((Class<? extends Probe<String, ?>>) p.getClass()); p.setPd(pd); p.setFile("/file"); p.setPort(81); Assert.assertTrue(p.configure()); Assert.assertEquals("http://" + HOST + ":81/file", p.getUrlAsString()); Assert.assertEquals("http://" + HOST + ":81/file", pd.getBean("url").get(p).toString()); validateBean(p); }