private Map<OID, String> initNameMap() { return getPd().getCollectMapping(); }
@Override public Map<String, Number> filterValues(Map<String, Number> valuesList) { Set<String> collected = getPd().getCollectMapping().keySet(); Map<String, Number> retValues = new HashMap<String, Number>(collected.size()); for(String collect: collected) { Number value = valuesList.get(getIndexName() + "_" + collect); if(value != null) retValues.put(collect, value); } return retValues; } }
@SuppressWarnings("unchecked") public Map<KeyType, String> getCollectMapping() { Map<KeyType, String> rawMap = (Map<KeyType, String>) getPd().getCollectMapping(); Map<KeyType, String> retValues = new HashMap<KeyType, String>(rawMap.size()); for(Map.Entry<KeyType, String> e: rawMap.entrySet()) { String value = jrds.Util.parseTemplate(e.getValue(), this); KeyType key = e.getKey(); if(key instanceof String) key = (KeyType) jrds.Util.parseTemplate((String) key, this); retValues.put(key, value); } return retValues; }
@Override public Boolean configure() { collectKeys = new HashMap<String, String>(); for(Map.Entry<String, String> e: getPd().getCollectMapping().entrySet()) { String dsName = e.getValue(); String solved = jrds.Util.parseTemplate(e.getKey(), this); collectKeys.put(solved, dsName); } return super.configure(); }
@Override public void setPd(ProbeDesc<String> pd) { super.setPd(pd); collectKeys = getPd().getCollectMapping(); }
private Map<XPathExpression, Number> parse(String message, XmlProvider xmlstarter) { if(message == null || "".equals(message)) { return Collections.emptyMap(); } else { log(Level.TRACE, "new message to parse: "); log(Level.TRACE, message); // The XML returned from an iLO is buggy, up to ilO2 1.50 message = message.replaceAll("<RIBCL VERSION=\"[0-9\\.]+\"/>", "<RIBCL >"); Document d = xmlstarter.getDocument(new StringReader(message)); return xmlstarter.fileFromXpaths(d, getPd().getCollectMapping().keySet()); } }
@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; } }
@Override public Map<String, Number> parseRs(ResultSet rs) throws SQLException { Map<String, Number> retValues = new HashMap<String, Number>(getPd().getSize()); for(String key: getPd().getCollectMapping().keySet()) { retValues.put(key, 0); } for(Map<String, Object> m: parseRsHorizontaly(rs, false)) { for(Map.Entry<String, Object> e: m.entrySet()) { Number n = retValues.get(e.getKey()); // We only keep the data in data stores list if(n != null) { if(e.getValue() instanceof String) { double d = jrds.Util.parseStringNumber((String) e.getValue(), 0.0d); n = n.doubleValue() + d; } else if(Number.class.isAssignableFrom(e.getValue().getClass())) n = n.doubleValue() + ((Number) e.getValue()).doubleValue(); retValues.put(e.getKey(), n); } } } return retValues; } }
/** * 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()); } } }
@Override protected boolean finishConfigure(List<Object> args) { log(Level.TRACE, "Configuring collect xpath with %s", args); CollectResolver<XPathExpression> cr = new XmlProvider.XmlResolver(); collectKeys = new HashMap<>(getPd().getCollectMapping().size()); for(Map.Entry<String, String> e: getPd().getCollectMapping().entrySet()) { String solved = Util.parseTemplate(String.format(e.getKey(), args != null ? args.toArray() : null), this, args); XPathExpression xpath = cr.resolve(solved); if (xpath == null) { log(Level.DEBUG, "unparsed xpath: %s", e.getKey()); continue; } else { collectKeys.put(xpath, solved); } } collectKeys = Collections.unmodifiableMap(collectKeys); log(Level.TRACE, "collect xpath mapping %s", collectKeys); return super.finishConfigure(args); }
if (stmt.execute(query)) { rs = stmt.getResultSet(); Set<String> collectKeys = new HashSet<>(getPd().getCollectMapping().keySet()); if (uptimeQuery == null && uptimeRow != null) collectKeys.add(uptimeRow);
@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);
@Override public boolean readSpecific() { nameMap = getPd().getCollectMapping(); boolean readOK = false; try { String requesterName = getPd().getSpecific(REQUESTERNAME); if(requesterName != null) { log(Level.TRACE, "Setting requester to %s", requesterName); requester = SnmpRequester.valueOf(requesterName.toUpperCase()); readOK = true; } else { log(Level.ERROR, "No requester found"); } String uptimeOidName = getPd().getSpecific(UPTIMEOIDNAME); if(uptimeOidName != null) { log(Level.TRACE, "Setting uptime OID to %s", uptimeOidName); uptimeoid = new OID(uptimeOidName); } } catch (Exception e) { log(Level.ERROR, e, "Unable to read specific: %s", e.getMessage()); } return readOK && super.readSpecific(); }
String dsName = getPd().getCollectMapping().values().iterator().next(); return Collections.singletonMap(dsName, (Number) value); } else {
@Test public void manageArgs() throws Exception { URL url = getClass().getResource("/ressources/xmldata.xml"); List<Object> args = new ArrayList<Object>(1); args.add("a"); args.add("/jrdsstats/stat[@key='a']/@value"); HttpXml p = new jrds.probe.HttpXml() { @Override public String getName() { return "Moke"; } }; HostStarter host = new HostStarter(new HostInfo("moke")); p.setHost(host); p.setPd(pd); p.configure(url, args); Map<String, String> keys = p.getCollectMapping(); logger.trace("Collect keys: " + p.getCollectMapping()); logger.trace("Collect strings: " + pd.getCollectMapping()); Assert.assertTrue(keys.containsKey("/jrdsstats/stat[@key='%1$s']/@value")); Assert.assertTrue(keys.containsKey("/jrdsstats/stat[@key='b']/@value")); Assert.assertTrue(keys.containsKey("c")); }
@Test public void loadBadProbeDesc() throws Exception { JrdsDocument d = Tools.parseRessource("baddesc.xml"); PropertiesManager pm = new PropertiesManager(); List<LoggingEvent> logged = Tools.getLockChecker("jrds.configuration.ConfigObjectBuilder"); ProbeDescBuilder builder = new ProbeDescBuilder(); builder.setPm(pm); ProbeDesc<?> pd = builder.makeProbeDesc(d); logger.trace("Collect mapping: " + pd.getCollectMapping()); Assert.assertEquals(1, pd.getCollectMapping().size()); boolean found = false; for(LoggingEvent le: logged) { String message = le.getRenderedMessage(); if(message.contains("Invalid ds type specified")) { found = true; break; } } Assert.assertTrue("bad probe desc not detected", found); }
@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()); }