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();
}