X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fload.c;h=7be594d15f26bd8b9a7de2c08f9b93b12716eff1;hb=56d9e605484d5360f483079af8160d42e148ae39;hp=fbe6c4def58de57bb7dd60d95f3aa8e7c7f86f68;hpb=4ff510ffa41e47f31c695c83f045fd79efecf5f4;p=collectd.git diff --git a/src/load.c b/src/load.c index fbe6c4de..7be594d1 100644 --- a/src/load.c +++ b/src/load.c @@ -1,11 +1,10 @@ /** * collectd - src/load.c - * Copyright (C) 2005 Florian octo Forster + * Copyright (C) 2005,2006 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; either version 2 of the License, or (at your - * option) any later version. + * 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 @@ -24,8 +23,6 @@ #include "common.h" #include "plugin.h" -#define MODULE_NAME "load" - #if defined(HAVE_GETLOADAVG) || defined(KERNEL_LINUX) || defined(HAVE_LIBSTATGRAB) # define LOAD_HAVE_READ 1 #else @@ -44,42 +41,38 @@ #endif #endif /* defined(HAVE_GETLOADAVG) */ -static char *load_file = "load.rrd"; - -static char *ds_def[] = +static data_source_t dsrc[3] = { - "DS:shortterm:GAUGE:"COLLECTD_HEARTBEAT":0:100", - "DS:midterm:GAUGE:"COLLECTD_HEARTBEAT":0:100", - "DS:longterm:GAUGE:"COLLECTD_HEARTBEAT":0:100", - NULL + {"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 int ds_num = 3; - -static void load_init (void) -{ - return; -} -static void load_write (char *host, char *inst, char *val) +static data_set_t ds = { - rrd_update_file (host, load_file, val, ds_def, ds_num); -} + "load", 3, dsrc +}; #if LOAD_HAVE_READ -#define BUFSIZE 256 -static void load_submit (double snum, double mnum, double lnum) +static void load_submit (gauge_t snum, gauge_t mnum, gauge_t lnum) { - char buf[BUFSIZE]; + value_t values[3]; + value_list_t vl = VALUE_LIST_INIT; - if (snprintf (buf, BUFSIZE, "%u:%.2f:%.2f:%.2f", (unsigned int) curtime, - snum, mnum, lnum) >= BUFSIZE) - return; + values[0].gauge = snum; + values[1].gauge = mnum; + values[2].gauge = lnum; + + 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 -static void load_read (void) +static int load_read (void) { #if defined(HAVE_GETLOADAVG) double load[3]; @@ -87,11 +80,15 @@ static 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]; @@ -100,18 +97,27 @@ static void load_read (void) if ((loadavg = fopen ("/proc/loadavg", "r")) == NULL) { - syslog (LOG_WARNING, "load: fopen: %s", strerror (errno)); + char errbuf[1024]; + WARNING ("load: fopen: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); return; } if (fgets (buffer, 16, loadavg) == NULL) { - syslog (LOG_WARNING, "load: fgets: %s", strerror (errno)); + char errbuf[1024]; + WARNING ("load: fgets: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + fclose (loadavg); return; } 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); @@ -126,7 +132,7 @@ static 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) @@ -138,14 +144,18 @@ static void load_read (void) load_submit (snum, mnum, lnum); #endif /* HAVE_LIBSTATGRAB */ + + return (0); } -#else -# define load_read NULL #endif /* LOAD_HAVE_READ */ -void module_register (void) +void module_register (modreg_e load) { - plugin_register (MODULE_NAME, load_init, load_read, load_write); -} + if (load & MR_DATASETS) + plugin_register_data_set (&ds); -#undef MODULE_NAME +#if LOAD_HAVE_READ + if (load & MR_READ) + plugin_register_read ("load", load_read); +#endif +} /* void module_register */