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

Reply via email to