From efc438925dab4c4a599699b4c89826d3cb8fd74b Mon Sep 17 00:00:00 2001 From: Victor Kirhenshtein Date: Thu, 28 Jul 2016 12:55:11 +0300 Subject: [PATCH] added agent parameters System.CPU.CurrentUsage and System.CPU.CurrentUsage(*) --- ChangeLog | 1 + include/nms_agent.h | 2 ++ src/agent/subagents/winperf/winperf.cpp | 36 ++++++++++++++++--------- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 629568a02..067d66720 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,7 @@ - New internal parameters: Server.ReceivedSNMPTraps, Server.ReceivedSyslogMessages, ReceivedSNMPTraps, ReceivedSyslogMessages - Max size of agent data collectiors pool can be configured - Agent data reconciliation block size and timeout can be configured +- New agent parameters System.CPU.CurrentUsage and System.CPU.CurrentUsage(*) - Management console - New editors for Agent Config Policy and Log Parser Policy. - DCI summary tables with empty menu path not shown in object context menu diff --git a/include/nms_agent.h b/include/nms_agent.h index f68f22f09..44b76b6ad 100644 --- a/include/nms_agent.h +++ b/include/nms_agent.h @@ -325,9 +325,11 @@ #define DCIDESC_SYSTEM_CPU_USAGE_EX _T("Average CPU {instance} utilization for last minute") #define DCIDESC_SYSTEM_CPU_USAGE5_EX _T("Average CPU {instance} utilization for last 5 minutes") #define DCIDESC_SYSTEM_CPU_USAGE15_EX _T("Average CPU {instance} utilization for last 15 minutes") +#define DCIDESC_SYSTEM_CPU_USAGECURR_EX _T("Current CPU {instance} utilization") #define DCIDESC_SYSTEM_CPU_USAGE _T("Average CPU utilization for last minute") #define DCIDESC_SYSTEM_CPU_USAGE5 _T("Average CPU utilization for last 5 minutes") #define DCIDESC_SYSTEM_CPU_USAGE15 _T("Average CPU utilization for last 15 minutes") +#define DCIDESC_SYSTEM_CPU_USAGECURR _T("Current CPU utilization") #define DCIDESC_SYSTEM_CPU_USAGE_USER_EX _T("Average CPU {instance} utilization (user) for last minute") #define DCIDESC_SYSTEM_CPU_USAGE5_USER_EX _T("Average CPU {instance} utilization (user) for last 5 minutes") diff --git a/src/agent/subagents/winperf/winperf.cpp b/src/agent/subagents/winperf/winperf.cpp index 643d198b9..88366dc9e 100644 --- a/src/agent/subagents/winperf/winperf.cpp +++ b/src/agent/subagents/winperf/winperf.cpp @@ -1,6 +1,6 @@ /* ** Windows Performance NetXMS subagent -** Copyright (C) 2004-2013 Victor Kirhenshtein +** Copyright (C) 2004-2016 Victor Kirhenshtein ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by @@ -34,9 +34,10 @@ */ static DWORD m_dwFlags = WPF_ENABLE_DEFAULT_COUNTERS; static DWORD m_dwNumCPU = 1; -static WINPERF_COUNTER *m_pProcessorCounters[MAX_CPU_COUNT]; -static WINPERF_COUNTER *m_pProcessorCounters5[MAX_CPU_COUNT]; -static WINPERF_COUNTER *m_pProcessorCounters15[MAX_CPU_COUNT]; +static WINPERF_COUNTER *s_processorCounters0[MAX_CPU_COUNT]; +static WINPERF_COUNTER *s_processorCounters1[MAX_CPU_COUNT]; +static WINPERF_COUNTER *s_processorCounters5[MAX_CPU_COUNT]; +static WINPERF_COUNTER *s_processorCounters15[MAX_CPU_COUNT]; static MUTEX s_autoCountersLock = MutexCreate(); static StringObjectMap *s_autoCounters = new StringObjectMap(false); @@ -57,6 +58,7 @@ static struct { _T("System.CPU.LoadAvg"), _T("\\System\\Processor Queue Length"), 0, 60, COUNTER_TYPE_FLOAT, _T("Average CPU load for last minute"), DCI_DT_FLOAT }, { _T("System.CPU.LoadAvg5"), _T("\\System\\Processor Queue Length"), 0, 300, COUNTER_TYPE_FLOAT, _T("Average CPU load for last 5 minutes"), DCI_DT_FLOAT }, { _T("System.CPU.LoadAvg15"), _T("\\System\\Processor Queue Length"), 0, 900, COUNTER_TYPE_FLOAT, _T("Average CPU load for last 15 minutes"), DCI_DT_FLOAT }, + { _T("System.CPU.CurrentUsage"), _T("\\Processor(_Total)\\% Processor Time"), 0, 2, COUNTER_TYPE_INT32, DCIDESC_SYSTEM_CPU_USAGECURR, DCI_DT_INT }, { _T("System.CPU.Usage"), _T("\\Processor(_Total)\\% Processor Time"), 0, 60, COUNTER_TYPE_INT32, DCIDESC_SYSTEM_CPU_USAGE, DCI_DT_INT }, { _T("System.CPU.Usage5"), _T("\\Processor(_Total)\\% Processor Time"), 0, 300, COUNTER_TYPE_INT32, DCIDESC_SYSTEM_CPU_USAGE5, DCI_DT_INT }, { _T("System.CPU.Usage15"), _T("\\Processor(_Total)\\% Processor Time"), 0, 900, COUNTER_TYPE_INT32, DCIDESC_SYSTEM_CPU_USAGE15, DCI_DT_INT }, @@ -104,21 +106,27 @@ static LONG H_CPUUsage(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, switch(pArg[0]) { + case _T('0'): // System.CPU.Usage(*) + if (s_processorCounters0[nProcessor] != NULL) + ret_int(pValue, s_processorCounters0[nProcessor]->value.iLong); + else + nRet = SYSINFO_RC_ERROR; + break; case _T('1'): // System.CPU.Usage(*) - if (m_pProcessorCounters[nProcessor] != NULL) - ret_int(pValue, m_pProcessorCounters[nProcessor]->value.iLong); + if (s_processorCounters1[nProcessor] != NULL) + ret_int(pValue, s_processorCounters1[nProcessor]->value.iLong); else nRet = SYSINFO_RC_ERROR; break; case _T('2'): // System.CPU.Usage5(*) - if (m_pProcessorCounters5[nProcessor] != NULL) - ret_int(pValue, m_pProcessorCounters5[nProcessor]->value.iLong); + if (s_processorCounters5[nProcessor] != NULL) + ret_int(pValue, s_processorCounters5[nProcessor]->value.iLong); else nRet = SYSINFO_RC_ERROR; break; case _T('3'): // System.CPU.Usage15(*) - if (m_pProcessorCounters15[nProcessor] != NULL) - ret_int(pValue, m_pProcessorCounters15[nProcessor]->value.iLong); + if (s_processorCounters15[nProcessor] != NULL) + ret_int(pValue, s_processorCounters15[nProcessor]->value.iLong); else nRet = SYSINFO_RC_ERROR; break; @@ -407,6 +415,7 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] = { { _T("PDH.CounterValue(*)"), H_PdhCounterValue, NULL, DCI_DT_INT, _T("") }, { _T("PDH.Version"), H_PdhVersion, NULL, DCI_DT_UINT, _T("Version of PDH.DLL") }, + { _T("System.CPU.CurrentUsage(*)"), H_CPUUsage, _T("0"), DCI_DT_INT, DCIDESC_SYSTEM_CPU_USAGECURR_EX }, { _T("System.CPU.Usage(*)"), H_CPUUsage, _T("1"), DCI_DT_INT, DCIDESC_SYSTEM_CPU_USAGE_EX }, { _T("System.CPU.Usage5(*)"), H_CPUUsage, _T("2"), DCI_DT_INT, DCIDESC_SYSTEM_CPU_USAGE5_EX }, { _T("System.CPU.Usage15(*)"), H_CPUUsage, _T("3"), DCI_DT_INT, DCIDESC_SYSTEM_CPU_USAGE15_EX }, @@ -496,9 +505,10 @@ static void AddPredefinedCounters() for(i = 0; i < m_dwNumCPU; i++) { _sntprintf(szBuffer, MAX_PATH, _T("\\Processor(%d)\\%% Processor Time"), i); - m_pProcessorCounters[i] = AddCounter(szBuffer, 0, 60, COUNTER_TYPE_INT32); - m_pProcessorCounters5[i] = AddCounter(szBuffer, 0, 300, COUNTER_TYPE_INT32); - m_pProcessorCounters15[i] = AddCounter(szBuffer, 0, 900, COUNTER_TYPE_INT32); + s_processorCounters0[i] = AddCounter(szBuffer, 0, 2, COUNTER_TYPE_INT32); + s_processorCounters1[i] = AddCounter(szBuffer, 0, 60, COUNTER_TYPE_INT32); + s_processorCounters5[i] = AddCounter(szBuffer, 0, 300, COUNTER_TYPE_INT32); + s_processorCounters15[i] = AddCounter(szBuffer, 0, 900, COUNTER_TYPE_INT32); } } -- 2.20.1