Search in sources :

Example 1 with Node

use of org.opennms.netmgt.xml.rtc.Node in project opennms by OpenNMS.

the class Category method getServiceCounts.

/**
     * Convenience method to count the number of services under a category and
     * the number of those services that are currently down.
     *
     * @param category a {@link org.opennms.netmgt.xml.rtc.Category} object.
     * @return an array of long.
     */
protected static long[] getServiceCounts(final org.opennms.netmgt.xml.rtc.Category category) {
    if (category == null) {
        throw new IllegalArgumentException("Cannot take null parameters.");
    }
    long count = 0;
    long downCount = 0;
    for (Node node : category.getNode()) {
        count += node.getNodesvccount();
        downCount += node.getNodesvcdowncount();
    }
    return new long[] { count, downCount };
}
Also used : Node(org.opennms.netmgt.xml.rtc.Node)

Example 2 with Node

use of org.opennms.netmgt.xml.rtc.Node in project opennms by OpenNMS.

the class LegacyEuiLevelMapper method convertToEuiLevelXML.

/**
     * Convert the 'RTCCategory' object to a 'EuiLevel' object.
     *
     * @param rtcCat
     *            the RTCCategory to be converted
     * @return a {@link org.opennms.netmgt.xml.rtc.EuiLevel} object.
     */
public EuiLevel convertToEuiLevelXML(RTCCategory rtcCat) {
    // current time
    Date curDate = new Date();
    long curTime = curDate.getTime();
    // get the rolling window
    long rWindow = 24L * 60L * 60L * 1000L;
    LOG.debug("curdate: {}", curDate);
    // create the data
    EuiLevel level = new EuiLevel();
    // set created in m_header and add to level
    m_header.setCreated(EventConstants.formatToString(curDate));
    level.setHeader(m_header);
    org.opennms.netmgt.xml.rtc.Category levelCat = new org.opennms.netmgt.xml.rtc.Category();
    // get a handle to data
    synchronized (m_dataMgr) {
        // category label
        levelCat.setCatlabel(rtcCat.getLabel());
        // availability value for this category
        levelCat.setCatvalue(m_dataMgr.getValue(rtcCat, curTime, rWindow));
        // nodes in this category
        for (int nodeID : m_dataMgr.getNodes(rtcCat)) {
            Node levelNode = new Node();
            levelNode.setNodeid(nodeID);
            // value for this node for this category
            levelNode.setNodevalue(m_dataMgr.getValue(nodeID, rtcCat, curTime, rWindow));
            // node service count
            levelNode.setNodesvccount(m_dataMgr.getServiceCount(nodeID, rtcCat));
            // node service down count
            levelNode.setNodesvcdowncount(m_dataMgr.getServiceDownCount(nodeID, rtcCat));
            // add the node
            levelCat.getNode().add(levelNode);
        }
    }
    // add category
    level.getCategory().add(levelCat);
    return level;
}
Also used : RTCCategory(org.opennms.netmgt.rtc.datablock.RTCCategory) Node(org.opennms.netmgt.xml.rtc.Node) Date(java.util.Date) EuiLevel(org.opennms.netmgt.xml.rtc.EuiLevel)

Example 3 with Node

use of org.opennms.netmgt.xml.rtc.Node in project opennms by OpenNMS.

the class AvailabilityServiceIT method categoryIsFullyAvailableWhenNoServicesArePresent.

@Test
public void categoryIsFullyAvailableWhenNoServicesArePresent() throws Exception {
    final RTCCategory rtcCat = EasyMock.createNiceMock(RTCCategory.class);
    EasyMock.expect(rtcCat.getLabel()).andReturn("Routers");
    // This nodeid should not exist in the database
    EasyMock.expect(rtcCat.getNodes()).andReturn(Lists.newArrayList(99999));
    EasyMock.replay(rtcCat);
    final EuiLevel euiLevel = m_availabilityService.getEuiLevel(rtcCat);
    assertEquals(1, euiLevel.getCategory().size());
    final Category category = euiLevel.getCategory().get(0);
    assertEquals(100.0, category.getCatvalue(), 0.001);
    assertEquals(1, category.getNode().size());
    final Node node = category.getNode().get(0);
    assertEquals(100.0, node.getNodevalue(), 0.001);
    assertEquals(0, node.getNodesvccount());
    assertEquals(0, node.getNodesvcdowncount());
}
Also used : RTCCategory(org.opennms.netmgt.rtc.datablock.RTCCategory) Category(org.opennms.netmgt.xml.rtc.Category) Node(org.opennms.netmgt.xml.rtc.Node) EuiLevel(org.opennms.netmgt.xml.rtc.EuiLevel) RTCCategory(org.opennms.netmgt.rtc.datablock.RTCCategory) Test(org.junit.Test)

Example 4 with Node

use of org.opennms.netmgt.xml.rtc.Node in project opennms by OpenNMS.

the class AvailabilityServiceHibernateImpl method getEuiLevel.

/**
     * Optimized method for calculating the category statistics.
     *
     * We start off by retrieving outages affecting the nodes and services
     * in the given category, and group these by node id.
     *
     * Using the outages, we calculate node-level statistics
     * and tally the values to calculate the category statistics.
     */
