From 7a8b065e1bdf57cb4bd3a98b6e91f12c14a8afcb Mon Sep 17 00:00:00 2001 From: Jeff Gehlbach Date: Mon, 17 Mar 2014 08:49:32 -0400 Subject: [PATCH] NMS-6466: Expose poller thread pool stats via JMX Squashed commit of the following: commit 9c129df122702261d8d733b729e1ce66d22fa52c Author: Jeff Gehlbach Date: Sun Mar 16 14:50:19 2014 -0500 Start collecting and graphing the new Pollerd JMX stats commit 48df9b80070b9c65131c20f4cd615b71fcae451f Author: Jeff Gehlbach Date: Sun Mar 16 12:43:30 2014 -0500 Add the following attributes to the OpenNMS.Pollerd MBean: - ActiveThreads - TasksTotal - TasksCompleted - TaskCompletionRatio --- .../etc/jmx-datacollection-config.xml | 5 ++ .../main/filtered/etc/snmp-graph.properties | 28 ++++++++- .../opennms/netmgt/poller/jmx/Pollerd.java | 58 ++++++++++++++++++- .../netmgt/poller/jmx/PollerdMBean.java | 23 +++++++- 4 files changed, 109 insertions(+), 5 deletions(-) diff --git a/opennms-base-assembly/src/main/filtered/etc/jmx-datacollection-config.xml b/opennms-base-assembly/src/main/filtered/etc/jmx-datacollection-config.xml index d1c8a7cd2f9d..47f61aa3e617 100644 --- a/opennms-base-assembly/src/main/filtered/etc/jmx-datacollection-config.xml +++ b/opennms-base-assembly/src/main/filtered/etc/jmx-datacollection-config.xml @@ -89,6 +89,11 @@ + + + + + diff --git a/opennms-base-assembly/src/main/filtered/etc/snmp-graph.properties b/opennms-base-assembly/src/main/filtered/etc/snmp-graph.properties index 889d297e8f12..feea80fbd10a 100644 --- a/opennms-base-assembly/src/main/filtered/etc/snmp-graph.properties +++ b/opennms-base-assembly/src/main/filtered/etc/snmp-graph.properties @@ -64,7 +64,8 @@ include.directory=snmp-graph.properties.d # NOTE: Only OpenNMS internal graph definitions. Please create for # customized graphs in snmp-graph.properties.d dedicated property # files -reports=onms.queued.updates, onms.queued.pending +reports=onms.queued.updates, onms.queued.pending, \ +onms.pollerd.activeThreads, onms.pollerd.completedRatio # values available to prefab reports: # {rrd1}, {rrd2}, {rrd3}, ... must match the datasources exactly @@ -101,4 +102,29 @@ report.onms.queued.pending.command=--title="OpenNMS Queued Operations Pending" \ GPRINT:pending:MIN:"Min \\: %8.2lf %s" \ GPRINT:pending:MAX:"Max \\: %8.2lf %s\\n" +report.onms.pollerd.activeThreads.name=OpenNMS Poller Threads Active +report.onms.pollerd.activeThreads.columns=ONMSPollerThreadAct +report.onms.pollerd.activeThreads.type=interfaceSnmp +report.onms.pollerd.activeThreads.command=--title="OpenNMS Pollerd Threads Active" \ + --vertical-label="Threads" \ + DEF:active={rrd1}:ONMSPollerThreadAct:AVERAGE \ + LINE1:active#0000ff:"Total Active" \ + GPRINT:active:AVERAGE:" Avg \\: %8.2lf %s" \ + GPRINT:active:MIN:"Min \\: %8.2lf %s" \ + GPRINT:active:MAX:"Max \\: %8.2lf %s\\n" + +report.onms.pollerd.completedRatio.name=OpenNMS Poller Task Completion Ratio +report.onms.pollerd.completedRatio.columns=ONMSPollerTasksTot,ONMSPollerTasksCpt +report.onms.pollerd.completedRatio.type=interfaceSnmp +report.onms.pollerd.completedRatio.command=--title="OpenNMS Pollerd Task Completion" \ + --vertical-label="Percent" \ + --lower-limit=0 --upper-limit=100 --units-exponent=0 \ + DEF:total={rrd1}:ONMSPollerTasksTot:AVERAGE \ + DEF:completed={rrd2}:ONMSPollerTasksCpt:AVERAGE \ + CDEF:percent=completed,total,/,100,* \ + LINE1:percent#0000ff:"Completion Ratio" \ + GPRINT:percent:AVERAGE:" Avg \\: %8.2lf %s" \ + GPRINT:percent:MIN:"Min \\: %8.2lf %s" \ + GPRINT:percent:MAX:"Max \\: %8.2lf %s\\n" + ## EOF diff --git a/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/Pollerd.java b/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/Pollerd.java index 267ec41c741d..176e5325152a 100644 --- a/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/Pollerd.java +++ b/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/Pollerd.java @@ -1,8 +1,8 @@ /******************************************************************************* * This file is part of OpenNMS(R). * - * Copyright (C) 2006-2012 The OpenNMS Group, Inc. - * OpenNMS(R) is Copyright (C) 1999-2012 The OpenNMS Group, Inc. + * Copyright (C) 2006-2014 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * @@ -28,7 +28,10 @@ package org.opennms.netmgt.poller.jmx; +import java.util.concurrent.ThreadPoolExecutor; + import org.opennms.netmgt.daemon.AbstractSpringContextJmxServiceDaemon; +import org.opennms.netmgt.scheduler.LegacyScheduler; /** *

