Redefine CpuAllPercentUtilization and CpuAllPercentIdle to be 100 times the percentage rounded to the nearest integer.

Use aim_time_monotonic.
Add ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS.
This commit is contained in:
Ken Chiang
2016-12-19 13:33:55 -08:00
parent 68da278bed
commit e85b4d45f0
7 changed files with 27 additions and 11 deletions

View File

@@ -34,7 +34,7 @@ CpuAllPercentUtilization OBJECT-TYPE
MAX-ACCESS read-only MAX-ACCESS read-only
STATUS current STATUS current
DESCRIPTION DESCRIPTION
"The average CPU utilization (in percent). Provided by mpstat." "The average CPU utilization in percent, multiplied by 100 and rounded to the nearest integer. Provided by mpstat."
::= { Basic 1 } ::= { Basic 1 }
CpuAllPercentIdle OBJECT-TYPE CpuAllPercentIdle OBJECT-TYPE
@@ -42,7 +42,7 @@ CpuAllPercentIdle OBJECT-TYPE
MAX-ACCESS read-only MAX-ACCESS read-only
STATUS current STATUS current
DESCRIPTION DESCRIPTION
"The average CPU idle time (in percent). Provided by mpstat." "The average CPU idle time in percent, multiplied by 100 and rounded to the nearest integer. Provided by mpstat."
::= { Basic 2 } ::= { Basic 2 }
END END

View File

@@ -27,7 +27,7 @@ for line in out.split('\n'):
if "Average" in line: if "Average" in line:
vals = line.split()[1:] vals = line.split()[1:]
stats[vals[0]] = { k:int(round(float(v))) \ stats[vals[0]] = { k:int(round(100*float(v))) \
for (k,v) in zip(keys[1:],vals[1:]) } for (k,v) in zip(keys[1:],vals[1:]) }
print json.dumps(stats) print json.dumps(stats)

View File

@@ -3,7 +3,7 @@ include $(ONL)/make/any.mk
MODULE := onlp-snmpd MODULE := onlp-snmpd
include $(BUILDER)/standardinit.mk include $(BUILDER)/standardinit.mk
DEPENDMODULES := onlp_snmp AIM OS snmp_subagent IOF onlplib OS cjson cjson_util DEPENDMODULES := onlp_snmp AIM OS snmp_subagent IOF onlplib cjson cjson_util
DEPENDMODULE_HEADERS := onlp DEPENDMODULE_HEADERS := onlp
include $(BUILDER)/dependmodules.mk include $(BUILDER)/dependmodules.mk

View File

@@ -56,6 +56,9 @@ cdefs: &cdefs
- ONLP_SNMP_CONFIG_AS_SUBAGENT: - ONLP_SNMP_CONFIG_AS_SUBAGENT:
doc: "Configure as an snmp_subagent client." doc: "Configure as an snmp_subagent client."
default: 0 default: 0
- ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS:
doc: "Resource object update period in seconds."
default: 5
definitions: definitions:
cdefs: cdefs:

View File

@@ -191,6 +191,16 @@
#define ONLP_SNMP_CONFIG_AS_SUBAGENT 0 #define ONLP_SNMP_CONFIG_AS_SUBAGENT 0
#endif #endif
/**
* ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS
*
* Resource object update period in seconds. */
#ifndef ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS
#define ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS 5
#endif
/** /**

View File

@@ -94,6 +94,11 @@ onlp_snmp_config_settings_t onlp_snmp_config_settings[] =
{ __onlp_snmp_config_STRINGIFY_NAME(ONLP_SNMP_CONFIG_AS_SUBAGENT), __onlp_snmp_config_STRINGIFY_VALUE(ONLP_SNMP_CONFIG_AS_SUBAGENT) }, { __onlp_snmp_config_STRINGIFY_NAME(ONLP_SNMP_CONFIG_AS_SUBAGENT), __onlp_snmp_config_STRINGIFY_VALUE(ONLP_SNMP_CONFIG_AS_SUBAGENT) },
#else #else
{ ONLP_SNMP_CONFIG_AS_SUBAGENT(__onlp_snmp_config_STRINGIFY_NAME), "__undefined__" }, { ONLP_SNMP_CONFIG_AS_SUBAGENT(__onlp_snmp_config_STRINGIFY_NAME), "__undefined__" },
#endif
#ifdef ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS
{ __onlp_snmp_config_STRINGIFY_NAME(ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS), __onlp_snmp_config_STRINGIFY_VALUE(ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS) },
#else
{ ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS(__onlp_snmp_config_STRINGIFY_NAME), "__undefined__" },
#endif #endif
{ NULL, NULL } { NULL, NULL }
}; };

View File

@@ -25,7 +25,7 @@
#include <onlp_snmp/onlp_snmp_config.h> #include <onlp_snmp/onlp_snmp_config.h>
#include "onlp_snmp_log.h" #include "onlp_snmp_log.h"
#include <OS/os_time.h> #include <AIM/aim_time.h>
#include <cjson/cJSON.h> #include <cjson/cJSON.h>
#include <cjson_util/cjson_util.h> #include <cjson_util/cjson_util.h>
#include <net-snmp/net-snmp-config.h> #include <net-snmp/net-snmp-config.h>
@@ -89,9 +89,6 @@ resource_int_register(int index, const char* desc,
} }
/* resource objects refreshed with this period; units in seconds */
#define RESOURCE_UPDATE_PERIOD 5
/* resource objects */ /* resource objects */
typedef struct { typedef struct {
uint32_t utilization_percent; uint32_t utilization_percent;
@@ -103,8 +100,9 @@ static uint64_t resource_update_time;
void resource_update(void) void resource_update(void)
{ {
uint64_t now = os_time_monotonic(); uint64_t now = aim_time_monotonic();
if (now - resource_update_time > RESOURCE_UPDATE_PERIOD * 1000 * 1000) { if (now - resource_update_time >
(ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS * 1000 * 1000)) {
resource_update_time = now; resource_update_time = now;
AIM_LOG_INFO("update resource objects"); AIM_LOG_INFO("update resource objects");
@@ -124,7 +122,7 @@ void resource_update(void)
if (rv == 0) { if (rv == 0) {
/* save it */ /* save it */
resources.idle_percent = result; resources.idle_percent = result;
resources.utilization_percent = 100 - result; resources.utilization_percent = 100*100 - result;
} }
cJSON_Delete(root); cJSON_Delete(root);
} }