@Override
@Transactional(readOnly = true)
public synchronized EuiLevel getEuiLevel(RTCCategory category) {
    final Header header = new Header();
    header.setVer("1.9a");
    header.setMstation("");
    // current time
    final Date curDate = new Date();
    final long curTime = curDate.getTime();
    // get the rolling window
    final long rWindow = 24L * 60L * 60L * 1000L;
    LOG.debug("Retrieving availability statistics for {} with current date: {} and rolling window: {}", category.getLabel(), curDate, rWindow);
    // create the data
    final EuiLevel level = new EuiLevel();
    // set created in m_header and add to level
    header.setCreated(EventConstants.formatToString(curDate));
    level.setHeader(header);
    final Category levelCat = new Category();
    // category label
    levelCat.setCatlabel(category.getLabel());
    double outageTimeInCategory = 0.0;
    int numServicesInCategory = 0;
    // window bounds
    final Date windowStart = new Date(curTime - rWindow);
    final Date windowEnd = new Date(curTime);
    // category specifics
    final List<Integer> nodeIds = getNodes(category);
    final List<String> serviceNames = category.getServices();
    // retrieve the outages associated with the given nodes, only retrieving those that affect our window
    final Map<Integer, List<OnmsOutage>> outagesByNode = getOutages(nodeIds, serviceNames, windowStart, windowEnd);
    // calculate the node level statistics
    for (final int nodeId : nodeIds) {
        List<OnmsOutage> outages = outagesByNode.get(nodeId);
        if (outages == null) {
            outages = Lists.newArrayList();
        }
        // sum the outage time
        final double outageTime = getOutageTimeInWindow(outages, windowStart, windowEnd);
        // determine the number of services
        final int numServices = getNumServices(nodeId, serviceNames);
        // count the number of outstanding outages
        final long numServicesDown = outages.stream().filter(outage -> outage.getIfRegainedService() == null).count();
        final Node levelNode = new Node();
        levelNode.setNodeid(nodeId);
        // value for this node for this category
        levelNode.setNodevalue(RTCUtils.getOutagePercentage(outageTime, rWindow, numServices));
        // node service count
        levelNode.setNodesvccount(numServices);
        // node service down count
        levelNode.setNodesvcdowncount(numServicesDown);
        // add the node
        levelCat.getNode().add(levelNode);
        // update the category statistics
        numServicesInCategory += numServices;
        outageTimeInCategory += outageTime;
    }
    // calculate the outage percentage using tallied values
    levelCat.setCatvalue(RTCUtils.getOutagePercentage(outageTimeInCategory, rWindow, numServicesInCategory));
    // add category
    level.getCategory().add(levelCat);
    LOG.debug("Done retrieving availability statistics for {} with {} services.", category.getLabel(), numServicesInCategory);
    return level;
}
Also used : NullRestriction(org.opennms.core.criteria.restrictions.NullRestriction) AllRestriction(org.opennms.core.criteria.restrictions.AllRestriction) OnmsMonitoredService(org.opennms.netmgt.model.OnmsMonitoredService) Date(java.util.Date) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) EventConstants(org.opennms.netmgt.events.api.EventConstants) MonitoredServiceDao(org.opennms.netmgt.dao.api.MonitoredServiceDao) RTCCategory(org.opennms.netmgt.rtc.datablock.RTCCategory) Lists(com.google.common.collect.Lists) Map(java.util.Map) EuiLevel(org.opennms.netmgt.xml.rtc.EuiLevel) Node(org.opennms.netmgt.xml.rtc.Node) Header(org.opennms.netmgt.xml.rtc.Header) GtRestriction(org.opennms.core.criteria.restrictions.GtRestriction) Logger(org.slf4j.Logger) OutageDao(org.opennms.netmgt.dao.api.OutageDao) FilterDao(org.opennms.netmgt.filter.api.FilterDao) Category(org.opennms.netmgt.xml.rtc.Category) Collectors(java.util.stream.Collectors) Maps(com.google.common.collect.Maps) LeRestriction(org.opennms.core.criteria.restrictions.LeRestriction) List(java.util.List) OnmsOutage(org.opennms.netmgt.model.OnmsOutage) Preconditions(com.google.common.base.Preconditions) CriteriaBuilder(org.opennms.core.criteria.CriteriaBuilder) Transactional(org.springframework.transaction.annotation.Transactional) OnmsOutage(org.opennms.netmgt.model.OnmsOutage) RTCCategory(org.opennms.netmgt.rtc.datablock.RTCCategory) Category(org.opennms.netmgt.xml.rtc.Category) Node(org.opennms.netmgt.xml.rtc.Node) Date(java.util.Date) Header(org.opennms.netmgt.xml.rtc.Header) List(java.util.List) EuiLevel(org.opennms.netmgt.xml.rtc.EuiLevel) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

Node (org.opennms.netmgt.xml.rtc.Node)4 RTCCategory (org.opennms.netmgt.rtc.datablock.RTCCategory)3 EuiLevel (org.opennms.netmgt.xml.rtc.EuiLevel)3 Date (java.util.Date)2 Category (org.opennms.netmgt.xml.rtc.Category)2 Preconditions (com.google.common.base.Preconditions)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1 List (java.util.List)1 Map (java.util.Map)1 Collectors (java.util.stream.Collectors)1 Test (org.junit.Test)1 CriteriaBuilder (org.opennms.core.criteria.CriteriaBuilder)1 AllRestriction (org.opennms.core.criteria.restrictions.AllRestriction)1 GtRestriction (org.opennms.core.criteria.restrictions.GtRestriction)1 LeRestriction (org.opennms.core.criteria.restrictions.LeRestriction)1 NullRestriction (org.opennms.core.criteria.restrictions.NullRestriction)1 MonitoredServiceDao (org.opennms.netmgt.dao.api.MonitoredServiceDao)1 OutageDao (org.opennms.netmgt.dao.api.OutageDao)1 EventConstants (org.opennms.netmgt.events.api.EventConstants)1