private Map<Integer, List<OnmsOutage>> getOutages(List<Integer> nodeIds, List<String> serviceNames, Date start, Date end) {
if (nodeIds == null || nodeIds.size() == 0) {
return Maps.newHashMap();
}
final CriteriaBuilder builder = new CriteriaBuilder(OnmsOutage.class)
.le("ifLostService", end)
.or(new NullRestriction("ifRegainedService"),
new AllRestriction(
new GtRestriction("ifRegainedService", start),
new LeRestriction("ifRegainedService", end))
)
.alias("monitoredService", "monitoredService")
.alias("monitoredService.ipInterface", "ipInterface")
.alias("ipInterface.node", "node")
.eq("ipInterface.isManaged", "M")
.in("node.id", nodeIds);
if (serviceNames != null && serviceNames.size() > 0) {
builder.alias("monitoredService.serviceType", "serviceType")
.in("serviceType.name", serviceNames);
}
return m_outageDao.findMatching(builder.toCriteria()).stream()
.collect(Collectors.groupingBy(OnmsOutage::getNodeId));
}