Search in sources :

Example 11 with Status

use of org.opennms.netmgt.bsm.service.model.Status in project opennms by OpenNMS.

the class BusinessServiceStatusService method buildFrom.

private BusinessServiceSearchCriteriaBuilder buildFrom(Query query) {
    final BusinessServiceSearchCriteriaBuilder criteriaBuilder = new BusinessServiceSearchCriteriaBuilder();
    if (query.getSeverityFilter() != null && !query.getSeverityFilter().getSeverities().isEmpty()) {
        final List<Status> statusList = query.getSeverityFilter().getSeverities().stream().map(eachSeverity -> Status.of(eachSeverity.name())).collect(Collectors.toList());
        criteriaBuilder.inSeverity(statusList);
    } else {
        criteriaBuilder.greaterOrEqualSeverity(Status.NORMAL);
    }
    if (query.getParameters().getOrder() != null) {
        final QueryParameters.Order order = query.getParameters().getOrder();
        criteriaBuilder.order(order.getColumn(), !order.isDesc());
    }
    if (query.getParameters().getLimit() != null) {
        criteriaBuilder.limit(query.getParameters().getLimit());
    }
    if (query.getParameters().getOffset() != null) {
        criteriaBuilder.offset(query.getParameters().getOffset());
    }
    return criteriaBuilder;
}
Also used : Status(org.opennms.netmgt.bsm.service.model.Status) QueryParameters(org.opennms.web.utils.QueryParameters) BusinessServiceManager(org.opennms.netmgt.bsm.service.BusinessServiceManager) Autowired(org.springframework.beans.factory.annotation.Autowired) Query(org.opennms.features.status.api.Query) StatusEntityWrapper(org.opennms.features.status.api.StatusEntityWrapper) BusinessService(org.opennms.netmgt.bsm.service.model.BusinessService) Collectors(java.util.stream.Collectors) StatusEntity(org.opennms.features.status.api.StatusEntity) BusinessServiceSearchCriteriaBuilder(org.opennms.netmgt.bsm.service.BusinessServiceSearchCriteriaBuilder) List(java.util.List) StatusSummary(org.opennms.features.status.api.StatusSummary) Status(org.opennms.netmgt.bsm.service.model.Status) Service(org.springframework.stereotype.Service) OnmsSeverity(org.opennms.netmgt.model.OnmsSeverity) BusinessServiceSearchCriteriaBuilder(org.opennms.netmgt.bsm.service.BusinessServiceSearchCriteriaBuilder) QueryParameters(org.opennms.web.utils.QueryParameters)

Example 12 with Status

use of org.opennms.netmgt.bsm.service.model.Status in project opennms by OpenNMS.

the class DefaultBusinessServiceStateMachine method weighStatuses.

/**
 * Apply the edges weights to the associated statuses set in the map,
 * ignoring the actual status stored in the edge. Can be used for simulations
 * without needing to change the actual edge's status.
 *
 * @param edgesWithStatus
 * @return
 */
