]> granicus.if.org Git - sysstat/commitdiff
sadf: SVG: Don't insert id tag if activity not displayed
authorSebastien GODARD <sysstat@users.noreply.github.com>
Fri, 6 Jul 2018 12:15:51 +0000 (14:15 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Fri, 6 Jul 2018 12:15:51 +0000 (14:15 +0200)
When using both "showtoc" and "skipempty" options, e.g.:

$ sadf -g -O showtoc,skipempty -- -A > output.svg

clicking on the link pointing at an activity with no graphs displayed
(because all its statistics were zero) would move to the first
following graph... which is not the graph corresponding to the link!
This was because even if the graphs don't get displayed, sadf inserted
the id tag in the SVG file, e.g.:

<g id="g34-0" transform="translate(0,7870)">
</g>
<g id="g8-0" transform="translate(0,7870)">
<rect x="0" y="0" height="300" width="1050"/>

In the example above, clicking on the link to display graph whose id is
"g34-0" would display graph with id "g8-0" instead.

This patch fixes the problem.

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
svg_stats.c

index 12de1734db92fd062f1d605c75e85ff8a1db6dfb..086a6f401c9d3548cd9c48fb4309c916c7316c68 100644 (file)
@@ -868,20 +868,13 @@ void draw_activity_graphs(int g_nr, int g_type[], char *title[], char *g_title[]
                          unsigned int id, unsigned int xid)
 {
        char *out_p;
-       int i, j, dp, pos = 0, views_nr = 0;
+       int i, j, dp, pos = 0, views_nr = 0, displayed = FALSE;
        int v_gridnr, xv, yv;
        unsigned int asfactor[16];
        long int xpos;
        double lmax, xfactor, yfactor, ypos, gmin, gmax;
        char val[32], cur_date[TIMESTAMP_LEN];
 
-       /* Translate to proper position for current activity */
-       printf("<g id=\"g%d-%d\" transform=\"translate(0,%d)\">\n",
-              id, xid,
-              SVG_H_YSIZE +
-              SVG_C_YSIZE * (DISPLAY_TOC(flags) ? svg_p->nr_act_dispd : 0) +
-              SVG_T_YSIZE * svg_p->graph_no);
-
        /* For each view which is part of current activity */
        for (i = 0; i < g_nr; i++) {
 
@@ -897,6 +890,16 @@ void draw_activity_graphs(int g_nr, int g_type[], char *title[], char *g_title[]
                if (skip_void && ((*(spmin + pos) == DBL_MAX) || (*(spmax + pos) == -DBL_MIN)))
                        continue;
 
+               if (!displayed) {
+                       /* Translate to proper position for current activity */
+                       printf("<g id=\"g%d-%d\" transform=\"translate(0,%d)\">\n",
+                              id, xid,
+                              SVG_H_YSIZE +
+                              SVG_C_YSIZE * (DISPLAY_TOC(flags) ? svg_p->nr_act_dispd : 0) +
+                              SVG_T_YSIZE * svg_p->graph_no);
+                       displayed = TRUE;
+               }
+
                /* Increment number of views actually displayed */
                views_nr++;
 
@@ -1052,7 +1055,9 @@ void draw_activity_graphs(int g_nr, int g_type[], char *title[], char *g_title[]
                printf("</g>\n");
                pos += group[i];
        }
-       printf("</g>\n");
+       if (displayed) {
+               printf("</g>\n");
+       }
 
        /* For next row of views */
        (svg_p->graph_no) += PACK_VIEWS(flags) ? 1 : views_nr;