#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;
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;
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);
array_append (args, "--imgformat");
array_append (args, "PNG");
+ get_time_args (args);
+
status = inst_get_rrdargs (cfg, inst, args);
if (status != 0)
{
{
int status;
- status = output_graph (info);
+ status = output_graph (info, inst_get_mtime (inst));
if (status != 0)
{
rrd_info_t *ptr;