#include <u.h>
#include <libc.h>
#include <thread.h>
#include <bio.h>
#include "collectd.h"
static void
submit(Channel *c, char *type, double value)
{
Packet *pp;
pp = palloc();
pp->host = estrdup(hostname);
pp->interval = interval;
pp->time = time(nil);
pp->plugin = estrdup("swap");
pp->type = estrdup("swap");
pp->tinst = estrdup(type);
addgauge(pp, value);
if(nbsendp(c, pp) < 1)
pfree(pp);
}
void
swapproc(void *arg)
{
char *p;
Channel *c;
Biobuf *bp;
Swap swap;
ulong pagesize;
double used, total;
/*
* Swap(8) is rarely used these days; skip this plugin for
* systems not making use of it.
*/
p = getenv("swap");
if(p == nil)
exits(nil);
free(p);
c = arg;
bp = nil;
for(;;){
snooze();
pagesize = 0;
used = total = 0;
while(bp = readswap(bp, "/dev/swap", &swap)){
if(strcmp(swap.name, "pagesize") == 0)
pagesize = swap.n;
else if(strcmp(swap.name, "swap") == 0){
used = (double)swap.n * pagesize;
total = (double)swap.m * pagesize;
}
}
submit(c, "used", used);
submit(c, "free", total-used);
}
}
|