use of org.opennms.netmgt.bsm.service.AlarmProvider in project opennms by OpenNMS.
the class DefaultBusinessServiceStateMachineIT method ensureReductionKeyLookupIsFastEnough.
/**
* Builds 200 business services.
* Each business Services has one parent and two children.
* Each children has 12 reduction key edges.
* In sum there are:
* - 600 business services
* - 4800 reduction key edges
* - 400 child edges
* - 5200 edges
*
* See NMS-8978 for more details.
*/
@Test
public void ensureReductionKeyLookupIsFastEnough() {
for (int i = 0; i < 200; i++) {
BusinessServiceEntity parentEntity = new BusinessServiceEntityBuilder().name("Parent " + i).reduceFunction(new HighestSeverityEntity()).toEntity();
for (int c = 0; c < 2; c++) {
BusinessServiceEntityBuilder childBuilder = new BusinessServiceEntityBuilder().name("Child " + i + " " + c).reduceFunction(new HighestSeverityEntity());
for (int a = 0; a < 12; a++) {
childBuilder.addReductionKey("custom." + i + "." + c + "." + a, new IdentityEntity());
}
BusinessServiceEntity childEntity = childBuilder.toEntity();
parentEntity.addChildServiceEdge(childEntity, new IdentityEntity());
businessServiceDao.save(childEntity);
}
businessServiceDao.save(parentEntity);
}
final Set<String> uniqueReductionKeys = businessServiceDao.findMatching(new CriteriaBuilder(BusinessServiceEntity.class).like("name", "Child%").toCriteria()).stream().flatMap(service -> service.getReductionKeyEdges().stream()).flatMap(edge -> edge.getReductionKeys().stream()).collect(Collectors.toSet());
for (String eachKey : uniqueReductionKeys) {
final OnmsAlarm alarm = new OnmsAlarm();
alarm.setUei("custom");
alarm.setAlarmType(1);
alarm.setDescription("dummy");
alarm.setLogMsg("dummy");
alarm.setSeverity(OnmsSeverity.WARNING);
alarm.setReductionKey(eachKey);
alarm.setDistPoller(distPollerDao.whoami());
alarm.setCounter(1);
populator.getAlarmDao().save(alarm);
}
populator.getAlarmDao().flush();
businessServiceDao.flush();
// Simulate lookup of reduction keys
final long start = System.currentTimeMillis();
final DefaultBusinessServiceStateMachine stateMachine = new DefaultBusinessServiceStateMachine();
stateMachine.setAlarmProvider(alarmProvider);
stateMachine.setBusinessServices(businessServiceDao.findAll().stream().map(e -> new BusinessServiceImpl(businessServiceManager, e)).collect(Collectors.toList()));
long diff = System.currentTimeMillis() - start;
LoggerFactory.getLogger(getClass()).info("Took {} ms to initialize state machine", diff);
Assert.assertTrue("Reduction Key lookup took much longer than expected. Expected was 1000 ms, but took " + diff + " ms", 1000 >= diff);
}
use of org.opennms.netmgt.bsm.service.AlarmProvider in project opennms by OpenNMS.
the class DefaultBusinessServiceStateMachineTest method canLookupNewAlarmsWhenReloading.
@Test
public void canLookupNewAlarmsWhenReloading() {
// Create a simple hierarchy
MockBusinessServiceHierarchy h = MockBusinessServiceHierarchy.builder().withBusinessService(1).withReductionKey(1, "a1").commit().build();
BusinessService b1 = h.getBusinessServiceById(1);
Edge a1 = h.getEdgeByReductionKey("a1");
// Setup the state machine
DefaultBusinessServiceStateMachine stateMachine = new DefaultBusinessServiceStateMachine();
LoggingStateChangeHandler stateChangeHandler = new LoggingStateChangeHandler();
stateMachine.addHandler(stateChangeHandler, Maps.newHashMap());
stateMachine.setBusinessServices(h.getBusinessServices());
stateMachine.setAlarmProvider(new AlarmProvider() {
@Override
public Map<String, AlarmWrapper> lookup(Set<String> reductionKeys) {
if (reductionKeys.contains("a2")) {
return ImmutableMap.<String, AlarmWrapper>builder().put("a2", new MockAlarmWrapper("a2", Status.CRITICAL)).build();
}
return new HashMap<>();
}
});
// Verify the initial state
assertEquals(Status.NORMAL, stateMachine.getOperationalStatus(b1));
assertEquals(Status.NORMAL, stateMachine.getOperationalStatus(a1));
assertEquals(0, stateChangeHandler.getStateChanges().size());
// Send an alarm and verify the updated state
stateMachine.handleNewOrUpdatedAlarm(new MockAlarmWrapper("a1", Status.MINOR));
assertEquals(Status.MINOR, stateMachine.getOperationalStatus(b1));
assertEquals(Status.MINOR, stateMachine.getOperationalStatus(a1));
assertEquals(1, stateChangeHandler.getStateChanges().size());
// Update the hierarchy and reload the state machine
h = MockBusinessServiceHierarchy.builder().withBusinessService(1).withReductionKey(1, "a1").withReductionKey(2, "a2").commit().build();
stateMachine.setBusinessServices(h.getBusinessServices());
Edge a2 = h.getEdgeByReductionKey("a2");
// The state should be upgraded
assertEquals(Status.CRITICAL, stateMachine.getOperationalStatus(b1));
assertEquals(Status.MINOR, stateMachine.getOperationalStatus(a1));
assertEquals(Status.CRITICAL, stateMachine.getOperationalStatus(a2));
// One additional state change event should have been generated
assertEquals(2, stateChangeHandler.getStateChanges().size());
}
Aggregations