]> granicus.if.org Git - sysstat/commitdiff
sadf: Allow user to select interfaces to display
authorSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 13 May 2018 13:58:33 +0000 (15:58 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 13 May 2018 14:04:08 +0000 (16:04 +0200)
Add new option "--iface=<iface_list>". It has the same meaning as for
sar. This may be especially useful for SVG output for which it is
difficult to "grep" a particular device. Using this new option makes
it possible for the user to draw graphs only for the desired
interface(s) and not for all of them.

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
json_stats.c
raw_stats.c
rndr_stats.c
sadf.c
svg_stats.c
xml_stats.c

index 94a97b75df689bbade94d94a20cd222d39ffd4c9..412f8505a86e05fdee407c8ad1794b1ce2e8b93d 100644 (file)
@@ -37,6 +37,8 @@
 
 extern unsigned int flags;
 extern unsigned int dm_major;
+extern struct sa_dlist *st_dev_list;
+extern int dlist_idx;
 
 /*
  ***************************************************************************
@@ -823,6 +825,14 @@ __print_funct_t json_print_net_dev_stats(struct activity *a, int curr, int tab,
 
                sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, sndc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                j = check_net_dev_reg(a, curr, !curr, i);
                if (j < 0) {
                        /* This is a newly registered interface. Previous stats are zero */
@@ -904,6 +914,14 @@ __print_funct_t json_print_net_edev_stats(struct activity *a, int curr, int tab,
 
                snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, snedc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                j = check_net_edev_reg(a, curr, !curr, i);
                if (j < 0) {
                        /* This is a newly registered interface. Previous stats are zero */
index 642df5d14a7665b24a7031ef1edace1b5ac262a1..c66752121620a0d61d96e2256194f8a79174d613 100644 (file)
@@ -30,6 +30,8 @@
 
 extern unsigned int flags;
 extern unsigned int dm_major;
+extern struct sa_dlist *st_dev_list;
+extern int dlist_idx;
 
 /*
  ***************************************************************************
@@ -601,6 +603,14 @@ __print_funct_t raw_print_net_dev_stats(struct activity *a, char *timestr, int c
 
                sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, sndc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                printf("%s; %s", timestr, pfield(a->hdr_line, FIRST));
                j = check_net_dev_reg(a, curr, !curr, i);
                if (j < 0) {
@@ -654,6 +664,14 @@ __print_funct_t raw_print_net_edev_stats(struct activity *a, char *timestr, int
 
                snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, snedc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                printf("%s; %s", timestr, pfield(a->hdr_line, FIRST));
                j = check_net_edev_reg(a, curr, !curr, i);
                if (j < 0) {
index fd1c9ad5c1987d74caca255b848dcbcb4702fc3f..38e50e4eb118cf8753460f2b4cc9fd9c1bd0625d 100644 (file)
@@ -39,6 +39,8 @@ char *seps[] =  {"\t", ";"};
 
 extern unsigned int flags;
 extern unsigned int dm_major;
+extern struct sa_dlist *st_dev_list;
+extern int dlist_idx;
 
 /*
  ***************************************************************************
@@ -1186,6 +1188,14 @@ __print_funct_t render_net_dev_stats(struct activity *a, int isdb, char *pre,
 
                sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, sndc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                j = check_net_dev_reg(a, curr, !curr, i);
                if (j < 0) {
                        /* This is a newly registered interface. Previous stats are zero */
@@ -1282,6 +1292,14 @@ __print_funct_t render_net_edev_stats(struct activity *a, int isdb, char *pre,
 
                snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, snedc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                j = check_net_edev_reg(a, curr, !curr, i);
                if (j < 0) {
                        /* This is a newly registered interface. Previous stats are zero */
diff --git a/sadf.c b/sadf.c
index 158a648f5160ce116dfa6b042c7261efd141a738..e54bdbee4c2926c15e5a04fc7eaa789c82d18451 100644 (file)
--- a/sadf.c
+++ b/sadf.c
@@ -77,6 +77,10 @@ struct record_header record_hdr[3];
 struct tstamp tm_start, tm_end;
 char *args[MAX_ARGV_NR];
 
+/* Devices entered on the command line */
+struct sa_dlist *st_dev_list = NULL;
+int dlist_idx = 0;
+
 extern struct activity *act[];
 extern struct report_format *fmt[];
 
@@ -97,7 +101,7 @@ void usage(char *progname)
        fprintf(stderr, _("Options are:\n"
                          "[ -C ] [ -c | -d | -g | -j | -p | -r | -x ] [ -H ] [ -h ] [ -T | -t | -U ] [ -V ]\n"
                          "[ -O <opts> [,...] ] [ -P { <cpu> [,...] | ALL } ]\n"
-                         "[ -s [ <hh:mm[:ss]> ] ] [ -e [ <hh:mm[:ss]> ] ]\n"
+                         "[ --iface=<iface_list> ] [ -s [ <hh:mm[:ss]> ] ] [ -e [ <hh:mm[:ss]> ] ]\n"
                          "[ -- <sar_options> ]\n"));
        exit(1);
 }
@@ -1421,6 +1425,12 @@ int main(int argc, char **argv)
                        }
                }
 
+               else if (!strncmp(argv[opt], "--iface=", 8)) {
+                       /* Parse devices entered on the command line */
+                       parse_sa_devices(argc, argv, &st_dev_list,
+                                        &dlist_idx, &opt, A_NET_DEV, 8);
+               }
+
                else if (!strcmp(argv[opt], "-s")) {
                        /* Get time start */
                        if (parse_timestamp(argv, &opt, &tm_start, DEF_TMSTART)) {
index 876683fa5232185c0f20d404e977538f2bee7745..7afbd913bf15a9ef5fe163a990798fa6de83b32d 100644 (file)
@@ -39,6 +39,8 @@
 
 extern unsigned int flags;
 extern unsigned int dm_major;
+extern struct sa_dlist *st_dev_list;
+extern int dlist_idx;
 
 unsigned int svg_colors[] = {0x00cc00, 0xff00bf, 0x00ffff, 0xff0000,
                             0xe85f00, 0x0000ff, 0x006020, 0x7030a0,
@@ -2330,6 +2332,14 @@ __print_funct_t svg_print_net_dev_stats(struct activity *a, int curr, int action
                for (i = 0; i < a->nr[curr]; i++) {
                        sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
+                       if (dlist_idx) {
+                               /* A list of devices has been entered on the command line */
+                               if (!search_sa_dlist(st_dev_list, dlist_idx, sndc->interface,
+                                                    A_NET_DEV))
+                                       /* Device not found */
+                                       continue;
+                       }
+
                        /* Look for corresponding graph */
                        for (k = 0; k < svg_p->nr_max; k++) {
                                item_name = *(out + k * 9 + 8);
@@ -2535,6 +2545,14 @@ __print_funct_t svg_print_net_edev_stats(struct activity *a, int curr, int actio
                                /* Empty structure: This is the end of the list */
                                break;
 
+                       if (dlist_idx) {
+                               /* A list of devices has been entered on the command line */
+                               if (!search_sa_dlist(st_dev_list, dlist_idx, snedc->interface,
+                                                    A_NET_DEV))
+                                       /* Device not found */
+                                       continue;
+                       }
+
                        /* Look for corresponding graph */
                        for (k = 0; k < svg_p->nr_max; k++) {
                                item_name = *(out + k * 10 + 9);
index 48e72ee3168c0d2321b7ac7ae5738e985f0d06e6..3d3b9734789905890764fd70d9610b6addeaddcb 100644 (file)
@@ -37,6 +37,8 @@
 
 extern unsigned int flags;
 extern unsigned int dm_major;
+extern struct sa_dlist *st_dev_list;
+extern int dlist_idx;
 
 /*
  ***************************************************************************
@@ -799,6 +801,14 @@ __print_funct_t xml_print_net_dev_stats(struct activity *a, int curr, int tab,
 
                sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, sndc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                j = check_net_dev_reg(a, curr, !curr, i);
                if (j < 0) {
                        /* This is a newly registered interface. Previous stats are zero */
@@ -868,6 +878,14 @@ __print_funct_t xml_print_net_edev_stats(struct activity *a, int curr, int tab,
 
                snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlist_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_dev_list, dlist_idx, snedc->interface,
+                                            A_NET_DEV))
+                               /* Device not found */
+                               continue;
+               }
+
                j = check_net_edev_reg(a, curr, !curr, i);
                if (j < 0) {
                        /* This is a newly registered interface. Previous stats are zero */