From: Timo Kokkonen Date: Tue, 28 Oct 2014 19:16:21 +0000 (+0200) Subject: rrdtool: Add support for post_draw_cmd X-Git-Url: http://git.itanic.dy.fi/?p=rrdd;a=commitdiff_plain;h=7c4aac66fb316cc9c1b54c8211c15123e91f4a6e rrdtool: Add support for post_draw_cmd Just like pre_draw_cmd, post_draw_cmd is a command that gets to be executed after graphs are drawn. This is useful for example transferring generated graphs into final location once rendering is complete. Signed-off-by: Timo Kokkonen --- diff --git a/config.c b/config.c index 68939bd..8ac1b63 100644 --- a/config.c +++ b/config.c @@ -232,6 +232,7 @@ static int parse_database(config_setting_t *rrd, struct rrd_database *db) config_setting_t *list, *str_list; const char *name, *parser = NULL, *filename, **parser_data; const char **pre_draw_cmd; + const char **post_draw_cmd; const char *logfile = NULL, *logfile_timestamp_fmt = NULL; if (!config_setting_lookup_string(rrd, "name", &name)) { @@ -274,6 +275,12 @@ static int parse_database(config_setting_t *rrd, struct rrd_database *db) db->pre_draw_cmd = (char *const *)pre_draw_cmd; } + str_list = config_setting_get_member(rrd, "post_draw_cmd"); + if (str_list) { + read_strings_from_list(str_list, &post_draw_cmd); + db->pre_draw_cmd = (char *const *)post_draw_cmd; + } + config_setting_lookup_string(rrd, "logfile", &logfile); if (logfile) db->logfile = strdup(logfile); diff --git a/rrdtool.c b/rrdtool.c index df9b5c8..909e123 100644 --- a/rrdtool.c +++ b/rrdtool.c @@ -298,6 +298,12 @@ int rrdtool_update_data(struct rrd_database *rrd) rrdtool_draw_images(rrd->images); while (harvest_zombies(0)); + + if (rrd->post_draw_cmd && !strcmp(rrd->post_draw_cmd[0], "shell")) { + pid = run(rrd->post_draw_cmd[1], &rrd->post_draw_cmd[1]); + harvest_zombies(pid); + } + exit(0); } diff --git a/rrdtool.h b/rrdtool.h index 91fab9c..ec8a9d4 100644 --- a/rrdtool.h +++ b/rrdtool.h @@ -41,6 +41,7 @@ struct rrd_database { const char **parser_data; /* data to be fed to the parser */ char *const *pre_draw_cmd; /* Command to execute prior drawing images*/ + char *const *post_draw_cmd; /* ..and after drawing images */ struct rrd_image **images; /* Images to draw */