X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fload.c;h=c9f130b7864609bf31b68aad4dfc4b4508a7e2e6;hb=acbd25344a59c091b087311804d375b759077e32;hp=2a14edd2cec26053f9540ea7c8749182aa5a6bbb;hpb=15996f86d77adf5c05f8b172b2256572ec90f812;p=collectd.git diff --git a/src/load.c b/src/load.c index 2a14edd2..c9f130b7 100644 --- a/src/load.c +++ b/src/load.c @@ -1,10 +1,27 @@ -#include "load.h" - -#if COLLECT_LOAD -#define MODULE_NAME "load" - -#include "plugin.h" +/** + * collectd - src/load.c + * Copyright (C) 2005-2007 Florian octo Forster + * + * 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 + * Free Software Foundation; only version 2 of the License is applicable. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: + * Florian octo Forster + **/ + +#include "collectd.h" #include "common.h" +#include "plugin.h" #ifdef HAVE_SYS_LOADAVG_H #include @@ -18,43 +35,25 @@ #endif #endif /* defined(HAVE_GETLOADAVG) */ -static char *load_file = "load.rrd"; - -static char *ds_def[] = +static void load_submit (gauge_t snum, gauge_t mnum, gauge_t lnum) { - "DS:shortterm:GAUGE:25:0:100", - "DS:midterm:GAUGE:25:0:100", - "DS:longterm:GAUGE:25:0:100", - NULL -}; -static int ds_num = 3; - -extern time_t curtime; + value_t values[3]; + value_list_t vl = VALUE_LIST_INIT; -void load_init (void) -{ - return; -} - -void load_write (char *host, char *inst, char *val) -{ - rrd_update_file (host, load_file, val, ds_def, ds_num); -} - -#define BUFSIZE 256 -void load_submit (double snum, double mnum, double lnum) -{ - char buf[BUFSIZE]; + values[0].gauge = snum; + values[1].gauge = mnum; + values[2].gauge = lnum; - if (snprintf (buf, BUFSIZE, "%u:%.2f:%.2f:%.2f", (unsigned int) curtime, - snum, mnum, lnum) >= BUFSIZE) - return; + vl.values = values; + vl.values_len = STATIC_ARRAY_SIZE (values); + vl.time = time (NULL); + strcpy (vl.host, hostname_g); + strcpy (vl.plugin, "load"); - plugin_submit (MODULE_NAME, "-", buf); + plugin_dispatch_values ("load", &vl); } -#undef BUFSIZE -void load_read (void) +static int load_read (void) { #if defined(HAVE_GETLOADAVG) double load[3]; @@ -62,11 +61,15 @@ void load_read (void) if (getloadavg (load, 3) == 3) load_submit (load[LOADAVG_1MIN], load[LOADAVG_5MIN], load[LOADAVG_15MIN]); else - syslog (LOG_WARNING, "load: getloadavg failed: %s", strerror (errno)); + { + char errbuf[1024]; + WARNING ("load: getloadavg failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } /* #endif HAVE_GETLOADAVG */ #elif defined(KERNEL_LINUX) - double snum, mnum, lnum; + gauge_t snum, mnum, lnum; FILE *loadavg; char buffer[16]; @@ -75,23 +78,32 @@ void load_read (void) if ((loadavg = fopen ("/proc/loadavg", "r")) == NULL) { - syslog (LOG_WARNING, "load: fopen: %s", strerror (errno)); - return; + char errbuf[1024]; + WARNING ("load: fopen: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + return (-1); } if (fgets (buffer, 16, loadavg) == NULL) { - syslog (LOG_WARNING, "load: fgets: %s", strerror (errno)); - return; + char errbuf[1024]; + WARNING ("load: fgets: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + fclose (loadavg); + return (-1); } if (fclose (loadavg)) - syslog (LOG_WARNING, "load: fclose: %s", strerror (errno)); + { + char errbuf[1024]; + WARNING ("load: fclose: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } numfields = strsplit (buffer, fields, 8); if (numfields < 3) - return; + return (-1); snum = atof (fields[0]); mnum = atof (fields[1]); @@ -101,7 +113,7 @@ void load_read (void) /* #endif KERNEL_LINUX */ #elif defined(HAVE_LIBSTATGRAB) - double snum, mnum, lnum; + gauge_t snum, mnum, lnum; sg_load_stats *ls; if ((ls = sg_get_load_stats ()) == NULL) @@ -112,13 +124,16 @@ void load_read (void) lnum = ls->min15; load_submit (snum, mnum, lnum); -#endif /* HAVE_LIBSTATGRAB */ +/* #endif HAVE_LIBSTATGRAB */ + +#else +# error "No applicable input method." +#endif + + return (0); } void module_register (void) { - plugin_register (MODULE_NAME, load_init, load_read, load_write); -} - -#undef MODULE_NAME -#endif /* COLLECT_LOAD */ + plugin_register_read ("load", load_read); +} /* void module_register */