public static List<StatusWithIndex> weighStatuses(Map<GraphEdge, Status> edgesWithStatus) {
    // Find the greatest common divisor of all the weights
    int gcd = edgesWithStatus.keySet().stream().map(GraphEdge::getWeight).reduce((a, b) -> BigInteger.valueOf(a).gcd(BigInteger.valueOf(b)).intValue()).orElse(1);
    // Multiply the statuses based on their relative weight
    List<StatusWithIndex> statuses = Lists.newArrayList();
    int k = 0;
    for (Entry<GraphEdge, Status> entry : edgesWithStatus.entrySet()) {
        int relativeWeight = Math.floorDiv(entry.getKey().getWeight(), gcd);
        for (int i = 0; i < relativeWeight; i++) {
            statuses.add(new StatusWithIndex(entry.getValue(), k));
        }
        k++;
    }
    return statuses;
}
Also used : IpService(org.opennms.netmgt.bsm.service.model.IpService) Point2D(java.awt.geom.Point2D) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) AlarmWrapper(org.opennms.netmgt.bsm.service.model.AlarmWrapper) BusinessService(org.opennms.netmgt.bsm.service.model.BusinessService) Transformer(org.apache.commons.collections15.Transformer) StatusWithIndices(org.opennms.netmgt.bsm.service.model.StatusWithIndices) Map(java.util.Map) ImageIO(javax.imageio.ImageIO) BigInteger(java.math.BigInteger) ReadWriteLock(java.util.concurrent.locks.ReadWriteLock) ThresholdResultExplanation(org.opennms.netmgt.bsm.service.model.functions.reduce.ThresholdResultExplanation) BufferedImage(java.awt.image.BufferedImage) Collection(java.util.Collection) Set(java.util.Set) Collectors(java.util.stream.Collectors) BusinessServiceStateMachine(org.opennms.netmgt.bsm.service.BusinessServiceStateMachine) Sets(com.google.common.collect.Sets) Objects(java.util.Objects) BusinessServiceGraph(org.opennms.netmgt.bsm.service.model.graph.BusinessServiceGraph) Dimension(java.awt.Dimension) List(java.util.List) Edge(org.opennms.netmgt.bsm.service.model.edge.Edge) BusinessServiceStateChangeHandler(org.opennms.netmgt.bsm.service.BusinessServiceStateChangeHandler) Entry(java.util.Map.Entry) Optional(java.util.Optional) GraphEdge(org.opennms.netmgt.bsm.service.model.graph.GraphEdge) VisualizationImageServer(edu.uci.ics.jung.visualization.VisualizationImageServer) Threshold(org.opennms.netmgt.bsm.service.model.functions.reduce.Threshold) HashMap(java.util.HashMap) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) Function(java.util.function.Function) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) Lists(com.google.common.collect.Lists) KKLayout(edu.uci.ics.jung.algorithms.layout.KKLayout) Status(org.opennms.netmgt.bsm.service.model.Status) AlarmProvider(org.opennms.netmgt.bsm.service.AlarmProvider) Layout(edu.uci.ics.jung.algorithms.layout.Layout) Logger(org.slf4j.Logger) Throwables(com.google.common.base.Throwables) IOException(java.io.IOException) BusinessServiceGraphImpl(org.opennms.netmgt.bsm.service.model.graph.internal.BusinessServiceGraphImpl) File(java.io.File) StatusWithIndex(org.opennms.netmgt.bsm.service.model.StatusWithIndex) GraphVertex(org.opennms.netmgt.bsm.service.model.graph.GraphVertex) GraphAlgorithms(org.opennms.netmgt.bsm.service.model.graph.internal.GraphAlgorithms) Collections(java.util.Collections) StatusWithIndex(org.opennms.netmgt.bsm.service.model.StatusWithIndex) Status(org.opennms.netmgt.bsm.service.model.Status) GraphEdge(org.opennms.netmgt.bsm.service.model.graph.GraphEdge)

Example 13 with Status

use of org.opennms.netmgt.bsm.service.model.Status in project opennms by OpenNMS.

the class DefaultBusinessServiceStateMachine method explain.

@Override
public ThresholdResultExplanation explain(BusinessService businessService, Threshold threshold) {
    final GraphVertex vertex = getGraph().getVertexByBusinessServiceId(businessService.getId());
    // Calculate the weighed statuses from the child edges
    List<StatusWithIndex> statusesWithIndices = weighEdges(getGraph().getOutEdges(vertex));
    List<Status> statuses = statusesWithIndices.stream().map(StatusWithIndex::getStatus).collect(Collectors.toList());
    // Reduce
    Status reducedStatus = threshold.reduce(statusesWithIndices).orElse(new StatusWithIndices(MIN_SEVERITY, Collections.emptyList())).getStatus();
    ThresholdResultExplanation explanation = new ThresholdResultExplanation();
    explanation.setStatus(reducedStatus);
    explanation.setHitsByStatus(threshold.getHitsByStatus(statuses));
    explanation.setGraphEdges(getGraph().getOutEdges(vertex));
    explanation.setWeightStatuses(statuses);
    explanation.setFunction(threshold);
    Map<GraphEdge, GraphVertex> graphEdgeToGraphVertex = new HashMap<>();
    for (Edge eachEdge : businessService.getEdges()) {
        GraphVertex vertexForEdge = getGraph().getVertexByEdgeId(eachEdge.getId());
        GraphEdge graphEdge = getGraph().getGraphEdgeByEdgeId(eachEdge.getId());
        if (vertexForEdge != null && graphEdge != null) {
            graphEdgeToGraphVertex.put(graphEdge, vertexForEdge);
        }
    }
    explanation.setGraphEdgeToGraphVertexMapping(graphEdgeToGraphVertex);
    return explanation;
}
Also used : StatusWithIndex(org.opennms.netmgt.bsm.service.model.StatusWithIndex) Status(org.opennms.netmgt.bsm.service.model.Status) GraphVertex(org.opennms.netmgt.bsm.service.model.graph.GraphVertex) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ThresholdResultExplanation(org.opennms.netmgt.bsm.service.model.functions.reduce.ThresholdResultExplanation) GraphEdge(org.opennms.netmgt.bsm.service.model.graph.GraphEdge) Edge(org.opennms.netmgt.bsm.service.model.edge.Edge) GraphEdge(org.opennms.netmgt.bsm.service.model.graph.GraphEdge) StatusWithIndices(org.opennms.netmgt.bsm.service.model.StatusWithIndices)

