src/utils_params.c: Fix some compiler warnings.
[collection4.git] / src / action_graph.c
index a0f257e..148921c 100644 (file)
 #include <fcgiapp.h>
 #include <fcgi_stdio.h>
 
+static int get_time_args (str_array_t *args) /* {{{ */
+{
+  const char *begin_str;
+  const char *end_str;
+  long now;
+  long begin;
+  long end;
+  char *endptr;
+  long tmp;
+
+  begin_str = param ("begin");
+  end_str = param ("end");
+
+  now = (long) time (NULL);
+
+  if (begin_str != NULL)
+  {
+    endptr = NULL;
+    errno = 0;
+    tmp = strtol (begin_str, &endptr, /* base = */ 0);
+    if ((endptr == begin_str) || (errno != 0))
+      return (-1);
+    if (tmp <= 0)
+      begin = now + tmp;
+    else
+      begin = tmp;
+  }
+  else /* if (begin_str == NULL) */
+  {
+    begin = now - 86400;
+  }
+
+  if (end_str != NULL)
+  {
+    endptr = NULL;
+    errno = 0;
+    tmp = strtol (end_str, &endptr, /* base = */ 0);
+    if ((endptr == end_str) || (errno != 0))
+      return (-1);
+    end = tmp;
+    if (tmp <= 0)
+      end = now + tmp;
+    else
+      end = tmp;
+  }
+  else /* if (end_str == NULL) */
+  {
+    end = now;
+  }
+
+  if (begin == end)
+    return (-1);
+
+  if (begin > end)
+  {
+    tmp = begin;
+    begin = end;
+    end = tmp;
+  }
+
+  array_append (args, "-s");
+  array_append_format (args, "%li", begin);
+  array_append (args, "-e");
+  array_append_format (args, "%li", end);
+
+  return (0);
+} /* }}} int get_time_args */
+
 static void emulate_graph (int argc, char **argv) /* {{{ */
 {
   int i;
@@ -51,7 +119,8 @@ static int ag_info_print (rrd_info_t *info) /* {{{ */
   return (0);
 } /* }}} int ag_info_print */
 
-static int output_graph (rrd_info_t *info) /* {{{ */
+static int output_graph (rrd_info_t *info, /* {{{ */
+    time_t mtime)
 {
   rrd_info_t *img;
 
@@ -64,9 +133,19 @@ static int output_graph (rrd_info_t *info) /* {{{ */
     return (ENOENT);
 
   printf ("Content-Type: image/png\n"
-      "Content-Length: %lu\n"
-      "\n",
+      "Content-Length: %lu\n",
       img->value.u_blo.size);
+  if (mtime > 0)
+  {
+    char buffer[256];
+    int status;
+    
+    status = time_to_rfc1123 (mtime, buffer, sizeof (buffer));
+    if (status == 0)
+      printf ("Last-Modified: %s\n", buffer);
+  }
+  printf ("\n");
+
   fwrite (img->value.u_blo.ptr, img->value.u_blo.size,
       /* nmemb = */ 1, stdout);
 
@@ -104,6 +183,8 @@ int action_graph (void) /* {{{ */
   array_append (args, "--imgformat");
   array_append (args, "PNG");
 
+  get_time_args (args);
+
   status = inst_get_rrdargs (cfg, inst, args);
   if (status != 0)
   {
@@ -123,7 +204,7 @@ int action_graph (void) /* {{{ */
   {
     int status;
 
-    status = output_graph (info);
+    status = output_graph (info, inst_get_mtime (inst));
     if (status != 0)
     {
       rrd_info_t *ptr;