private String enrichArguments(String args, MonitoredService svc, TimeoutTracker tracker, Map <String, Object> parameters) { String richArgs = args; richArgs = richArgs.replace("${timeout}", ((Long)tracker.getTimeoutInMillis()).toString()); richArgs = richArgs.replace("${timeoutsec}", ((Long)tracker.getTimeoutInSeconds()).toString()); richArgs = richArgs.replace("${retry}", ParameterMap.getKeyedString(parameters, "retry", ((Integer)DEFAULT_RETRY).toString())); richArgs = richArgs.replace("${ipaddr}", svc.getIpAddr()); richArgs = richArgs.replace("${nodeid}", ((Integer) svc.getNodeId()).toString()); richArgs = richArgs.replace("${nodelabel}", svc.getNodeLabel()); richArgs = richArgs.replace("${svcname}", svc.getSvcName()); return richArgs; }
public static Properties getServiceProperties(final MonitoredService svc) { final InetAddress addr = InetAddressUtils.addr(svc.getIpAddr()); final boolean requireBrackets = addr != null && addr instanceof Inet6Address && !svc.getIpAddr().startsWith("["); final Properties properties = new Properties(); properties.put("ipaddr", requireBrackets ? "[" + svc.getIpAddr() + "]" : svc.getIpAddr()); properties.put("nodeid", svc.getNodeId()); properties.put("nodelabel", svc.getNodeLabel()); properties.put("svcname", svc.getSvcName()); return properties; } }
private InetAddress determineTargetAddress(MonitoredService svc, Map<String, Object> parameters) { String rawOverrideTarget = ParameterMap.getKeyedString(parameters, PARM_TARGET_IP_ADDR, null); String overrideTarget = rawOverrideTarget; if (rawOverrideTarget != null) { overrideTarget = PropertiesUtils.substitute(rawOverrideTarget, getServiceProperties(svc)); LOG.debug("Expanded value '{}' of parameter {} to '{}' for service {} on interface {}", rawOverrideTarget, PARM_TARGET_IP_ADDR, overrideTarget, svc.getSvcName(), svc.getAddress()); } if (overrideTarget == null) return svc.getAddress(); LOG.debug("Using user-specified override target IP address {} instead of service address {} for service {}", overrideTarget, svc.getAddress(), svc.getSvcName()); try { final InetAddress overrideAddr = InetAddressUtils.addr(overrideTarget); LOG.debug("Overriding service address ({}) with user-specified target address ({}) for service {}", svc.getAddress(), overrideAddr, svc.getSvcName()); return overrideAddr; } catch (final IllegalArgumentException e) { LOG.warn("Failed to look up {} override value {} for service {}. Using service interface {} instead", PARM_TARGET_IP_ADDR, overrideTarget, svc.getSvcName(), svc.getAddress()); } return svc.getAddress(); }
@Override public PollStatus poll(MonitoredService svc, Map<String, Object> parameters) { return PassiveStatusKeeper.getInstance().getStatus(svc.getNodeLabel(), svc.getIpAddr(), svc.getSvcName()); }
if (rawProxyIpAddr != null) { proxyIpAddr = PropertiesUtils.substitute(rawProxyIpAddr, getServiceProperties(svc)); LOG.debug("Expanded value '{}' of parameter {} to '{}' for service {} on interface {}", rawProxyIpAddr, PARM_PROXY_IP_ADDR, proxyIpAddr, svc.getSvcName(), svc.getAddress()); LOG.info("Using address {} from node '{}':'{}' as proxy for service '{}' on interface {}", proxyAddress, proxyNodeFS, proxyNodeFI, svc.getSvcName(), svc.getIpAddr()); return proxyAddress; LOG.info("Using address {} from node with DBID {} as proxy for service '{}' on interface {}", proxyAddress, proxyNodeId, svc.getSvcName(), svc.getIpAddr()); return proxyAddress; LOG.info("Using address {} (user-specified) as proxy for service '{}' on interface {}", proxyAddress, svc.getSvcName(), svc.getIpAddr()); return proxyAddress; LOG.error("Unable to determine proxy address for service '{}' on interface '{}'. The poll will be unable to proceed.", svc.getSvcName(), svc.getIpAddr()); return null;
LOG.debug("{}: Creating new AMI-Connection: {}:{}, {}/{}", svc.getSvcName(), svc.getIpAddr(), amiConfig.getPort(), amiConfig.getUsername(), amiConfig.getPassword()); ManagerConnectionFactory factory = new ManagerConnectionFactory(svc.getIpAddr(), amiConfig.getPort().orElse(null), amiConfig.getUsername().orElse(null), amiConfig.getPassword().orElse(null)); ManagerConnection managerConnection; LOG.debug("{}: Attempt {}", svc.getSvcName(), timeoutTracker.getAttempt()); try LOG.debug("{}: AMI login", svc.getSvcName()); managerConnection.login(); LOG.debug("{}: AMI sendAction SipShowPeer", svc.getSvcName()); ManagerResponse response = managerConnection.sendAction(new SipShowPeerAction(sipPeer)); if(response.getAttribute("Status") == null) LOG.debug("{}: service status down", svc.getSvcName()); return PollStatus.decode("Down", "State of SIP Peer is unknown, because it was not found on the Asterisk server"); LOG.debug("{}: Response: {}", svc.getSvcName(), response.getAttribute("Status")); LOG.debug("{}: AMI logoff", svc.getSvcName()); managerConnection.logoff(); LOG.debug("{}: service status up", svc.getSvcName()); return PollStatus.decode("Up", "OK"); LOG.debug("{}: service status down", svc.getSvcName()); return PollStatus.decode("Down", "State of SIP Peer is " + response.getAttribute("Status") + " and not OK"); LOG.debug("{}: AMI AuthenticationError.", svc.getSvcName(), e);
private void applyThresholds(String rrdPath, MonitoredService service, String dsName, Map<String, Number> entries) { try { if (m_thresholdingSet == null) { RrdRepository repository = new RrdRepository(); repository.setRrdBaseDir(new File(rrdPath)); m_thresholdingSet = new LatencyThresholdingSet(service.getNodeId(), service.getIpAddr(), service.getSvcName(), service.getNodeLocation(), repository, m_resourceStorageDao); } LinkedHashMap<String, Double> attributes = new LinkedHashMap<String, Double>(); for (String ds : entries.keySet()) { Number sampleValue = entries.get(ds); if (sampleValue == null) { attributes.put(ds, Double.NaN); } else { attributes.put(ds, sampleValue.doubleValue()); } } if (m_thresholdingSet.isNodeInOutage()) { LOG.info("applyThresholds: the threshold processing will be skipped because the service {} is on a scheduled outage.", service); } else if (m_thresholdingSet.hasThresholds(attributes)) { List<Event> events = m_thresholdingSet.applyThresholds(dsName, attributes); if (events.size() > 0) { ThresholdingEventProxy proxy = new ThresholdingEventProxy(); proxy.add(events); proxy.sendAllEvents(); } } } catch(Throwable e) { LOG.error("Failed to threshold on {} for {} because of an exception", service, dsName, e); } }
m_bsfManager.declareBean("node_id",svc.getNodeId(),int.class ); m_bsfManager.declareBean("node_label", svc.getNodeLabel(), String.class); m_bsfManager.declareBean("svc_name", svc.getSvcName(), String.class); m_bsfManager.declareBean("bsf_monitor", this, BSFMonitor.class); m_bsfManager.declareBean("results", results, Map.class); m_bsfManager.exec(lang, "BSFMonitor", 0, 0, code); } else { LOG.warn("Invalid run-type parameter value '{}' for service '{}'. Only 'eval' and 'exec' are supported.", runType, svc.getSvcName()); throw new RuntimeException("Invalid run-type '" + runType + "'"); LOG.debug("Setting {} times for service '{}'", times.size(), svc.getSvcName()); pollStatus.setProperties(times); LOG.warn("The exec script '{}' for service '{}' never put a 'status' entry in the 'results' bean. Exec scripts should put this entry with a value of 'OK' for up.", fileName, svc.getSvcName()); LOG.warn("Cannot locate or read BSF script file '{}'. Marking service '{}' down.", fileName, svc.getSvcName()); pollStatus = PollStatus.unavailable("Cannot locate or read BSF script file: " + fileName); LOG.warn("BSFMonitor poll for service '{}' failed with BSFException: {}", svc.getSvcName(), e.getMessage(), e); pollStatus = PollStatus.unavailable(e.getMessage()); } catch (FileNotFoundException e){ LOG.warn("Could not find BSF script file '{}'. Marking service '{}' down.", fileName, svc.getSvcName()); pollStatus = PollStatus.unavailable("Could not find BSF script file: " + fileName); } catch (IOException e) { pollStatus = PollStatus.unavailable(e.getMessage()); LOG.warn("BSFMonitor poll for service '{}' failed with IOException: {}", svc.getSvcName(), e.getMessage(), e); } catch (Throwable e) {
LOG.debug("{}: Creating new AMI-Connection: {}:{}, {}/{}", svc.getSvcName(), svc.getIpAddr(), amiConfig.getPort(), amiConfig.getUsername(), amiConfig.getPassword()); ManagerConnectionFactory factory = new ManagerConnectionFactory(svc.getIpAddr(), amiConfig.getPort().orElse(null), amiConfig.getUsername().orElse(null), amiConfig.getPassword().orElse(null)); ManagerConnection managerConnection; LOG.debug("{}: Attempt {}", svc.getSvcName(), timeoutTracker.getAttempt()); try LOG.debug("{}: AMI login", svc.getSvcName()); managerConnection.login(); LOG.debug("{}: AMI sendAction SipShowPeer", svc.getSvcName()); ManagerResponse response = managerConnection.sendAction(new SipShowPeerAction(sipPeer)); if(response.getAttribute("Status") == null) LOG.debug("{}: service status down", svc.getSvcName()); return PollStatus.decode("Down", "State of SIP Peer is unknown, because it was not found on the Asterisk server"); LOG.debug("{}: Response: {}", svc.getSvcName(), response.getAttribute("Status")); LOG.debug("{}: AMI logoff", svc.getSvcName()); managerConnection.logoff(); LOG.debug("{}: service status up", svc.getSvcName()); return PollStatus.decode("Up", "OK"); LOG.debug("{}: service status down", svc.getSvcName()); return PollStatus.decode("Down", "State of SIP Peer is " + response.getAttribute("Status") + " and not OK"); LOG.debug("{}: AMI AuthenticationError.", svc.getSvcName(), e);
private void persistLatencySamples(MonitoredService service, Map<String, Number> entries, File rrdRepositoryRoot, String rrdBaseName) { RrdRepository repository = new RrdRepository(); repository.setStep(m_pollerConfig.getStep(m_pkg)); repository.setRraList(m_pollerConfig.getRRAList(m_pkg)); repository.setHeartBeat(repository.getStep() * HEARTBEAT_STEP_MULTIPLIER); repository.setRrdBaseDir(rrdRepositoryRoot); // When making calls directly to RrdUtils#createRrd() and RrdUtils#updateRrd(), // the behavior was as follows: // 1) All samples get written to response/${ipAddr}/${rrdBaseName}.rrd // This happens whether or not storeByGroup is enabled. // 2) If multiple entries are present, the DSs are created in the same order that they // appear in the map LatencyCollectionResource latencyResource = new LatencyCollectionResource(service.getSvcName(), service.getIpAddr(), service.getNodeLocation()); for (final Entry<String, Number> entry : entries.entrySet()) { final String ds = entry.getKey(); final Number value = entry.getValue() != null ? entry.getValue() : Double.NaN; LatencyCollectionAttributeType latencyType = new LatencyCollectionAttributeType(rrdBaseName, ds); latencyResource.addAttribute(new LatencyCollectionAttribute(latencyResource, latencyType, ds, value.doubleValue())); } ServiceParameters params = new ServiceParameters(Collections.emptyMap()); CollectionSetVisitor persister = m_persisterFactory.createPersister(params, repository, false, true, true); SingleResourceCollectionSet collectionSet = new SingleResourceCollectionSet(latencyResource, new Date()); collectionSet.setStatus(CollectionStatus.SUCCEEDED); collectionSet.visit(persister); }
LOG.debug("Service {} on interface {} is down, but continuing to gather latency data", svc.getSvcName(), svc.getIpAddr()); serviceStatus = PollStatus.unavailable("the failure ping count (" + failurePingCount + ") was reached"); } else {
clientWrapper.setUserAgent(getUserAgent()); } else { clientWrapper.setUserAgent("OpenNMS PageSequenceMonitor (Service name: " + svc.getSvcName() + ")"); clientWrapper.useRelaxedSSL("https"); } catch (final GeneralSecurityException e) { LOG.warn("Failed configure relaxed SSL for PageSequence {}", svc.getSvcName(), e);
.append(":").append(svc.getSvcName()).append(":").append(currentPort) .toString();
expect(svc.getNodeId()).andReturn(1); expect(svc.getIpAddr()).andReturn("127.0.0.1").atLeastOnce(); expect(svc.getSvcName()).andReturn("ICMP").atLeastOnce(); expect(svc.getNodeLocation()).andReturn(MonitoringLocationDao.DEFAULT_MONITORING_LOCATION_ID).atLeastOnce();
agentConfig.setPort(ParameterMap.getKeyedInteger(parameters, "port", agentConfig.getPort())); LOG.debug("Setting up CISCO-PING-MIB proxy poll for service {} on interface {} -- {}", svc.getSvcName(), targetIpAddr, pingEntry);
request.setSystemId(target.getSystemId()); request.setClassName(className != null ? className : serviceMonitor.getClass().getCanonicalName()); request.setServiceName(service.getSvcName()); request.setAddress(service.getAddress()); request.setNodeId(service.getNodeId());