X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fload.c;h=0188da7ef38407972f5570f47fabcf622db41b4b;hb=29c3bad314a65ea01bdd045eb1ba64e1c4b282a9;hp=7be594d15f26bd8b9a7de2c08f9b93b12716eff1;hpb=2f0dfdda8bc499fdb161c6a5850ec176e75bd4fa;p=collectd.git diff --git a/src/load.c b/src/load.c index 7be594d1..0188da7e 100644 --- a/src/load.c +++ b/src/load.c @@ -1,6 +1,7 @@ /** * collectd - src/load.c - * Copyright (C) 2005,2006 Florian octo Forster + * Copyright (C) 2005-2008 Florian octo Forster + * Copyright (C) 2009 Manuel Sanmartin * * 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 @@ -17,22 +18,23 @@ * * Authors: * Florian octo Forster + * Manuel Sanmartin **/ +#define _BSD_SOURCE + #include "collectd.h" #include "common.h" #include "plugin.h" -#if defined(HAVE_GETLOADAVG) || defined(KERNEL_LINUX) || defined(HAVE_LIBSTATGRAB) -# define LOAD_HAVE_READ 1 -#else -# define LOAD_HAVE_READ 0 -#endif - #ifdef HAVE_SYS_LOADAVG_H #include #endif +#if HAVE_STATGRAB_H +# include +#endif + #ifdef HAVE_GETLOADAVG #if !defined(LOADAVG_1MIN) || !defined(LOADAVG_5MIN) || !defined(LOADAVG_15MIN) #define LOADAVG_1MIN 0 @@ -41,19 +43,12 @@ #endif #endif /* defined(HAVE_GETLOADAVG) */ -static data_source_t dsrc[3] = -{ - {"shortterm", DS_TYPE_GAUGE, 0.0, 100.0}, - {"midterm", DS_TYPE_GAUGE, 0.0, 100.0}, - {"longterm", DS_TYPE_GAUGE, 0.0, 100.0} -}; - -static data_set_t ds = -{ - "load", 3, dsrc -}; +#ifdef HAVE_PERFSTAT +# include /* AIX 5 */ +# include +# include +#endif /* HAVE_PERFSTAT */ -#if LOAD_HAVE_READ static void load_submit (gauge_t snum, gauge_t mnum, gauge_t lnum) { value_t values[3]; @@ -65,11 +60,11 @@ static void load_submit (gauge_t snum, gauge_t mnum, gauge_t lnum) vl.values = values; vl.values_len = STATIC_ARRAY_SIZE (values); - vl.time = time (NULL); - strcpy (vl.host, hostname_g); - strcpy (vl.plugin, "load"); + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "load", sizeof (vl.plugin)); + sstrncpy (vl.type, "load", sizeof (vl.type)); - plugin_dispatch_values ("load", &vl); + plugin_dispatch_values (&vl); } static int load_read (void) @@ -94,13 +89,13 @@ static int load_read (void) char *fields[8]; int numfields; - + if ((loadavg = fopen ("/proc/loadavg", "r")) == NULL) { char errbuf[1024]; WARNING ("load: fopen: %s", sstrerror (errno, errbuf, sizeof (errbuf))); - return; + return (-1); } if (fgets (buffer, 16, loadavg) == NULL) @@ -109,7 +104,7 @@ static int load_read (void) WARNING ("load: fgets: %s", sstrerror (errno, errbuf, sizeof (errbuf))); fclose (loadavg); - return; + return (-1); } if (fclose (loadavg)) @@ -122,7 +117,7 @@ static int load_read (void) numfields = strsplit (buffer, fields, 8); if (numfields < 3) - return; + return (-1); snum = atof (fields[0]); mnum = atof (fields[1]); @@ -131,7 +126,7 @@ static int load_read (void) load_submit (snum, mnum, lnum); /* #endif KERNEL_LINUX */ -#elif defined(HAVE_LIBSTATGRAB) +#elif HAVE_LIBSTATGRAB gauge_t snum, mnum, lnum; sg_load_stats *ls; @@ -143,19 +138,35 @@ static int load_read (void) lnum = ls->min15; load_submit (snum, mnum, lnum); -#endif /* HAVE_LIBSTATGRAB */ +/* #endif HAVE_LIBSTATGRAB */ + +#elif HAVE_PERFSTAT + gauge_t snum, mnum, lnum; + perfstat_cpu_total_t cputotal; + + if (perfstat_cpu_total(NULL, &cputotal, sizeof(perfstat_cpu_total_t), 1) < 0) + { + char errbuf[1024]; + WARNING ("load: perfstat_cpu : %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + return (-1); + } + + snum = (float)cputotal.loadavg[0]/(float)(1<