Hi, On Thu, 22 Mar 2012 11:16:29 Stian Øvrevåge <sovrev...@gmail.com> wrote: > In the documentation there are some options for the rrdtool plugin > with regards to StepSize and some RRA-specifics. I am dependent on > tuning these values. However, I'm using the rrdcached plugin, not > rrdtool. How to proceed?
Try attached patch, it makes the same options of rrdtool plugin configurable for rrdcached plugin as well. Regards, Bruno > Thanks in advance > > Regards, > Stian Øvrevåge
Make RRD settings configurable with rrdcached Copy over the RRD settings configuration options of rrdtool plugin to rrdcached plugin so the RRD step size, heartbeat and friends can also be configured for rrdcached. Signed-off-by: Bruno Prémont <bonb...@linux-vserver.org> --- --- collectd-4.10.3/src/rrdcached.c.orig 2011-04-14 14:50:46.917963666 +0200 +++ collectd-4.10.3/src/rrdcached.c 2011-04-14 15:35:20.243294587 +0200 @@ -36,7 +36,12 @@ static const char *config_keys[] = "DaemonAddress", "DataDir", "CreateFiles", - "CollectStatistics" + "CollectStatistics", + "StepSize", + "HeartBeat", + "RRARows", + "RRATimespan", + "XFF", }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); @@ -160,6 +165,19 @@ static int value_list_to_filename (char return (0); } /* int value_list_to_filename */ +static int rrd_compare_numeric (const void *a_ptr, const void *b_ptr) +{ + int a = *((int *) a_ptr); + int b = *((int *) b_ptr); + + if (a < b) + return (-1); + else if (a > b) + return (1); + else + return (0); +} /* int rrd_compare_numeric */ + static int rc_config (const char *key, const char *value) { if (strcasecmp ("DataDir", key) == 0) @@ -206,6 +224,83 @@ static int rc_config (const char *key, c else config_collect_stats = 1; } + else if (strcasecmp ("StepSize", key) == 0) + { + int temp = atoi (value); + if (temp > 0) + rrdcreate_config.stepsize = temp; + } + else if (strcasecmp ("HeartBeat", key) == 0) + { + int temp = atoi (value); + if (temp > 0) + rrdcreate_config.heartbeat = temp; + } + else if (strcasecmp ("RRARows", key) == 0) + { + int tmp = atoi (value); + if (tmp <= 0) + { + fprintf (stderr, "rrdtool: `RRARows' must " + "be greater than 0.\n"); + ERROR ("rrdtool: `RRARows' must " + "be greater than 0.\n"); + return (1); + } + rrdcreate_config.rrarows = tmp; + } + else if (strcasecmp ("RRATimespan", key) == 0) + { + char *saveptr = NULL; + char *dummy; + char *ptr; + char *value_copy; + int *tmp_alloc; + + value_copy = strdup (value); + if (value_copy == NULL) + return (1); + + dummy = value_copy; + while ((ptr = strtok_r (dummy, ", \t", &saveptr)) != NULL) + { + dummy = NULL; + + tmp_alloc = realloc (rrdcreate_config.timespans, + sizeof (int) * (rrdcreate_config.timespans_num + 1)); + if (tmp_alloc == NULL) + { + fprintf (stderr, "rrdtool: realloc failed.\n"); + ERROR ("rrdtool: realloc failed.\n"); + free (value_copy); + return (1); + } + rrdcreate_config.timespans = tmp_alloc; + rrdcreate_config.timespans[rrdcreate_config.timespans_num] = atoi (ptr); + if (rrdcreate_config.timespans[rrdcreate_config.timespans_num] != 0) + rrdcreate_config.timespans_num++; + } /* while (strtok_r) */ + + qsort (/* base = */ rrdcreate_config.timespans, + /* nmemb = */ rrdcreate_config.timespans_num, + /* size = */ sizeof (rrdcreate_config.timespans[0]), + /* compar = */ rrd_compare_numeric); + + free (value_copy); + } + else if (strcasecmp ("XFF", key) == 0) + { + double tmp = atof (value); + if ((tmp < 0.0) || (tmp >= 1.0)) + { + fprintf (stderr, "rrdtool: `XFF' must " + "be in the range 0 to 1 (exclusive)."); + ERROR ("rrdtool: `XFF' must " + "be in the range 0 to 1 (exclusive)."); + return (1); + } + rrdcreate_config.xff = tmp; + } else { return (-1);
_______________________________________________ collectd mailing list collectd@verplant.org http://mailman.verplant.org/listinfo/collectd