public Map<String, HostInfo> setHostMap(Map<String, Timer> timers) { Map<String, JrdsDocument> nodemap = load.getRepository(ConfigType.HOSTS); HostBuilder ob = new HostBuilder(); ob.setClassLoader(cl); ob.setMacros(macrosmap); ob.setProbeFactory(pf); ob.setPm(pm); ob.setTimers(timers); ob.setListeners(listenerMap); ob.setGraphDescMap(graphDescMap); ob.setArchivesSetMap(archivessetmap); Map<String, HostInfo> hostsMap = getObjectMap(ob, nodemap); logger.debug(jrds.Util.delayedFormatString("Hosts configured: %s", hostsMap.keySet())); return hostsMap; }
@Override HostInfo build(JrdsDocument n) throws InvocationTargetException { try { return makeHost(n); } catch (SecurityException | IllegalArgumentException | NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) { throw new InvocationTargetException(e, HostBuilder.class.getName()); } }
HostBuilder getBuilder(Macro... macros) throws IOException { HostBuilder hb = new HostBuilder(); hb.setPm(Tools.makePm(testFolder)); hb.setTimers(Tools.getSimpleTimerMap()); Map<String, Macro> mmap = new HashMap<String, Macro>(macros.length); for(Macro m: macros) { mmap.put(m.getName(), m); } hb.setMacros(mmap); hb.setProbeFactory(new MokeProbeFactory()); return hb; }
@Test public void testProbe2() throws Exception { JrdsDocument d = Tools.parseString(goodProbeXml2); PropertiesManager pm = Tools.makePm(testFolder); HostBuilder hb = new HostBuilder(); hb.setProbeFactory(new MokeProbeFactory()); hb.setPm(pm); hb.setTimers(Tools.getSimpleTimerMap()); HostInfo host = new HostInfo("testProbe2"); host.setHostDir(pm.rrddir); Probe<?, ?> p = hb.makeProbe(d.getRootElement(), host, null); Assert.assertNotNull(p); Assert.assertEquals(host.getName() + "/" + p.getName(), p.toString()); }
@Test public void testAttributesParsing() throws Exception { PropertiesManager pm = Tools.makePm(testFolder); File descpath = new File("desc"); if(descpath.exists()) pm.libspath.add(descpath.toURI()); ConfigObjectFactory conf = new ConfigObjectFactory(pm); JrdsDocument pddoc = Tools.parseRessource("beans.xml"); conf.getNodeMap(ConfigType.PROBEDESC).put("name", pddoc); Map<String, GraphDesc> graphDescMap = conf.setGraphDescMap(); Map<String, ProbeDesc<? extends Object>> probeDescMap = conf.setProbeDescMap(); ProbeFactory pf = new ProbeFactory(probeDescMap, graphDescMap); HostBuilder hb = new HostBuilder(); hb.setPm(pm); hb.setClassLoader(this.getClass().getClassLoader()); hb.setMacros(new HashMap<String, Macro>(0)); hb.setProbeFactory(pf); Map<String, Timer> timerMap = Tools.getSimpleTimerMap(); timerMap.put("another", timerMap.get(Timer.DEFAULTNAME)); hb.setTimers(timerMap); JrdsDocument fullhost = Tools.parseRessource("attrhost.xml"); HostInfo hi = hb.build(fullhost); Probe<?, ?> p = hi.getProbes().iterator().next(); Assert.assertEquals("${attr.customattr1} failed", "defaultattr1", Util.parseTemplate("${attr.customattr1}", p)); Assert.assertEquals("${attr.customattr3} failed", "defaultattr2", Util.parseTemplate("${attr.customattr2}", p)); Assert.assertEquals("${attr.customattr3} failed", "defaultattr1", Util.parseTemplate("${attr.customattr3}", p)); Assert.assertEquals("${attr.customattr4} failed", "value4", Util.parseTemplate("${attr.customattr4}", p)); }
@Test public void testConnectionInfo() throws Exception { PropertiesManager pm = Tools.makePm(testFolder); HostBuilder hb = new HostBuilder(); hb.setPm(pm); hb.setClassLoader(this.getClass().getClassLoader()); JrdsDocument cnxdoc = new JrdsDocument(Tools.dbuilder.newDocument()); cnxdoc.doRootElement("host").addElement("connection", "type=jrds.probe.JMXConnection").addElement("attr", "name=port").setTextContent("8999"); for(ConnectionInfo ci: hb.makeConnexion(cnxdoc.getRootElement(), new HostInfo("localhost"), new HashMap<String, String>(0))) { logger.trace(ci.getName()); StarterNode sn = new StarterNode() {}; ci.register(sn); JMXConnection cnx = sn.find(JMXConnection.class); Assert.assertEquals("Attributed not setted", new Integer(8999), cnx.getPort()); } }
for(ConnectionInfo cnx: makeConnexion(fragment, host, properties)) { host.addConnection(cnx); logger.trace(Util.delayedFormatString("Adding macro %s: %s", name, m)); if (m != null) { Map<String, String> macroProps = makeProperties(macroNode, properties, host); logger.trace(Util.delayedFormatString("properties inherited for macro %s: %s", m, properties)); logger.trace(Util.delayedFormatString("local properties for macro %s: %s", m, macroProps)); parseFragment(macrodef, host, collections, newProps); } else { logger.error("Unknown macro:" + name); parseFragment(forNode, host, collections, temp); continue; try { makeProbe(probeNode, host, properties); } catch (InvocationTargetException e) { logger.error("Probe creation failed for host " + host.getName() + ": " + e.getMessage());
type = jrds.Util.parseTemplate(type, host, properties); List<Map<String, Object>> dsList = doDsList(type, probeNode.getElementbyName("dslist")); if(dsList.size() > 0) { logger.trace(Util.delayedFormatString("Data source replaced for %s/%s: %s", host, type, dsList)); if(!resolveDefaultBean(p, args, properties, beanName, beanValue)) { return null; setAttributes(defaultBeans, probeNode, p, host, properties); } catch (IllegalArgumentException e) { logger.error(String.format("Can't configure %s for %s: %s", pd.getName(), host, e)); if(!resolveDefaultBean(p, args, properties, beanName, beanValue)) { return null; ConnectedProbe cp = (ConnectedProbe) p; for(ConnectionInfo ci: makeConnexion(probeNode, p, properties)) { ci.register(p);
PropertiesManager localpm = Tools.makePm(testFolder); HostBuilder hb = new HostBuilder(); hb.setProbeFactory(new MokeProbeFactory() { @Override public Probe<?, ?> makeProbe(String type) { hb.setPm(localpm); hb.setTimers(Tools.getSimpleTimerMap()); probeNode.doRootElement("probe", "type=probetype"); Probe<?, ?> p = hb.makeProbe(probeNode.getRootElement(), host, null); Assert.assertEquals("localhost", p.getPd().getBean("hostInfo").get(p)); logger.trace(p.getName());
@Test public void testMacroFill() throws Exception { JrdsDocument d = Tools.parseString(goodMacroXml); MacroBuilder b = new MacroBuilder(); Macro m = b.makeMacro(d); Map<String, Macro> macroMap = new HashMap<String, Macro>(); macroMap.put(m.getName(), m); JrdsDocument hostdoc = Tools.parseString(goodHostXml); hostdoc.setDocumentURI("-//jrds//DTD Graph Description//EN"); hostdoc.getRootElement().addElement("macro", "name=macrodef"); PropertiesManager pm = Tools.makePm(testFolder); HostBuilder hb = new HostBuilder(); hb.setPm(pm); hb.setMacros(macroMap); hb.setProbeFactory(new MokeProbeFactory()); hb.setTimers(Tools.getSimpleTimerMap()); HostInfo host = hb.makeHost(hostdoc); logger.debug("probes:" + host.getProbes()); Collection<String> probesName = new ArrayList<String>(); for(Probe<?, ?> p: host.getProbes()) { probesName.add(p.toString()); } Assert.assertTrue("MacroProbe1 not found", probesName.contains("myhost/MacroProbe1")); Assert.assertTrue("MacroProbe2 not found", probesName.contains("myhost/MacroProbe2")); }
@Test public void testDsreplace() throws Exception { JrdsDocument d = Tools.parseRessource("dsoverride.xml"); PropertiesManager pm = Tools.makePm(testFolder); HostBuilder hb = new HostBuilder(); ProbeFactory pf = new MokeProbeFactory(); hb.setProbeFactory(pf); hb.setPm(pm); hb.setTimers(Tools.getSimpleTimerMap()); HostInfo host = new HostInfo("testDsreplace"); host.setHostDir(pm.rrddir); Probe<?, ?> p = hb.makeProbe(d.getRootElement().getElementbyName("probe"), host, null); ProbeDesc<?> pd = p.getPd(); Assert.assertNotNull(pd); Assert.assertEquals(1, pd.getSize()); Assert.assertNotSame(pf.getProbeDesc(pd.getName()), pd.getSize()); }
@Test public void testMacroFill() throws Exception { JrdsDocument d = Tools.parseString(goodMacroXml); Macro m = doMacro(d, "macrodef"); JrdsDocument hostdoc = Tools.parseString(goodHostXml); HostBuilder hb = getBuilder(m); HostInfo host = hb.makeHost(hostdoc); Collection<String> probesName = new ArrayList<String>(); for(Probe<?, ?> p: host.getProbes()) { probesName.add(p.toString()); } logger.trace(probesName); Assert.assertTrue("MacroProbe1 not found", probesName.contains("myhost/MacroProbe1")); Assert.assertTrue("MacroProbe2 not found", probesName.contains("myhost/MacroProbe2")); }
@Test public void testMacroFillwithProps2() throws Exception { Map<String, String> prop = new HashMap<String, String>(); prop.put(OutputKeys.INDENT, "yes"); prop.put(OutputKeys.INDENT, "yes"); prop.put("{http://xml.apache.org/xslt}indent-amount", "4"); JrdsDocument d = Tools.parseString(goodMacroXml); d.getRootElement().addElement("probe", "type=MacroProbe3").addElement("attr", "name=val").addTextNode("${a}"); Macro m = doMacro(d, "macrodef"); m.getDf(); JrdsDocument hostdoc = Tools.parseString(goodHostXml); hostdoc.getRootElement().getChildElementsByName("macro").iterator().next().addElement("arg", "type=String", "value=${a}"); HostBuilder hb = getBuilder(m); HostInfo host = hb.makeHost(hostdoc); boolean found = false; for(Probe<?, ?> p: host.getProbes()) { if("myhost/MacroProbe1".equals(p.toString())) { MokeProbe<?, ?> mp = (MokeProbe<?, ?>) p; logger.trace("Args:" + mp.getArgs()); Assert.assertFalse(mp.getArgs().contains("bidule")); found = true; } else if("myhost/MacroProbe2".equals(p.toString())) { @SuppressWarnings("unused") MokeProbe<?, ?> mp = (MokeProbe<?, ?>) p; } } Assert.assertTrue("macro probe with properties not found", found); }
@Test public void testMacroTag() throws Exception { JrdsDocument d = Tools.parseString(goodMacroXml); String tagname = "mytag"; d.getRootElement().addElement("tag").setTextContent(tagname); Macro m = doMacro(d, "macrodef"); HostBuilder hb = getBuilder(m); JrdsDocument hostdoc = Tools.parseString(goodHostXml); HostInfo host = hb.makeHost(hostdoc); Assert.assertTrue("tag not found", host.getTags().contains(tagname)); }
@Test public void testMacroFillwithProps1() throws Exception { JrdsDocument d = Tools.parseString(goodMacroXml); d.getRootElement().addElement("entry", "key=a").setTextContent("bidule"); Macro m = doMacro(d, "macrodef"); JrdsDocument hostdoc = Tools.parseString(goodHostXml); hostdoc.getRootElement().addElement("probe", "type=MacroProbe3").addElement("arg", "type=String", "value=${a}"); HostBuilder hb = getBuilder(m); HostInfo host = hb.makeHost(hostdoc); boolean found = false; for(Probe<?, ?> p: host.getProbes()) { if("myhost/MacroProbe3".equals(p.toString())) { MokeProbe<?, ?> mp = (MokeProbe<?, ?>) p; logger.trace("Args:" + mp.getArgs()); Assert.assertFalse(mp.getArgs().contains("bidule")); found = true; } } Assert.assertTrue("macro probe with properties not found", found); }
@Test public void testCollection() throws Exception { JrdsDocument d = Tools.parseString(goodMacroXml); Tools.appendString(Tools.appendString(Tools.appendString(d.getDocumentElement(), "<for var=\"a\" collection=\"c\"/>"), "<probe type = \"MacroProbe3\" />"), "<arg type=\"String\" value=\"${a}\" />"); Macro m = doMacro(d, "macrodef"); JrdsDocument hostdoc = Tools.parseString(goodHostXml); Tools.appendString(Tools.appendString(hostdoc.getDocumentElement(), "<collection name=\"c\"/>"), "<element>bidule</element>"); HostBuilder hb = getBuilder(m); HostInfo host = hb.makeHost(hostdoc); boolean found = false; for(Probe<?, ?> p: host.getProbes()) { if("myhost/MacroProbe3".equals(p.toString())) { MokeProbe<?, ?> mp = (MokeProbe<?, ?>) p; logger.trace("Args:" + mp.getArgs()); Assert.assertTrue(mp.getArgs().contains("bidule")); found = true; } } Assert.assertTrue("collection not found", found); }
@Test public void testRecursive() throws Exception { JrdsDocument d1 = Tools.parseString(goodMacroXml); Tools.appendString(d1.getDocumentElement(), "<macro name=\"macrodef2\" />"); Macro m1 = doMacro(d1, "macrodef"); JrdsDocument d2 = Tools.parseString(goodMacroXml); Tools.appendString(Tools.appendString(d2.getDocumentElement(), "<probe type = \"MacroProbe3\" />"), "<arg type=\"String\" value=\"bidule\" />"); Macro m2 = doMacro(d2, "macrodef2"); HostBuilder hb = getBuilder(m1, m2); JrdsDocument hostdoc = Tools.parseString(goodHostXml); HostInfo host = hb.makeHost(hostdoc); boolean found = false; for(Probe<?, ?> p: host.getProbes()) { if("myhost/MacroProbe3".equals(p.toString())) { MokeProbe<?, ?> mp = (MokeProbe<?, ?>) p; logger.trace("Args:" + mp.getArgs()); Assert.assertTrue(mp.getArgs().contains("bidule")); found = true; } } Assert.assertTrue("macro not recursive", found); }