X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fserial.c;h=430082220595c58f2b927089871a76e4e482a157;hb=b99f2ef5c262080cdd55d4dc056aaf23ba2ff907;hp=78210300fd0a234ded51d35d53bef21aaf5772a4;hpb=f9ee71b22e47eec32ceedd8d85afc99949a084a6;p=collectd.git diff --git a/src/serial.c b/src/serial.c index 78210300..43008222 100644 --- a/src/serial.c +++ b/src/serial.c @@ -1,6 +1,6 @@ /** * collectd - src/serial.c - * Copyright (C) 2005 David Bacher + * Copyright (C) 2005,2006 David Bacher * * 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 @@ -18,67 +18,44 @@ * * Authors: * David Bacher - * Florian octo Forster + * Florian octo Forster **/ -#include "serial.h" - -#if COLLECT_SERIAL -#define MODULE_NAME "serial" - -#include "plugin.h" +#include "collectd.h" #include "common.h" +#include "plugin.h" -static char *serial_filename_template = "serial-%s.rrd"; +#if !KERNEL_LINUX +# error "No applicable input method." +#endif -static char *ds_def[] = +static void serial_submit (const char *type_instance, + derive_t rx, derive_t tx) { - "DS:incoming:COUNTER:25:0:U", - "DS:outgoing:COUNTER:25:0:U", - NULL -}; -static int ds_num = 2; + value_t values[2]; + value_list_t vl = VALUE_LIST_INIT; -void serial_init (void) -{ -} - -void serial_write (char *host, char *inst, char *val) -{ - char file[512]; - int status; + values[0].derive = rx; + values[1].derive = tx; - status = snprintf (file, 512, serial_filename_template, inst); - if (status < 1) - return; - else if (status >= 512) - return; + vl.values = values; + vl.values_len = 2; + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "serial", sizeof (vl.plugin)); + sstrncpy (vl.type, "serial_octets", sizeof (vl.type)); + sstrncpy (vl.type_instance, type_instance, + sizeof (vl.type_instance)); - rrd_update_file (host, file, val, ds_def, ds_num); + plugin_dispatch_values (&vl); } -#define BUFSIZE 512 -void serial_submit (char *device, - unsigned long long incoming, - unsigned long long outgoing) +static int serial_read (void) { - char buf[BUFSIZE]; - - if (snprintf (buf, BUFSIZE, "%u:%llu:%llu", (unsigned int) curtime, - incoming, outgoing) >= BUFSIZE) - return; - - plugin_submit (MODULE_NAME, device, buf); -} -#undef BUFSIZE - -void serial_read (void) -{ -#ifdef KERNEL_LINUX - FILE *fh; char buffer[1024]; - unsigned long long incoming, outgoing; + + derive_t rx = 0; + derive_t tx = 0; char *fields[16]; int i, numfields; @@ -88,11 +65,13 @@ void serial_read (void) if ((fh = fopen ("/proc/tty/driver/serial", "r")) == NULL && (fh = fopen ("/proc/tty/driver/ttyS", "r")) == NULL) { - syslog (LOG_WARNING, "serial: fopen: %s", strerror (errno)); - return; + char errbuf[1024]; + WARNING ("serial: fopen: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + return (-1); } - while (fgets (buffer, 1024, fh) != NULL) + while (fgets (buffer, sizeof (buffer), fh) != NULL) { int have_rx = 0, have_tx = 0; @@ -120,12 +99,12 @@ void serial_read (void) if (strncmp (fields[i], "tx:", 3) == 0) { - outgoing = atoll (fields[i] + 3); + tx = atoll (fields[i] + 3); have_tx++; } else if (strncmp (fields[i], "rx:", 3) == 0) { - incoming = atoll (fields[i] + 3); + rx = atoll (fields[i] + 3); have_rx++; } } @@ -133,17 +112,14 @@ void serial_read (void) if ((have_rx == 0) || (have_tx == 0)) continue; - serial_submit (fields[0], incoming, outgoing); + serial_submit (fields[0], rx, tx); } fclose (fh); -#endif /* KERNEL_LINUX */ -} + return (0); +} /* int serial_read */ void module_register (void) { - plugin_register (MODULE_NAME, serial_init, serial_read, serial_write); -} - -#undef MODULE_NAME -#endif /* COLLECT_SERIAL */ + plugin_register_read ("serial", serial_read); +} /* void module_register */