Pollerd class.

@@ -49,6 +52,57 @@ protected String getLoggingPrefix() { protected String getSpringContext() { return "pollerdContext"; } + + /** {@inheritDoc} */ + @Override + public long getActiveThreads() { + if (getThreadPoolStatsStatus()) { + return getExecutor().getActiveCount(); + } else { + return 0L; + } + } + + /** {@inheritDoc} */ + @Override + public long getTasksTotal() { + if (getThreadPoolStatsStatus()) { + return getExecutor().getTaskCount(); + } else { + return 0L; + } + } + + /** {@inheritDoc} */ + @Override + public long getTasksCompleted() { + if (getThreadPoolStatsStatus()) { + return getExecutor().getTaskCount(); + } else { + return 0L; + } + } + /** {@inheritDoc} */ + @Override + public double getTaskCompletionRatio() { + if (getThreadPoolStatsStatus()) { + if (getExecutor().getTaskCount() > 0) { + return new Double(getExecutor().getCompletedTaskCount() / new Double(getExecutor().getTaskCount())); + } else { + return new Double(0); + } + } else { + return new Double(0); + } + } + + private ThreadPoolExecutor getExecutor() { + return (ThreadPoolExecutor) ((LegacyScheduler) getDaemon().getScheduler()).getRunner(); + } + + private boolean getThreadPoolStatsStatus() { + return (getDaemon().getScheduler() instanceof LegacyScheduler); + } } diff --git a/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/PollerdMBean.java b/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/PollerdMBean.java index 1809c4518a51..9f588b428b74 100644 --- a/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/PollerdMBean.java +++ b/opennms-services/src/main/java/org/opennms/netmgt/poller/jmx/PollerdMBean.java @@ -1,8 +1,8 @@ /******************************************************************************* * This file is part of OpenNMS(R). * - * Copyright (C) 2006-2012 The OpenNMS Group, Inc. - * OpenNMS(R) is Copyright (C) 1999-2012 The OpenNMS Group, Inc. + * Copyright (C) 2006-2014 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * @@ -37,4 +37,23 @@ * @version $Id: $ */ public interface PollerdMBean extends BaseOnmsMBean { + /** + * @return The number of currently active poller threads + */ + public long getActiveThreads(); + + /** + * @return The cumulative number of polling tasks scheduled since poller startup + */ + public long getTasksTotal(); + + /** + * @return The cumulative number of polling tasks completed since poller startup + */ + public long getTasksCompleted(); + + /** + * @return The ratio of completed to scheduled polling tasks since poller startup + */ + public double getTaskCompletionRatio(); }