X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fmultimeter.c;h=775eb57e27bff64201f81e83cf6528c36fa0608e;hb=e9ecee2a61356a293f086dd3d36d2381486b563e;hp=d1cf1903e8f64d5ae5c3af9af202f1178c6b429c;hpb=6360474f4aa35dd1a587b6148ff88a23e6155132;p=collectd.git diff --git a/src/multimeter.c b/src/multimeter.c index d1cf1903..775eb57e 100644 --- a/src/multimeter.c +++ b/src/multimeter.c @@ -30,44 +30,12 @@ # include # include # include -# define MULTIMETER_HAVE_READ 1 #else -# define MULTIMETER_HAVE_READ 0 -# error "multimeter cannot read!" +# error "No applicable input method." #endif -static data_source_t data_source[1] = -{ - {"value", DS_TYPE_GAUGE, NAN, NAN} -}; - -static data_set_t data_set = -{ - "multimeter", 1, data_source -}; - -#if MULTIMETER_HAVE_READ static int fd = -1; -static int multimeter_timeval_sub (struct timeval *tv1, struct timeval *tv2, - struct timeval *res) -{ - if ((tv1->tv_sec < tv2->tv_sec) || - ((tv1->tv_sec == tv2->tv_sec) && (tv1->tv_usec < tv2->tv_usec))) - return (-1); - - res->tv_sec = tv1->tv_sec - tv2->tv_sec; - res->tv_usec = tv1->tv_usec - tv2->tv_usec; - - assert ((res->tv_sec > 0) || ((res->tv_sec == 0) && (res->tv_usec > 0))); - - while (res->tv_usec < 0) - { - res->tv_usec += 1000000; - res->tv_sec--; - } - return (0); -} #define LINE_LENGTH 14 static int multimeter_read_value(double *value) { @@ -81,8 +49,10 @@ static int multimeter_read_value(double *value) if (gettimeofday (&time_end, NULL) < 0) { - syslog (LOG_ERR, "multimeter plugin: gettimeofday failed: %s", - strerror (errno)); + char errbuf[1024]; + ERROR ("multimeter plugin: gettimeofday failed: %s", + sstrerror (errno, errbuf, + sizeof (errbuf))); return (-1); } time_end.tv_sec++; @@ -96,19 +66,26 @@ static int multimeter_read_value(double *value) struct timeval timeout; struct timeval time_now; - write(fd, "D", 1); + status = swrite (fd, "D", 1); + if (status < 0) + { + ERROR ("multimeter plugin: swrite failed."); + return (-1); + } FD_ZERO(&rfds); FD_SET(fd, &rfds); if (gettimeofday (&time_now, NULL) < 0) { - syslog (LOG_ERR, "multimeter plugin: " + char errbuf[1024]; + ERROR ("multimeter plugin: " "gettimeofday failed: %s", - strerror (errno)); + sstrerror (errno, errbuf, + sizeof (errbuf))); return (-1); } - if (multimeter_timeval_sub (&time_end, &time_now, &timeout) == -1) + if (timeval_cmp (time_end, time_now, &timeout) < 0) break; status = select(fd+1, &rfds, NULL, NULL, &timeout); @@ -157,9 +134,10 @@ static int multimeter_read_value(double *value) } else /* status == -1 */ { - syslog (LOG_ERR, "multimeter plugin: " + char errbuf[1024]; + ERROR ("multimeter plugin: " "select failed: %s", - strerror (errno)); + sstrerror (errno, errbuf, sizeof (errbuf))); break; } } @@ -201,14 +179,14 @@ static int multimeter_init (void) } else { - syslog (LOG_INFO, "multimeter plugin: Device " + INFO ("multimeter plugin: Device " "found at %s", device); return (0); } } } - syslog (LOG_ERR, "multimeter plugin: No device found"); + ERROR ("multimeter plugin: No device found"); return (-1); } #undef LINE_LENGTH @@ -222,11 +200,11 @@ static void multimeter_submit (double value) vl.values = values; vl.values_len = 1; - vl.time = time (NULL); - strcpy (vl.host, hostname); - strcpy (vl.plugin, "multimeter"); + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "multimeter", sizeof (vl.plugin)); + sstrncpy (vl.type, "multimeter", sizeof (vl.type)); - plugin_dispatch_values ("multimeter", &vl); + plugin_dispatch_values (&vl); } static int multimeter_read (void) @@ -253,15 +231,10 @@ static int multimeter_shutdown (void) return (0); } -#endif /* MULTIMETER_HAVE_READ */ void module_register (void) { - plugin_register_data_set (&data_set); - -#if MULTIMETER_HAVE_READ plugin_register_init ("multimeter", multimeter_init); plugin_register_read ("multimeter", multimeter_read); plugin_register_shutdown ("multimeter", multimeter_shutdown); -#endif /* MULTIMETER_HAVE_READ */ -} +} /* void module_register */