This patch introduces a feature whereby rrdcached will disallow updates
[rrdtool.git] / src / rrd_graph.c
index 9acf82e..a29e47d 100644 (file)
@@ -307,11 +307,8 @@ int im_free(
     if (im == NULL)
         return 0;
 
-    if (im->use_rrdcached)
-    {
-        rrdc_disconnect ();
-        im->use_rrdcached = 0;
-    }
+    if (im->daemon_addr != NULL)
+      free(im->daemon_addr);
 
     for (i = 0; i < (unsigned) im->gdes_c; i++) {
         if (im->gdes[i].data_first) {
@@ -845,7 +842,7 @@ int data_fetch(
              * - a connection to the daemon has been established
              * - this is the first occurrence of that RRD file
              */
-            if (im->use_rrdcached)
+            if (rrdc_is_connected(im->daemon_addr))
             {
                 int status;
 
@@ -869,7 +866,7 @@ int data_fetch(
                         return (-1);
                     }
                 }
-            } /* if (im->use_rrdcached) */
+            } /* if (rrdc_is_connected()) */
 
             if ((rrd_fetch_fn(im->gdes[i].rrd,
                               im->gdes[i].cf,
@@ -941,7 +938,7 @@ long find_var(
     return -1;
 }
 
-/* find the largest common denominator for all the numbers
+/* find the greatest common divisor for all the numbers
    in the 0 terminated num array */
 long lcd(
     long *num)
@@ -3748,6 +3745,7 @@ void rrd_graph_init(
 #endif
 #endif
     im->base = 1000;
+    im->daemon_addr = NULL;
     im->draw_x_grid = 1;
     im->draw_y_grid = 1;
     im->extra_flags = 0;
@@ -3763,7 +3761,6 @@ void rrd_graph_init(
     im->grinfo_current = (rrd_info_t *) NULL;
     im->imgformat = IF_PNG;
     im->imginfo = NULL;
-    im->use_rrdcached = 0;
     im->lazy = 0;
     im->logarithmic = 0;
     im->maxval = DNAN;
@@ -4254,21 +4251,20 @@ void rrd_graph_options(
             break;
         case 'd':
         {
-            int status;
-            if (im->use_rrdcached)
+            if (im->daemon_addr != NULL)
             {
                 rrd_set_error ("You cannot specify --daemon "
                         "more than once.");
                 return;
             }
-            status = rrdc_connect (optarg);
-            if (status != 0)
+
+            im->daemon_addr = strdup(optarg);
+            if (im->daemon_addr == NULL)
             {
-                rrd_set_error ("rrdc_connect(%s) failed with status %i.",
-                        optarg, status);
-                return;
+              rrd_set_error("strdup failed");
+              return;
             }
-            im->use_rrdcached = 1;
+
             break;
         }
         case '?':
@@ -4280,24 +4276,9 @@ void rrd_graph_options(
         }
     } /* while (1) */
 
-    if (im->use_rrdcached == 0)
-    {
-        char *temp;
-
-        temp = getenv (ENV_RRDCACHED_ADDRESS);
-        if (temp != NULL)
-        {
-            int status;
-
-            status = rrdc_connect (temp);
-            if (status != 0)
-            {
-                rrd_set_error ("rrdc_connect(%s) failed with status %i.",
-                        temp, status);
-                return;
-            }
-            im->use_rrdcached = 1;
-        }
+    {   /* try to connect to rrdcached */
+        int status = rrdc_connect(im->daemon_addr);
+        if (status != 0) return;
     }
     
     pango_cairo_context_set_font_options(pango_layout_get_context(im->layout), im->font_options);
@@ -4542,21 +4523,16 @@ int vdef_calc(
     graph_desc_t *src, *dst;
     rrd_value_t *data;
     long      step, steps;
-    unsigned long end;
 
     dst = &im->gdes[gdi];
     src = &im->gdes[dst->vidx];
     data = src->data + src->ds;
-    end =
-        src->end_orig % (long) src->step ==
-        0 ? src->end_orig : (src->end_orig + (long) src->step -
-                             src->end_orig % (long) src->step);
 
-    steps = (end - src->start) / src->step;
+    steps = (src->end - src->start) / src->step;
 #if 0
     printf
         ("DEBUG: start == %lu, end == %lu, %lu steps\n",
-         src->start, src->end_orig, steps);
+         src->start, src->end, steps);
 #endif
     switch (dst->vf.op) {
     case VDEF_PERCENT:{