Code

rrdtool plugin: Implemented a `DataDir' config option to be able to store the RRD...
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Mon, 12 Feb 2007 18:55:19 +0000 (19:55 +0100)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Mon, 12 Feb 2007 18:55:19 +0000 (19:55 +0100)
src/collectd.conf.pod
src/rrdtool.c

index 45acb68284cd508bab44acc0b6c66c7fa76e770c..33690ee5d1f2e6256d3eace56af072805c620ab2 100644 (file)
@@ -318,6 +318,11 @@ at once reduces IO-operations and thus lessens the load produced by updating
 the files. The tradeoff is that the graphs kind of "drag behind" and that more
 memory is used.
 
+=item B<DataDir> I<Directory>
+
+Set the directory to store RRD-files under. Per default RRD-files are generated
+beneath the daemons working directory, i.E<nbsp>e. the B<BaseDir>.
+
 =back
 
 =head2 Plugin C<sensors>
index 5a9fa8c6dfd042328d2fd0f082553747730da127..beb5a73e270e2a561523bfb62fb5d64d93d1f91f 100644 (file)
@@ -76,9 +76,12 @@ static int rra_types_num = 3;
 static const char *config_keys[] =
 {
        "CacheTimeout",
+       "DataDir",
        NULL
 };
-static int config_keys_num = 1;
+static int config_keys_num = 2;
+
+static char *datadir = NULL;
 
 static int      cache_timeout = 0;
 static time_t   cache_flush;
@@ -365,6 +368,15 @@ static int value_list_to_filename (char *buffer, int buffer_len,
        int offset = 0;
        int status;
 
+       if (datadir != NULL)
+       {
+               status = snprintf (buffer + offset, buffer_len - offset,
+                               "%s/", datadir);
+               if ((status < 1) || (status >= buffer_len - offset))
+                       return (-1);
+               offset += status;
+       }
+
        status = snprintf (buffer + offset, buffer_len - offset,
                        "%s/", vl->host);
        if ((status < 1) || (status >= buffer_len - offset))
@@ -617,6 +629,26 @@ static int rrd_config (const char *key, const char *val)
                }
                cache_timeout = tmp;
        }
+       else if (strcasecmp ("DataDir", key) == 0)
+       {
+               if (datadir != NULL)
+                       free (datadir);
+               datadir = strdup (val);
+               if (datadir != NULL)
+               {
+                       int len = strlen (datadir);
+                       while ((len > 0) && (datadir[len - 1] == '/'))
+                       {
+                               len--;
+                               datadir[len] = '\0';
+                       }
+                       if (len <= 0)
+                       {
+                               free (datadir);
+                               datadir = NULL;
+                       }
+               }
+       }
        else
        {
                return (-1);