252N/A/*
252N/A * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
252N/A */
252N/A
252N/A#include <net-snmp/net-snmp-config.h>
252N/A#include <net-snmp/net-snmp-includes.h>
252N/A#include <net-snmp/agent/net-snmp-agent-includes.h>
252N/A#include "me1LoadGroup.h"
252N/A#include <sys/loadavg.h>
252N/A
252N/Achar *
252N/AgetLoadAvg(int timeAverage)
252N/A{
252N/A double loadavg[3];
252N/A char *data = malloc(30 * sizeof (char));
252N/A int numOfSamples = getloadavg(loadavg, 3);
252N/A sprintf(data, "%e", loadavg[timeAverage]);
252N/A return (data);
252N/A}
252N/A
252N/A/* Initializes the me1LoadGroup module */
252N/Avoid
252N/Ainit_me1LoadGroup(void)
252N/A{
252N/A static oid me1SystemLoadAvg15min_oid[] =
252N/A { 1, 3, 6, 1, 4, 1, 42, 2, 2, 4, 4, 1, 1, 3, 0 };
252N/A static oid me1SystemLoadAvg1min_oid[] =
252N/A {1, 3, 6, 1, 4, 1, 42, 2, 2, 4, 4, 1, 1, 1, 0 };
252N/A static oid me1SystemLoadAvg5min_oid[] =
252N/A {1, 3, 6, 1, 4, 1, 42, 2, 2, 4, 4, 1, 1, 2, 0 };
252N/A
252N/A DEBUGMSGTL(("me1LoadGroup", "Initializing\n"));
252N/A
252N/A netsnmp_register_read_only_instance(netsnmp_create_handler_registration
252N/A ("me1SystemLoadAvg15min",
252N/A get_me1SystemLoadAvg15min,
252N/A me1SystemLoadAvg15min_oid,
252N/A OID_LENGTH(me1SystemLoadAvg15min_oid),
252N/A HANDLER_CAN_RONLY));
252N/A netsnmp_register_read_only_instance(netsnmp_create_handler_registration
252N/A ("me1SystemLoadAvg1min",
252N/A get_me1SystemLoadAvg1min,
252N/A me1SystemLoadAvg1min_oid,
252N/A OID_LENGTH(me1SystemLoadAvg1min_oid),
252N/A HANDLER_CAN_RONLY));
252N/A netsnmp_register_read_only_instance(netsnmp_create_handler_registration
252N/A ("me1SystemLoadAvg5min",
252N/A get_me1SystemLoadAvg5min,
252N/A me1SystemLoadAvg5min_oid,
252N/A OID_LENGTH(me1SystemLoadAvg5min_oid),
252N/A HANDLER_CAN_RONLY));
252N/A}
252N/A
252N/Aint
252N/Aget_me1SystemLoadAvg15min(netsnmp_mib_handler * handler,
252N/A netsnmp_handler_registration * reginfo,
252N/A netsnmp_agent_request_info * reqinfo,
252N/A netsnmp_request_info * requests)
252N/A{
252N/A /*
252N/A * We are never called for a GETNEXT if it's registered as a
252N/A * "instance", as it's "magically" handled for us.
252N/A */
252N/A
252N/A /*
252N/A * a instance handler also only hands us one request at a time, so we
252N/A * don't need to loop over a list of requests; we'll only get one.
252N/A */
252N/A char *data = getLoadAvg(LOADAVG_15MIN);
252N/A switch (reqinfo->mode) {
252N/A
252N/A case MODE_GET:
252N/A /*
252N/A * Get data from data collection routine, Hardcoded here for
252N/A * testing purpose
252N/A */
252N/A snmp_set_var_typed_value(requests->requestvb,
252N/A ASN_OCTET_STR, (u_char *) data, strlen(data));
252N/A free(data);
252N/A break;
252N/A
252N/A
252N/A default:
252N/A /* we should never get here, so this is a really bad error */
252N/A return (SNMP_ERR_GENERR);
252N/A }
252N/A
252N/A return (SNMP_ERR_NOERROR);
252N/A}
252N/Aint
252N/Aget_me1SystemLoadAvg1min(netsnmp_mib_handler * handler,
252N/A netsnmp_handler_registration * reginfo,
252N/A netsnmp_agent_request_info * reqinfo,
252N/A netsnmp_request_info * requests)
252N/A{
252N/A /*
252N/A * We are never called for a GETNEXT if it's registered as a
252N/A * "instance", as it's "magically" handled for us.
252N/A */
252N/A
252N/A /*
252N/A * a instance handler also only hands us one request at a time, so we
252N/A * don't need to loop over a list of requests; we'll only get one.
252N/A */
252N/A
252N/A char *data = getLoadAvg(LOADAVG_1MIN);
252N/A switch (reqinfo->mode) {
252N/A
252N/A case MODE_GET:
252N/A snmp_set_var_typed_value(requests->requestvb,
252N/A ASN_OCTET_STR, (u_char *) data, strlen(data));
252N/A free(data);
252N/A break;
252N/A
252N/A
252N/A default:
252N/A /* we should never get here, so this is a really bad error */
252N/A return (SNMP_ERR_GENERR);
252N/A }
252N/A
252N/A return (SNMP_ERR_NOERROR);
252N/A}
252N/Aint
252N/Aget_me1SystemLoadAvg5min(netsnmp_mib_handler * handler,
252N/A netsnmp_handler_registration * reginfo,
252N/A netsnmp_agent_request_info * reqinfo,
252N/A netsnmp_request_info * requests)
252N/A{
252N/A /*
252N/A * We are never called for a GETNEXT if it's registered as a
252N/A * "instance", as it's "magically" handled for us.
252N/A */
252N/A
252N/A /*
252N/A * a instance handler also only hands us one request at a time, so we
252N/A * don't need to loop over a list of requests; we'll only get one.
252N/A */
252N/A
252N/A char *data = getLoadAvg(LOADAVG_5MIN);
252N/A switch (reqinfo->mode) {
252N/A case MODE_GET:
252N/A snmp_set_var_typed_value(requests->requestvb,
252N/A ASN_OCTET_STR, (u_char *) data, strlen(data));
252N/A free(data);
252N/A break;
252N/A
252N/A
252N/A default:
252N/A /* we should never get here, so this is a really bad error */
252N/A return (SNMP_ERR_GENERR);
252N/A }
252N/A
252N/A return (SNMP_ERR_NOERROR);
252N/A}