I wanted to set the name of the current application being monitored and then use snmpget on values that depend on that setting. I realise this is not quite the snmp way but it's just what I need to monitor a particular application's current state. That way I can retrieve for example the current application's memory and CPU usage as a percentage value. The snmp tutorial isn't very forthcoming about the details of how to do this. In particular it doesn't tell you where the commandline oid and value are located. All you get are four parameters:
netsnmp_mib_handler *handler
netsnmp_handler_registration *reginfo
netsnmp_agent_request_info *reqinfo
netsnmp_request_info *requests
requests->requestvb->val.string
and its length in requests->requestvb->val_len
. The OID is stored in requests->requestvb->name
(an array of ints) and its length in requests->requestvb->name_length
(consistent huh?). I ignored most of the SET states (MODE_SET_RESERVE1, MODE_SET_RESERVE2, MODE_SET_FREE, MODE_SET_ACTION and MODE_SET_UNDO), and just provided code for MODE_SET_COMMIT. (The other states are for allocating and deallocating temporary memory). The storage for the string is just a global variable in the module. I just declared it as
static char currentAppName[APP_NAME_LEN];
where APP_NAME_LEN
is 128. On receipt of a MODE_SET_COMMIT command I just copy the value at requests->requestvb->val.string
into currentAppName
. Of course I put a check in to stop more than 128 bytes being copied. I'm not that dumb.
What's next?
The next task is to compute currentAppCPUUsage
and currentAppMemoryUsage
based on the currentAppName
value.
No comments:
Post a Comment