X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftape.c;h=c7d56c736b4a1d1261b165517aede4b32ae7239a;hb=dc57f6e8f2394b51dd35d1d8231ef110c075b831;hp=85a63a8965b14f6984c9b6874c918b3befe336b6;hpb=d561a8387f633491bdcd7fe6964f0b63ae694af5;p=collectd.git diff --git a/src/tape.c b/src/tape.c index 85a63a89..c7d56c73 100644 --- a/src/tape.c +++ b/src/tape.c @@ -21,72 +21,21 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" -#if defined(HAVE_LIBKSTAT) -# define TAPE_HAVE_READ 1 -#else -# define TAPE_HAVE_READ 0 +#if !HAVE_LIBKSTAT +# error "No applicable input method." #endif -/* 2^34 = 17179869184 = ~17.2GByte/s */ -static data_source_t octets_dsrc[2] = -{ - {"read", DS_TYPE_COUNTER, 0, 17179869183.0}, - {"write", DS_TYPE_COUNTER, 0, 17179869183.0} -}; - -static data_set_t octets_ds = -{ - "tape_octets", 2, octets_dsrc -}; - -static data_source_t operations_dsrc[2] = -{ - {"read", DS_TYPE_COUNTER, 0, 4294967295.0}, - {"write", DS_TYPE_COUNTER, 0, 4294967295.0} -}; - -static data_set_t operations_ds = -{ - "tape_ops", 2, operations_dsrc -}; - -static data_source_t merged_dsrc[2] = -{ - {"read", DS_TYPE_COUNTER, 0, 4294967295.0}, - {"write", DS_TYPE_COUNTER, 0, 4294967295.0} -}; - -static data_set_t merged_ds = -{ - "tape_merged", 2, merged_dsrc -}; - -/* max is 1000000us per second. */ -static data_source_t time_dsrc[2] = -{ - {"read", DS_TYPE_COUNTER, 0, 1000000.0}, - {"write", DS_TYPE_COUNTER, 0, 1000000.0} -}; - -static data_set_t time_ds = -{ - "tape_time", 2, time_dsrc -}; - -#if TAPE_HAVE_READ -#if defined(HAVE_LIBKSTAT) #define MAX_NUMTAPE 256 extern kstat_ctl_t *kc; static kstat_t *ksp[MAX_NUMTAPE]; static int numtape = 0; -#endif /* HAVE_LIBKSTAT */ static int tape_init (void) { -#ifdef HAVE_LIBKSTAT kstat_t *ksp_chain; numtape = 0; @@ -104,38 +53,51 @@ static int tape_init (void) continue; ksp[numtape++] = ksp_chain; } -#endif return (0); -} +} /* int tape_init */ static void tape_submit (const char *plugin_instance, const char *type, - counter_t read, counter_t write) + derive_t read, derive_t write) { - value_t values[2]; value_list_t vl = VALUE_LIST_INIT; - - values[0].counter = read; - values[1].counter = write; + value_t values[] = { + { .derive = read }, + { .derive = write }, + }; vl.values = values; - vl.values_len = 2; - vl.time = time (NULL); - strcpy (vl.host, hostname_g); - strcpy (vl.plugin, "tape"); - strncpy (vl.plugin_instance, plugin_instance, + vl.values_len = STATIC_ARRAY_SIZE (values); + sstrncpy (vl.plugin, "tape", sizeof (vl.plugin)); + sstrncpy (vl.plugin_instance, plugin_instance, sizeof (vl.plugin_instance)); + sstrncpy (vl.type, type, sizeof (vl.type)); - plugin_dispatch_values (type, &vl); + plugin_dispatch_values (&vl); } /* void tape_submit */ static int tape_read (void) { -#if defined(HAVE_LIBKSTAT) +#if HAVE_KSTAT_IO_T_WRITES && HAVE_KSTAT_IO_T_NWRITES && HAVE_KSTAT_IO_T_WTIME +# define KIO_ROCTETS reads +# define KIO_WOCTETS writes +# define KIO_ROPS nreads +# define KIO_WOPS nwrites +# define KIO_RTIME rtime +# define KIO_WTIME wtime +#elif HAVE_KSTAT_IO_T_NWRITTEN && HAVE_KSTAT_IO_T_WRITES && HAVE_KSTAT_IO_T_WTIME +# define KIO_ROCTETS nread +# define KIO_WOCTETS nwritten +# define KIO_ROPS reads +# define KIO_WOPS writes +# define KIO_RTIME rtime +# define KIO_WTIME wtime +#else +# error "kstat_io_t does not have the required members" +#endif static kstat_io_t kio; - int i; if (kc == NULL) return (-1); @@ -143,34 +105,28 @@ static int tape_read (void) if (numtape <= 0) return (-1); - for (i = 0; i < numtape; i++) + for (int i = 0; i < numtape; i++) { if (kstat_read (kc, ksp[i], &kio) == -1) continue; if (strncmp (ksp[i]->ks_class, "tape", 4) == 0) { - tape_submit (ksp[i]->ks_name, "tape_octets", kio.reads, kio.writes); - tape_submit (ksp[i]->ks_name, "tape_ops", kio.nreads, kio.nwrites); + tape_submit (ksp[i]->ks_name, "tape_octets", + kio.KIO_ROCTETS, kio.KIO_WOCTETS); + tape_submit (ksp[i]->ks_name, "tape_ops", + kio.KIO_ROPS, kio.KIO_WOPS); /* FIXME: Convert this to microseconds if necessary */ - tape_submit (ksp[i]->ks_name, "tape_time", kio.rtime, kio.wtime); + tape_submit (ksp[i]->ks_name, "tape_time", + kio.KIO_RTIME, kio.KIO_WTIME); } } -#endif /* defined(HAVE_LIBKSTAT) */ return (0); } -#endif /* TAPE_HAVE_READ */ void module_register (void) { - plugin_register_data_set (&octets_ds); - plugin_register_data_set (&operations_ds); - plugin_register_data_set (&merged_ds); - plugin_register_data_set (&time_ds); - -#if TAPE_HAVE_READ plugin_register_init ("tape", tape_init); plugin_register_read ("tape", tape_read); -#endif /* TAPE_HAVE_READ */ }