Example 14 with Status

use of org.opennms.netmgt.bsm.service.model.Status in project opennms by OpenNMS.

the class Bsmd method handleAlarmDeleted.

private void handleAlarmDeleted(Event e, int alarmId) {
    final Parm alarmReductionKeyParm = e.getParm(EventConstants.PARM_ALARM_REDUCTION_KEY);
    if (alarmReductionKeyParm == null || alarmReductionKeyParm.getValue() == null) {
        LOG.warn("The alarmReductionKey parameter has no value on event with uei: {}. Ignoring.", e.getUei());
        return;
    }
    final String reductionKey = alarmReductionKeyParm.getValue().toString();
    LOG.debug("Handling delete for alarm with id: {} and reduction key: {}", alarmId, reductionKey);
    m_stateMachine.handleNewOrUpdatedAlarm(new AlarmWrapper() {

        @Override
        public String getReductionKey() {
            return reductionKey;
        }

        @Override
        public Status getStatus() {
            return Status.INDETERMINATE;
        }
    });
}
Also used : Status(org.opennms.netmgt.bsm.service.model.Status) TransactionStatus(org.springframework.transaction.TransactionStatus) AlarmWrapper(org.opennms.netmgt.bsm.service.model.AlarmWrapper) Parm(org.opennms.netmgt.xml.event.Parm)

Example 15 with Status

use of org.opennms.netmgt.bsm.service.model.Status in project opennms by OpenNMS.

the class DefaultBusinessServiceStateMachine method updateAndPropagateVertex.

private void updateAndPropagateVertex(BusinessServiceGraph graph, GraphVertex vertex, Status newStatus) {
    if (vertex == null) {
        // Nothing to do here
        return;
    }
    // Apply lower bound
    newStatus = newStatus.isLessThan(MIN_SEVERITY) ? MIN_SEVERITY : newStatus;
    // Update the status if necessary
    Status previousStatus = vertex.getStatus();
    if (previousStatus.equals(newStatus)) {
        // The status hasn't changed, there's nothing to propagate
        return;
    }
    vertex.setStatus(newStatus);
    // Notify the listeners
    onStatusUpdated(graph, vertex, previousStatus);
    // Update the edges with the mapped status
    List<GraphEdge> updatedEges = Lists.newArrayList();
    for (GraphEdge edge : graph.getInEdges(vertex)) {
        Status mappedStatus = newStatus;
        if (newStatus.isGreaterThan(MIN_SEVERITY)) {
            // Only apply the map function when the status is > the minimum
            mappedStatus = edge.getMapFunction().map(newStatus).orElse(MIN_SEVERITY);
        } else {
            mappedStatus = newStatus;
        }
        if (mappedStatus.equals(edge.getStatus())) {
            // The status hasn't changed
            continue;
        }
        // Update the status and add it to the list of edges to propagate
        edge.setStatus(mappedStatus);
        updatedEges.add(edge);
    }
    // Propagate once all of the edges have been updated
    for (GraphEdge edge : updatedEges) {
        reduceUpdateAndPropagateVertex(graph, graph.getOpposite(vertex, edge));
    }
}
Also used : Status(org.opennms.netmgt.bsm.service.model.Status) GraphEdge(org.opennms.netmgt.bsm.service.model.graph.GraphEdge)

Aggregations

Status (org.opennms.netmgt.bsm.service.model.Status)17 BusinessServiceStateMachine (org.opennms.netmgt.bsm.service.BusinessServiceStateMachine)5 Collectors (java.util.stream.Collectors)4 AlarmWrapper (org.opennms.netmgt.bsm.service.model.AlarmWrapper)4 BusinessService (org.opennms.netmgt.bsm.service.model.BusinessService)4 StatusWithIndex (org.opennms.netmgt.bsm.service.model.StatusWithIndex)4 StatusWithIndices (org.opennms.netmgt.bsm.service.model.StatusWithIndices)4 GraphVertex (org.opennms.netmgt.bsm.service.model.graph.GraphVertex)4 FormLayout (com.vaadin.ui.FormLayout)3 List (java.util.List)3 Edge (org.opennms.netmgt.bsm.service.model.edge.Edge)3 BusinessServiceGraph (org.opennms.netmgt.bsm.service.model.graph.BusinessServiceGraph)3 GraphEdge (org.opennms.netmgt.bsm.service.model.graph.GraphEdge)3 Label (com.vaadin.ui.Label)2 HashMap (java.util.HashMap)2 LinkedHashMap (java.util.LinkedHashMap)2 Map (java.util.Map)2 Entry (java.util.Map.Entry)2 Objects (java.util.Objects)2 Optional (java.util.Optional)2