X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdf.c;h=ce1ef107534a8963207d7384dca80e50ebeba275;hb=bf90793e82989b1c36fe8f3b66b9c9fe05c9532d;hp=6ec51fe314671fb28b885db27deaaa5b17882423;hpb=838af4cdc6c8674ed3e14a95fea172118c707a85;p=collectd.git diff --git a/src/df.c b/src/df.c index 6ec51fe3..ce1ef107 100644 --- a/src/df.c +++ b/src/df.c @@ -26,12 +26,6 @@ #include "utils_mount.h" #include "utils_ignorelist.h" -#if HAVE_STATFS || HAVE_STATVFS -# define DF_HAVE_READ 1 -#else -# define DF_HAVE_READ 0 -#endif - #if HAVE_STATVFS # if HAVE_SYS_STATVFS_H # include @@ -44,21 +38,10 @@ # endif # define STATANYFS statfs # define BLOCKSIZE(s) (s).f_bsize +#else +# error "No applicable input method." #endif -/* 2^50 - 1 == 1125899906842623 = 1 Petabyte */ -static data_source_t dsrc[2] = -{ - {"free", DS_TYPE_GAUGE, 0, 1125899906842623.0}, - {"used", DS_TYPE_GAUGE, 0, 1125899906842623.0} -}; - -static data_set_t ds = -{ - "df", 2, dsrc -}; - -#if DF_HAVE_READ static const char *config_keys[] = { "Device", @@ -141,13 +124,13 @@ static void df_submit (char *df_name, vl.values = values; vl.values_len = 2; - vl.time = time (NULL); - strcpy (vl.host, hostname_g); - strcpy (vl.plugin, "df"); - strcpy (vl.plugin_instance, ""); - strncpy (vl.type_instance, df_name, sizeof (vl.type_instance)); + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "df", sizeof (vl.plugin)); + sstrncpy (vl.plugin_instance, "", sizeof (vl.plugin_instance)); + sstrncpy (vl.type, "df", sizeof (vl.type)); + sstrncpy (vl.type_instance, df_name, sizeof (vl.type_instance)); - plugin_dispatch_values ("df", &vl); + plugin_dispatch_values (&vl); } /* void df_submit */ static int df_read (void) @@ -172,28 +155,15 @@ static int df_read (void) for (mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next) { - if (STATANYFS (mnt_ptr->dir, &statbuf) < 0) - { - ERROR ("statv?fs failed: %s", strerror (errno)); - continue; - } - - if (!statbuf.f_blocks) - continue; - - blocksize = BLOCKSIZE(statbuf); - df_free = statbuf.f_bfree * blocksize; - df_used = (statbuf.f_blocks - statbuf.f_bfree) * blocksize; - if (strcmp (mnt_ptr->dir, "/") == 0) { - strncpy (mnt_name, "root", sizeof (mnt_name)); + sstrncpy (mnt_name, "root", sizeof (mnt_name)); } else { int i, len; - strncpy (mnt_name, mnt_ptr->dir + 1, sizeof (mnt_name)); + sstrncpy (mnt_name, mnt_ptr->dir + 1, sizeof (mnt_name)); len = strlen (mnt_name); for (i = 0; i < len; i++) @@ -211,6 +181,22 @@ static int df_read (void) if (ignorelist_match (il_fstype, mnt_ptr->type)) continue; + if (STATANYFS (mnt_ptr->dir, &statbuf) < 0) + { + char errbuf[1024]; + ERROR ("statv?fs failed: %s", + sstrerror (errno, errbuf, + sizeof (errbuf))); + continue; + } + + if (!statbuf.f_blocks) + continue; + + blocksize = BLOCKSIZE(statbuf); + df_free = statbuf.f_bfree * blocksize; + df_used = (statbuf.f_blocks - statbuf.f_bfree) * blocksize; + df_submit (mnt_name, df_used, df_free); } @@ -218,15 +204,11 @@ static int df_read (void) return (0); } /* int df_read */ -#endif /* DF_HAVE_READ */ void module_register (void) { - plugin_register_data_set (&ds); - -#if DF_HAVE_READ - plugin_register_config ("df", df_config, config_keys, config_keys_num); + plugin_register_config ("df", df_config, + config_keys, config_keys_num); plugin_register_init ("df", df_init); plugin_register_read ("df", df_read); -#endif } /* void module_register */