X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdf.c;h=d327164ac601e3a98c59217122240b0e77b8ea4b;hb=863dfcdf274509e4e1836c2c8f1f10f09e1d13be;hp=69dc2994121ed2500b91a260f8e3f4c2e58455df;hpb=fdf2cf57cd814f5d454f124b23a54a50b48c34d7;p=collectd.git diff --git a/src/df.c b/src/df.c index 69dc2994..d327164a 100644 --- a/src/df.c +++ b/src/df.c @@ -1,6 +1,6 @@ /** * collectd - src/df.c - * Copyright (C) 2005 Florian octo Forster + * Copyright (C) 2005,2006 Florian octo Forster * * 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 @@ -23,7 +23,9 @@ #include "collectd.h" #include "common.h" #include "plugin.h" +#include "configfile.h" #include "utils_mount.h" +#include "utils_ignorelist.h" #define MODULE_NAME "df" @@ -33,32 +35,102 @@ # define DF_HAVE_READ 0 #endif -#if HAVE_STATFS -#define STATANYFS statfs -#define BLOCKSIZE(s) (s).f_bsize - -#elif HAVE_STATVFS -#define STATANYFS statvfs -#define BLOCKSIZE(s) ((s).f_frsize ? (s).f_frsize : (s).f_bsize) +#if HAVE_STATVFS +# if HAVE_SYS_STATVFS_H +# include +# endif +# define STATANYFS statvfs +# define BLOCKSIZE(s) ((s).f_frsize ? (s).f_frsize : (s).f_bsize) +#elif HAVE_STATFS +# if HAVE_SYS_STATFS_H +# include +# endif +# define STATANYFS statfs +# define BLOCKSIZE(s) (s).f_bsize #endif static char *filename_template = "df-%s.rrd"; static char *ds_def[] = { - "DS:used:GAUGE:25:0:U", - "DS:free:GAUGE:25:0:U", + "DS:used:GAUGE:"COLLECTD_HEARTBEAT":0:U", + "DS:free:GAUGE:"COLLECTD_HEARTBEAT":0:U", NULL }; static int ds_num = 2; +static char *config_keys[] = +{ + "Device", + "MountPoint", + "FSType", + "IgnoreSelected", + NULL +}; +static int config_keys_num = 4; + +static ignorelist_t *il_device = NULL; +static ignorelist_t *il_mountpoint = NULL; +static ignorelist_t *il_fstype = NULL; + #define BUFSIZE 512 static void df_init (void) { + if (il_device == NULL) + il_device = ignorelist_create (1); + if (il_mountpoint == NULL) + il_mountpoint = ignorelist_create (1); + if (il_fstype == NULL) + il_fstype = ignorelist_create (1); + return; } +static int df_config (char *key, char *value) +{ + df_init (); + + if (strcasecmp (key, "Device") == 0) + { + if (ignorelist_add (il_device, value)) + return (1); + return (0); + } + else if (strcasecmp (key, "MountPoint") == 0) + { + if (ignorelist_add (il_mountpoint, value)) + return (1); + return (0); + } + else if (strcasecmp (key, "FSType") == 0) + { + if (ignorelist_add (il_fstype, value)) + return (1); + return (0); + } + else if (strcasecmp (key, "IgnoreSelected") == 0) + { + if ((strcasecmp (value, "True") == 0) + || (strcasecmp (value, "Yes") == 0) + || (strcasecmp (value, "On") == 0)) + { + ignorelist_set_invert (il_device, 0); + ignorelist_set_invert (il_mountpoint, 0); + ignorelist_set_invert (il_fstype, 0); + } + else + { + ignorelist_set_invert (il_device, 1); + ignorelist_set_invert (il_mountpoint, 1); + ignorelist_set_invert (il_fstype, 1); + } + return (0); + } + + return (-1); +} + static void df_write (char *host, char *inst, char *val) { char file[BUFSIZE]; @@ -89,7 +161,12 @@ static void df_submit (char *df_name, static void df_read (void) { - struct STATANYFS statbuf; +#if HAVE_STATVFS + struct statvfs statbuf; +#elif HAVE_STATFS + struct statfs statbuf; +#endif + /* struct STATANYFS statbuf; */ cu_mount_t *mnt_list; cu_mount_t *mnt_ptr; @@ -100,10 +177,7 @@ static void df_read (void) mnt_list = NULL; if (cu_mount_getlist (&mnt_list) == NULL) - { - syslog (LOG_WARNING, "cu_mount_getlist returned `NULL'"); return; - } for (mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next) { @@ -136,6 +210,16 @@ static void df_read (void) mnt_name[i] = '-'; } + if (ignorelist_match (il_device, + (mnt_ptr->spec_device != NULL) + ? mnt_ptr->spec_device + : mnt_ptr->device)) + continue; + if (ignorelist_match (il_mountpoint, mnt_ptr->dir)) + continue; + if (ignorelist_match (il_fstype, mnt_ptr->type)) + continue; + df_submit (mnt_name, df_used, df_free); } @@ -148,6 +232,7 @@ static void df_read (void) void module_register (void) { plugin_register (MODULE_NAME, df_init, df_read, df_write); + cf_register (MODULE_NAME, df_config, config_keys, config_keys_num); } #undef BUFSIZE