]> git.itanic.dy.fi Git - rrdd/blob - rrdtool.c
Collect all rrdtool handling in one file
[rrdd] / rrdtool.c
1 #include <time.h>
2
3 #include "rrdtool.h"
4 #include "process.h"
5
6 #define MAX_ARGS        512
7 #define ARGSTR_LEN      32768
8
9 #define print(fmt, arg...) \
10         args[argcnt] = argstr + idx;                    \
11         idx += sprintf(argstr + idx, fmt, ##arg);       \
12         argcnt++;                                       \
13         argstr[++idx] = 0
14
15 int rrdtool_draw_image(struct rrd_image *image)
16 {
17         char cmd[] = "/usr/bin/rrdtool";
18 //      char cmd[] = "echo";
19         char *args[512], argstr[ARGSTR_LEN];
20         int idx = 0, argcnt = 0, i,j;
21         char timestamp[256];
22         char tmp[256];
23         time_t t = time(0);
24
25         strftime(tmp, 256, "%d.%m.%Y %T (%Z) ", localtime(&t));
26         for (i = 0, j = 0; j < 256;) {
27                 if (tmp[i] == ':') {
28                         timestamp[j++] = '\\';
29                 }
30                 timestamp[j++] = tmp[i++];
31                 if (!tmp[i])
32                         break;
33         }
34         timestamp[j] = 0;
35
36
37         print(" ");
38         print("graph");
39         print("%s", image->image_filename);
40
41         print("--start");
42         print("%s", image->timestart);
43         print("--end");
44         print("%s", image->timeend);
45         print("--width");
46         print("%d", image->width);
47         print("--height");
48         print("%d", image->height);
49         print("--imgformat");
50         print("%s", image->imageformat);
51
52         for (i = 0; image->options[i]; i++) {
53                 print("%s", image->options[i]);
54         }
55
56         for (i = 0; image->text[i]; i++) {
57                 args[argcnt++] = image->text[i];
58         }
59
60         print("COMMENT:Last update %s\\c", timestamp);
61
62         args[argcnt] = 0;
63
64         run(cmd, args);
65
66         return 0;
67 }
68
69 int rrdtool_draw_images(struct rrd_image **image)
70 {
71         int i;
72         for (i = 0; image[i]; i++)
73                 rrdtool_draw_image(image[i]);
74
75         return 0;
76 }
77
78 int rrdtool_update_data(struct rrd_database *rrd)
79 {
80         char data[1024];
81         char cmd[] = "/usr/bin/rrdtool";
82 //      char cmd[] = "echo";
83         char *cmdline[] = {
84                 "",
85                 "update",
86                 rrd->filename,
87                 data,
88                 0
89         };
90         int l;
91
92         rrd->last_update = time(0);
93         if (do_fork())
94                 return 0;
95
96         l = sprintf(data, "N:");
97
98         if (rrd->parse) {
99                 rrd->parse(data + l);
100                 run(cmd, cmdline);
101         }
102
103         if (rrd->images)
104                 rrdtool_draw_images(rrd->images);
105
106         while (harvest_zombies(0));
107         exit(0);
108 }