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
STATUS current
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 }
CpuAllPercentIdle OBJECT-TYPE
@@ -42,7 +42,7 @@ CpuAllPercentIdle OBJECT-TYPE
MAX-ACCESS read-only
STATUS current
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 }
END

View File

@@ -27,7 +27,7 @@ for line in out.split('\n'):
if "Average" in line:
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:]) }
print json.dumps(stats)

View File

@@ -3,7 +3,7 @@ include $(ONL)/make/any.mk
MODULE := onlp-snmpd
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
include $(BUILDER)/dependmodules.mk

View File

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

View File

@@ -191,6 +191,16 @@
#define ONLP_SNMP_CONFIG_AS_SUBAGENT 0
#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) },
#else
{ 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
{ NULL, NULL }
};

View File

@@ -25,7 +25,7 @@
#include <onlp_snmp/onlp_snmp_config.h>
#include "onlp_snmp_log.h"
#include <OS/os_time.h>
#include <AIM/aim_time.h>
#include <cjson/cJSON.h>
#include <cjson_util/cjson_util.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 */
typedef struct {
uint32_t utilization_percent;
@@ -103,8 +100,9 @@ static uint64_t resource_update_time;
void resource_update(void)
{
uint64_t now = os_time_monotonic();
if (now - resource_update_time > RESOURCE_UPDATE_PERIOD * 1000 * 1000) {
uint64_t now = aim_time_monotonic();
if (now - resource_update_time >
(ONLP_SNMP_CONFIG_RESOURCE_UPDATE_SECONDS * 1000 * 1000)) {
resource_update_time = now;
AIM_LOG_INFO("update resource objects");
@@ -124,7 +122,7 @@ void resource_update(void)
if (rv == 0) {
/* save it */
resources.idle_percent = result;
resources.utilization_percent = 100 - result;
resources.utilization_percent = 100*100 - result;
}
cJSON_Delete(root);
}