/**
* collectd - src/swap.c
* Copyright (C) 2005-2009 Florian octo Forster
+ * Copyright (C) 2009 Stefan Völkel
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
/* #endif KERNEL_LINUX */
#elif HAVE_LIBKSTAT
-static unsigned long long pagesize;
+static derive_t pagesize;
static kstat_t *ksp;
/* #endif HAVE_LIBKSTAT */
#elif HAVE_LIBKSTAT
/* getpagesize(3C) tells me this does not fail.. */
- pagesize = (unsigned long long) getpagesize ();
+ pagesize = (derive_t) getpagesize ();
if (get_kstat (&ksp, "unix", 0, "system_pages"))
ksp = NULL;
/* #endif HAVE_LIBKSTAT */
switch (type)
{
case DS_TYPE_GAUGE:
- values[0].gauge = value;
+ values[0].gauge = (gauge_t) value;
sstrncpy (vl.type, "swap", sizeof (vl.type));
break;
case DS_TYPE_DERIVE:
#if KERNEL_LINUX
FILE *fh;
char buffer[1024];
-
+
char *fields[8];
int numfields;
- unsigned long long swap_used = 0LL;
- unsigned long long swap_cached = 0LL;
- unsigned long long swap_free = 0LL;
- unsigned long long swap_total = 0LL;
- unsigned long long swap_in = 0LL;
- unsigned long long swap_out = 0LL;
+ derive_t swap_used = 0;
+ derive_t swap_cached = 0;
+ derive_t swap_free = 0;
+ derive_t swap_total = 0;
+ derive_t swap_in = 0;
+ derive_t swap_out = 0;
if ((fh = fopen ("/proc/meminfo", "r")) == NULL)
{
while (fgets (buffer, 1024, fh) != NULL)
{
- unsigned long long *val = NULL;
+ derive_t *val = NULL;
if (strncasecmp (buffer, "SwapTotal:", 10) == 0)
val = &swap_total;
if (numfields < 2)
continue;
- *val = atoll (fields[1]) * 1024LL;
+ *val = (derive_t) atoll (fields[1]) * 1024LL;
}
if (fclose (fh))
while (fgets (buffer, 1024, fh) != NULL)
{
- unsigned long long *val = NULL;
+ derive_t *val = NULL;
if (strncasecmp (buffer, "pswpin", 6) == 0)
val = &swap_in;
if (numfields < 2)
continue;
- *val = atoll (fields[1]);
+ *val = (derive_t) atoll (fields[1]);
}
if (fclose (fh))
/* #endif KERNEL_LINUX */
#elif HAVE_LIBKSTAT
- unsigned long long swap_alloc;
- unsigned long long swap_resv;
- unsigned long long swap_avail;
+ derive_t swap_alloc;
+ derive_t swap_resv;
+ derive_t swap_avail;
struct anoninfo ai;
* swap_alloc = pagesize * ( ai.ani_max - ai.ani_free );
* can suffer from a 32bit overflow.
*/
- swap_alloc = ai.ani_max - ai.ani_free;
- swap_alloc *= pagesize;
- swap_resv = ai.ani_resv + ai.ani_free - ai.ani_max;
- swap_resv *= pagesize;
- swap_avail = ai.ani_max - ai.ani_resv;
- swap_avail *= pagesize;
-
- swap_submit ("used", swap_alloc);
- swap_submit ("free", swap_avail);
- swap_submit ("reserved", swap_resv);
+ swap_alloc = (derive_t) ((ai.ani_max - ai.ani_free) * pagesize);
+ swap_resv = (derive_t) ((ai.ani_resv + ai.ani_free - ai.ani_max)
+ * pagesize);
+ swap_avail = (derive_t) ((ai.ani_max - ai.ani_resv) * pagesize);
+
+ swap_submit ("used", swap_alloc, DS_TYPE_GAUGE);
+ swap_submit ("free", swap_avail, DS_TYPE_GAUGE);
+ swap_submit ("reserved", swap_resv, DS_TYPE_GAUGE);
/* #endif HAVE_LIBKSTAT */
#elif HAVE_SWAPCTL
int status;
int i;
- uint64_t used = 0;
- uint64_t total = 0;
+ derive_t used = 0;
+ derive_t total = 0;
/*
* XXX: This is the syntax for the *BSD `swapctl', which has the
}
#if defined(DEV_BSIZE) && (DEV_BSIZE > 0)
-# define C_SWAP_BLOCK_SIZE ((uint64_t) DEV_BSIZE)
+# define C_SWAP_BLOCK_SIZE ((derive_t) DEV_BSIZE)
#else
-# define C_SWAP_BLOCK_SIZE ((uint64_t) 512)
+# define C_SWAP_BLOCK_SIZE ((derive_t) 512)
#endif
for (i = 0; i < swap_num; i++)
if ((swap_entries[i].se_flags & SWF_ENABLE) == 0)
continue;
- used += ((uint64_t) swap_entries[i].se_inuse)
+ used += ((derive_t) swap_entries[i].se_inuse)
* C_SWAP_BLOCK_SIZE;
- total += ((uint64_t) swap_entries[i].se_nblks)
+ total += ((derive_t) swap_entries[i].se_nblks)
* C_SWAP_BLOCK_SIZE;
}
return (-1);
}
- swap_submit ("used", (gauge_t) used);
- swap_submit ("free", (gauge_t) (total - used));
+ swap_submit ("used", used, DS_TYPE_GAUGE);
+ swap_submit ("free", total - used, DS_TYPE_GAUGE);
sfree (swap_entries);
/* #endif HAVE_SWAPCTL */
return (-1);
/* The returned values are bytes. */
- swap_submit ("used", sw_usage.xsu_used);
- swap_submit ("free", sw_usage.xsu_avail);
+ swap_submit ("used", (derive_t) sw_usage.xsu_used, DS_TYPE_GAUGE);
+ swap_submit ("free", (derive_t) sw_usage.xsu_avail, DS_TYPE_GAUGE);
/* #endif VM_SWAPUSAGE */
#elif HAVE_LIBKVM_GETSWAPINFO
struct kvm_swap data_s;
int status;
- unsigned long long used;
- unsigned long long free;
- unsigned long long total;
+ derive_t used;
+ derive_t free;
+ derive_t total;
if (kvm_obj == NULL)
return (-1);
if (status == -1)
return (-1);
- total = (unsigned long long) data_s.ksw_total;
- used = (unsigned long long) data_s.ksw_used;
+ total = (derive_t) data_s.ksw_total;
+ used = (derive_t) data_s.ksw_used;
- total *= (unsigned long long) kvm_pagesize;
- used *= (unsigned long long) kvm_pagesize;
+ total *= (derive_t) kvm_pagesize;
+ used *= (derive_t) kvm_pagesize;
free = total - used;
- swap_submit ("used", used);
- swap_submit ("free", free);
+ swap_submit ("used", used, DS_TYPE_GAUGE);
+ swap_submit ("free", free, DS_TYPE_GAUGE);
/* #endif HAVE_LIBKVM_GETSWAPINFO */
#elif HAVE_LIBSTATGRAB
if (swap == NULL)
return (-1);
- swap_submit ("used", swap->used);
- swap_submit ("free", swap->free);
+ swap_submit ("used", (derive_t) swap->used, DS_TYPE_GAUGE);
+ swap_submit ("free", (derive_t) swap->free, DS_TYPE_GAUGE);
#endif /* HAVE_LIBSTATGRAB */
return (0);