Performance Co-Pilot and Arduino (part 2)
After initially setting up Performance Co-Pilot and Arduino, I wanted to improve the data being displayed. As latency is quite important to me, I wanted to display that as well. I did not have too much time on my hands to code a new PMDA that collects that information, so I abused the pmdashping(1) for this purpose. The steps are simple:
- Go to
/var/lib/pcp/pmdas/shping
- Create
sample.conf
with the following line:
8.8.8.8 /var/lib/pcp/pmdas/shping/ping.sh
- Create
/var/lib/pcp/pmdas/shping/ping.sh
:
#!/bin/sh # This hack will break if latency > 254 ;) ret=`ping -c 2 -n -q acksyn.org | grep ^rtt | cut -f5 -d\/ | cut -f1 -d\.` exit $ret
- Launch
./Install
and choose[2] ./sample.conf
- Now it is possible to abuse the
shping.error
metric to fetch that value:
$ pminfo -f shping.error shping.error inst [0 or "8.8.8.8"] value 52
The last step was to fetch this via PMWEBAPI(3). This did not work until I realized, thanks to Fche's suggestion that the issue was related to my inital context initialization. As a matter of fact there is a big difference between the following two:
-
/pmapi/context?local=ANYTHING
- Creates a PM_CONTEXT_LOCAL PMAPI context. -
/pmapi/context?hostname=STRING
- Creates a PM_CONTEXT_HOST PMAPI context with the given host name and/or extended specification.
The man page of pmNewContext(3) explains this in more detail. Frank has added some more info to the PMWEBAPI(3)
man page via the following commit, to make it a little bit more obvious. It's still a pretty gross hack, but for the time being it's enough for my needs.