use of org.opennms.netmgt.poller.PollerResponse in project opennms by OpenNMS.
the class PollerRequestBuilderImpl method execute.
@Override
public CompletableFuture<PollerResponse> execute() {
if (serviceMonitor == null) {
throw new IllegalArgumentException("Monitor or monitor class name is required.");
} else if (service == null) {
throw new IllegalArgumentException("Monitored service is required.");
}
final RpcTarget target = client.getRpcTargetHelper().target().withNodeId(service.getNodeId()).withLocation(service.getNodeLocation()).withSystemId(systemId).withServiceAttributes(attributes).withLocationOverride((s) -> serviceMonitor.getEffectiveLocation(s)).build();
final PollerRequestDTO request = new PollerRequestDTO();
request.setLocation(target.getLocation());
request.setSystemId(target.getSystemId());
request.setClassName(serviceMonitor.getClass().getCanonicalName());
request.setServiceName(service.getSvcName());
request.setAddress(service.getAddress());
request.setNodeId(service.getNodeId());
request.setNodeLabel(service.getNodeLabel());
request.setNodeLocation(service.getNodeLocation());
request.setTimeToLiveMs(ttlInMs);
request.addAttributes(attributes);
// Retrieve the runtime attributes, which may include attributes
// such as the agent details and other state related attributes
// which should be included in the request
final Map<String, Object> parameters = request.getMonitorParameters();
request.addAttributes(serviceMonitor.getRuntimeAttributes(request, parameters));
// Execute the request
return client.getDelegate().execute(request).thenApply(results -> {
PollStatus pollStatus = results.getPollStatus();
// Invoke the adapters in the same order as which they were added
for (ServiceMonitorAdaptor adaptor : adaptors) {
// The adapters may update the status
pollStatus = adaptor.handlePollResult(service, attributes, pollStatus);
}
results.setPollStatus(pollStatus);
return results;
});
}
use of org.opennms.netmgt.poller.PollerResponse in project opennms by OpenNMS.
the class Poll method doExecute.
@Override
protected Object doExecute() throws Exception {
final CompletableFuture<PollerResponse> future = locationAwarePollerClient.poll().withService(new SimpleMonitoredService(InetAddress.getByName(host), "SVC", location)).withMonitorClassName(className).withTimeToLive(ttlInMs).withAttributes(parse(attributes)).execute();
while (true) {
try {
try {
PollStatus pollStatus = future.get(1, TimeUnit.SECONDS).getPollStatus();
if (pollStatus.getStatusCode() == PollStatus.SERVICE_AVAILABLE) {
System.out.printf("\nService is %s on %s using %s:\n", pollStatus.getStatusName(), host, className);
final Map<String, Number> properties = pollStatus.getProperties();
if (properties.size() > 0) {
properties.entrySet().stream().forEach(e -> {
System.out.printf("\t%s: %.4f\n", e.getKey(), e.getValue());
});
} else {
System.out.printf("(No properties were returned by the monitor.\n");
}
} else {
System.out.printf("\nService is %s on %s using %s\n", pollStatus.getStatusName(), host, className);
System.out.printf("\tReason: %s\n", pollStatus.getReason());
}
} catch (InterruptedException e) {
System.out.println("\nInterrupted.");
} catch (ExecutionException e) {
System.out.printf("\nPoll failed with: %s\n", e);
}
break;
} catch (TimeoutException e) {
// pass
}
System.out.print(".");
System.out.flush();
}
return null;
}
use of org.opennms.netmgt.poller.PollerResponse in project opennms by OpenNMS.
the class PollableServiceConfigTest method returnsUnknownOnRequestTimedOutException.
/**
* Verifies that <b>PollStatus.unknown()</b> is returned when the
* {@link LocationAwarePollerClient} fails with a {@link RequestTimedOutException}.
*
* This can happen when no Minions at the given location are available to process
* the request, or the request was not completed in time, in which case we cannot
* ascertain that the service is UP or DOWN.
*/
@Test
public void returnsUnknownOnRequestTimedOutException() throws Exception {
// Create a future that fails with a RequestTimedOutException
CompletableFuture<PollerResponse> future = new CompletableFuture<>();
future.completeExceptionally(new RequestTimedOutException(new Exception("Test")));
// Now mock the client to always return the future we created above
LocationAwarePollerClient client = mock(LocationAwarePollerClient.class, Mockito.RETURNS_DEEP_STUBS);
Mockito.when(client.poll().withService(any()).withMonitor(any()).withTimeToLive(any()).withAttributes(any()).withAdaptor(any()).withAdaptor(any()).execute()).thenReturn(future);
// Mock all of the required objects required to successfully initialize the PollableServiceConfig
PollableService pollableSvc = mock(PollableService.class);
when(pollableSvc.getSvcName()).thenReturn("SVC");
Service configuredSvc = new Service();
configuredSvc.setName("SVC");
Package pkg = mock(Package.class);
when(pkg.getServices()).thenReturn(Lists.newArrayList(configuredSvc));
PollerConfig pollerConfig = mock(PollerConfig.class);
PollOutagesConfig pollOutagesConfig = mock(PollOutagesConfig.class);
Timer timer = mock(Timer.class);
PersisterFactory persisterFactory = mock(PersisterFactory.class);
ResourceStorageDao resourceStorageDao = mock(ResourceStorageDao.class);
final PollableServiceConfig psc = new PollableServiceConfig(pollableSvc, pollerConfig, pollOutagesConfig, pkg, timer, persisterFactory, resourceStorageDao, client);
// Trigger the poll
PollStatus pollStatus = psc.poll();
// Verify
assertThat(pollStatus.isUnknown(), is(true));
}
use of org.opennms.netmgt.poller.PollerResponse in project opennms by OpenNMS.
the class Poll method execute.
@Override
public Object execute() throws Exception {
final CompletableFuture<PollerResponse> future = locationAwarePollerClient.poll().withService(new SimpleMonitoredService(InetAddress.getByName(host), "SVC", location)).withSystemId(systemId).withMonitorClassName(className).withTimeToLive(ttlInMs).withAttributes(parse(attributes)).execute();
while (true) {
try {
try {
PollStatus pollStatus = future.get(1, TimeUnit.SECONDS).getPollStatus();
if (pollStatus.getStatusCode() == PollStatus.SERVICE_AVAILABLE) {
System.out.printf("\nService is %s on %s using %s:\n", pollStatus.getStatusName(), host, className);
final Map<String, Number> properties = pollStatus.getProperties();
if (properties.size() > 0) {
properties.entrySet().stream().forEach(e -> {
System.out.printf("\t%s: %.4f\n", e.getKey(), e.getValue() != null ? e.getValue().doubleValue() : null);
});
} else {
System.out.printf("(No properties were returned by the monitor.\n");
}
} else {
System.out.printf("\nService is %s on %s using %s\n", pollStatus.getStatusName(), host, className);
System.out.printf("\tReason: %s\n", pollStatus.getReason());
}
} catch (InterruptedException e) {
System.out.println("\nInterrupted.");
} catch (ExecutionException e) {
System.out.printf("\nPoll failed with: %s\n", e);
}
break;
} catch (TimeoutException e) {
// pass
}
System.out.print(".");
System.out.flush();
}
return null;
}
use of org.opennms.netmgt.poller.PollerResponse in project opennms by OpenNMS.
the class PollableServiceConfigIT method returnsUnknownOnRequestTimedOutException.
/**
* Verifies that <b>PollStatus.unknown()</b> is returned when the
* {@link LocationAwarePollerClient} fails with a {@link RequestTimedOutException}.
*
* This can happen when no Minions at the given location are available to process
* the request, or the request was not completed in time, in which case we cannot
* ascertain that the service is UP or DOWN.
*/
@Test
public void returnsUnknownOnRequestTimedOutException() throws Exception {
// Create a future that fails with a RequestTimedOutException
CompletableFuture<PollerResponse> future = new CompletableFuture<>();
future.completeExceptionally(new RequestTimedOutException(new Exception("Test")));
// Now mock the client to always return the future we created above
LocationAwarePollerClient client = mock(LocationAwarePollerClient.class, Mockito.RETURNS_DEEP_STUBS);
Mockito.when(client.poll().withService(any()).withMonitor(any()).withTimeToLive(any()).withAttributes(any()).withAdaptor(any()).withAdaptor(any()).execute()).thenReturn(future);
// Mock all of the required objects required to successfully initialize the PollableServiceConfig
PollableService pollableSvc = mock(PollableService.class);
when(pollableSvc.getSvcName()).thenReturn("SVC");
Service configuredSvc = new Service();
configuredSvc.setName("SVC");
Package pkg = mock(Package.class);
when(pkg.getServices()).thenReturn(Lists.newArrayList(configuredSvc));
PollerConfig pollerConfig = mock(PollerConfig.class);
PollOutagesConfig pollOutagesConfig = mock(PollOutagesConfig.class);
Timer timer = mock(Timer.class);
PersisterFactory persisterFactory = mock(PersisterFactory.class);
ResourceStorageDao resourceStorageDao = mock(ResourceStorageDao.class);
final PollableServiceConfig psc = new PollableServiceConfig(pollableSvc, pollerConfig, pollOutagesConfig, pkg, timer, persisterFactory, resourceStorageDao, client);
// Trigger the poll
PollStatus pollStatus = psc.poll();
// Verify
assertThat(pollStatus.isUnknown(), is(true));
}
Aggregations