X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Ftape.c;h=5e01f0d8a963876549c47e56f3337b0b72888829;hb=963dca85df6fb2f5654d3de1d14ae991d550c870;hp=4671ed46aa0e7b4b957e30f4ced5e1ebfef626ac;hpb=55b439475d492599de5134536710180b39dac593;p=collectd.git diff --git a/src/tape.c b/src/tape.c index 4671ed46..5e01f0d8 100644 --- a/src/tape.c +++ b/src/tape.c @@ -1,6 +1,6 @@ /** * collectd - src/tape.c - * Copyright (C) 2005 Scott Garrett + * Copyright (C) 2005,2006 Scott Garrett * * 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 @@ -24,31 +24,13 @@ #include "common.h" #include "plugin.h" -#define MODULE_NAME "tape" - #if defined(HAVE_LIBKSTAT) # define TAPE_HAVE_READ 1 #else # define TAPE_HAVE_READ 0 #endif -static char *tape_filename_template = "tape-%s.rrd"; - -/* 104857600 == 100 MB */ -static char *tape_ds_def[] = -{ - "DS:rcount:COUNTER:25:0:U", - "DS:rmerged:COUNTER:25:0:U", - "DS:rbytes:COUNTER:25:0:U", - "DS:rtime:COUNTER:25:0:U", - "DS:wcount:COUNTER:25:0:U", - "DS:wmerged:COUNTER:25:0:U", - "DS:wbytes:COUNTER:25:0:U", - "DS:wtime:COUNTER:25:0:U", - NULL -}; -static int tape_ds_num = 8; - +#if TAPE_HAVE_READ #if defined(HAVE_LIBKSTAT) #define MAX_NUMTAPE 256 extern kstat_ctl_t *kc; @@ -56,7 +38,7 @@ static kstat_t *ksp[MAX_NUMTAPE]; static int numtape = 0; #endif /* HAVE_LIBKSTAT */ -static void tape_init (void) +static int tape_init (void) { #ifdef HAVE_LIBKSTAT kstat_t *ksp_chain; @@ -64,7 +46,7 @@ static void tape_init (void) numtape = 0; if (kc == NULL) - return; + return (-1); for (numtape = 0, ksp_chain = kc->kc_chain; (numtape < MAX_NUMTAPE) && (ksp_chain != NULL); @@ -78,60 +60,59 @@ static void tape_init (void) } #endif - return; -} - -static void tape_write (char *host, char *inst, char *val) -{ - char file[512]; - int status; - - status = snprintf (file, 512, tape_filename_template, inst); - if (status < 1) - return; - else if (status >= 512) - return; - - rrd_update_file (host, file, val, tape_ds_def, tape_ds_num); + return (0); } - -#if TAPE_HAVE_READ -#define BUFSIZE 512 -static void tape_submit (char *tape_name, - unsigned long long read_count, - unsigned long long read_merged, - unsigned long long read_bytes, - unsigned long long read_time, - unsigned long long write_count, - unsigned long long write_merged, - unsigned long long write_bytes, - unsigned long long write_time) - +static void tape_submit (const char *plugin_instance, + const char *type, + counter_t read, counter_t write) { - char buf[BUFSIZE]; + value_t values[2]; + value_list_t vl = VALUE_LIST_INIT; - if (snprintf (buf, BUFSIZE, "%u:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu", - (unsigned int) curtime, - read_count, read_merged, read_bytes, read_time, - write_count, write_merged, write_bytes, - write_time) >= BUFSIZE) - return; + values[0].counter = read; + values[1].counter = write; - plugin_submit (MODULE_NAME, tape_name, buf); -} + 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, + sizeof (vl.plugin_instance)); -#undef BUFSIZE + plugin_dispatch_values (type, &vl); +} /* void tape_submit */ -static void tape_read (void) +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; + return (-1); + + if (numtape <= 0) + return (-1); for (i = 0; i < numtape; i++) { @@ -139,19 +120,26 @@ static void tape_read (void) continue; if (strncmp (ksp[i]->ks_class, "tape", 4) == 0) - tape_submit (ksp[i]->ks_name, - kio.reads, 0LL, kio.nread, kio.rtime, - kio.writes, 0LL, kio.nwritten, kio.wtime); + { + 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.KIO_RTIME, kio.KIO_WTIME); + } } #endif /* defined(HAVE_LIBKSTAT) */ + + return (0); } -#else -# define tape_read NULL #endif /* TAPE_HAVE_READ */ void module_register (void) { - plugin_register (MODULE_NAME, tape_init, tape_read, tape_write); +#if TAPE_HAVE_READ + plugin_register_init ("tape", tape_init); + plugin_register_read ("tape", tape_read); +#endif /* TAPE_HAVE_READ */ } - -#undef MODULE_NAME