#include #include "rrdtool.h" #include "process.h" #define MAX_ARGS 512 #define ARGSTR_LEN 32768 #define print(fmt, arg...) \ args[argcnt] = argstr + idx; \ idx += sprintf(argstr + idx, fmt, ##arg); \ argcnt++; \ argstr[++idx] = 0 int rrdtool_draw_image(struct rrd_image *image) { char cmd[] = "/usr/bin/rrdtool"; // char cmd[] = "echo"; char *args[512], argstr[ARGSTR_LEN]; int idx = 0, argcnt = 0, i,j; char timestamp[256]; char tmp[256]; time_t t = time(0); strftime(tmp, 256, "%d.%m.%Y %T (%Z) ", localtime(&t)); for (i = 0, j = 0; j < 256;) { if (tmp[i] == ':') { timestamp[j++] = '\\'; } timestamp[j++] = tmp[i++]; if (!tmp[i]) break; } timestamp[j] = 0; print(" "); print("graph"); print("%s", image->image_filename); print("--start"); print("%s", image->timestart); print("--end"); print("%s", image->timeend); print("--width"); print("%d", image->width); print("--height"); print("%d", image->height); print("--imgformat"); print("%s", image->imageformat); for (i = 0; image->options[i]; i++) { print("%s", image->options[i]); } for (i = 0; image->text[i]; i++) { args[argcnt++] = image->text[i]; } print("COMMENT:Last update %s\\c", timestamp); args[argcnt] = 0; run(cmd, args); return 0; } int rrdtool_draw_images(struct rrd_image **image) { int i; for (i = 0; image[i]; i++) rrdtool_draw_image(image[i]); return 0; } int rrdtool_update_data(struct rrd_database *rrd) { char data[1024]; char cmd[] = "/usr/bin/rrdtool"; // char cmd[] = "echo"; char *cmdline[] = { "", "update", rrd->filename, data, 0 }; int l; rrd->last_update = time(0); if (do_fork()) return 0; l = sprintf(data, "N:"); if (rrd->parse) { rrd->parse(data + l); run(cmd, cmdline); } if (rrd->images) rrdtool_draw_images(rrd->images); while (harvest_zombies(0)); exit(0); }