From 0f840699e7e0296d06f527bc1466f70a1a3a8099 Mon Sep 17 00:00:00 2001 From: Sebastien GODARD Date: Sun, 26 Mar 2017 11:46:25 +0200 Subject: [PATCH] SVG: Add new option: "showinfo" This option tells sadf to display additional information (for now, these are the date and the hostname) on each chart. E.g.: sadf -g -O showinfo -- -A > graph.svg Signed-off-by: Sebastien GODARD --- sa.h | 4 ++++ sadf.c | 4 ++++ svg_stats.c | 20 +++++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/sa.h b/sa.h index ddac09a..1e28ad4 100644 --- a/sa.h +++ b/sa.h @@ -107,6 +107,7 @@ #define S_F_UNIT 0x00100000 #define S_F_SVG_HEIGHT 0x00200000 #define S_F_SVG_PACKED 0x00400000 +#define S_F_SVG_SHOW_INFO 0x00800000 #define WANT_SINCE_BOOT(m) (((m) & S_F_SINCE_BOOT) == S_F_SINCE_BOOT) #define WANT_SA_ROTAT(m) (((m) & S_F_SA_ROTAT) == S_F_SA_ROTAT) @@ -129,6 +130,7 @@ #define AUTOSCALE_ON(m) (((m) & S_F_SVG_AUTOSCALE) == S_F_SVG_AUTOSCALE) #define DISPLAY_ONE_DAY(m) (((m) & S_F_SVG_ONE_DAY) == S_F_SVG_ONE_DAY) #define DISPLAY_IDLE(m) (((m) & S_F_SVG_SHOW_IDLE) == S_F_SVG_SHOW_IDLE) +#define DISPLAY_INFO(m) (((m) & S_F_SVG_SHOW_INFO) == S_F_SVG_SHOW_INFO) #define DISPLAY_UNIT(m) (((m) & S_F_UNIT) == S_F_UNIT) #define SET_CANVAS_HEIGHT(m) (((m) & S_F_SVG_HEIGHT) == S_F_SVG_HEIGHT) #define PACK_VIEWS(m) (((m) & S_F_SVG_PACKED) == S_F_SVG_PACKED) @@ -211,6 +213,7 @@ #define K_AUTOSCALE "autoscale" #define K_ONEDAY "oneday" #define K_SHOWIDLE "showidle" +#define K_SHOWINFO "showinfo" #define K_SHOWHINTS "showhints" #define K_HEIGHT "height=" #define K_PACKED "packed" @@ -301,6 +304,7 @@ struct svg_parm { unsigned long ust_time_first; /* Time (in seconds since the epoch) for first sample */ int graph_no; /* Total number of views already displayed */ int restart; /* TRUE if we have just met a RESTART record */ + struct file_header *file_hdr; /* Pointer on file header structure */ }; /* Structure used when displaying SVG header */ diff --git a/sadf.c b/sadf.c index 063293a..781d4cb 100644 --- a/sadf.c +++ b/sadf.c @@ -878,6 +878,7 @@ void display_curr_act_graphs(int ifd, off_t fpos, int *curr, long *cnt, int *eos parm.ust_time_ref = get_time_ref(); parm.ust_time_first = record_hdr[2].ust_time; parm.restart = TRUE; + parm.file_hdr = &file_hdr; *cnt = count; reset_cd = 1; @@ -1534,6 +1535,9 @@ int main(int argc, char **argv) else if (!strcmp(t, K_SHOWIDLE)) { flags |= S_F_SVG_SHOW_IDLE; } + else if (!strcmp(t, K_SHOWINFO)) { + flags |= S_F_SVG_SHOW_INFO; + } else if (!strcmp(t, K_SHOWHINTS)) { flags |= S_F_RAW_SHOW_HINTS; } diff --git a/svg_stats.c b/svg_stats.c index d0d941c..4043f80 100644 --- a/svg_stats.c +++ b/svg_stats.c @@ -809,7 +809,7 @@ void draw_activity_graphs(int g_nr, int g_type[], char *title[], char *g_title[] unsigned int asfactor[16]; long int xpos; double lmax, xfactor, yfactor, ypos, gmin, gmax; - char val[32]; + char val[32], cur_date[TIMESTAMP_LEN]; /* Translate to proper position for current activity */ printf("\n", @@ -891,6 +891,24 @@ void draw_activity_graphs(int g_nr, int g_type[], char *title[], char *g_title[] !dp * 2, *(spmax + pos + j) * asfactor[j]); } + if (DISPLAY_INFO(flags)) { + /* Display additional info (hostname, date) */ + printf("" + "%s\n", + xv + SVG_V_XSIZE - 5, yv + SVG_M_YSIZE + SVG_G_YSIZE, + svg_p->file_hdr->sa_nodename); + + /* Get report date */ + set_report_date(localtime((const time_t *) &(svg_p->file_hdr->sa_ust_time)), + cur_date, sizeof(cur_date)); + printf("" + "%s\n\n", + xv + SVG_V_XSIZE - 5, yv + SVG_M_YSIZE + SVG_G_YSIZE + 14, + cur_date); + } + /* Translate to proper position for current graph within current activity */ printf("\n", xv + SVG_M_XSIZE, yv + SVG_M_YSIZE + SVG_G_YSIZE); -- 2.40.0