]> granicus.if.org Git - sysstat/commitdiff
sar: Allow user to select filesystems to display
authorSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 20 May 2018 14:26:28 +0000 (16:26 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 20 May 2018 14:26:28 +0000 (16:26 +0200)
Add new option "--fs=<fs_list>" to allow the user to specify which
filesystems to display. This option is to be used with option -F.
Sample output:

$ sar -F
Linux 4.4.14-200.fc22.x86_64 (home) 05/20/18 _x86_64_ (8 CPU)

16:15:20  [...] %fsused  %ufsused     Ifree     Iused %Iused FILESYSTEM
16:20:00          51.59     56.75   1673107    248253  12.92 /dev/sda11
16:20:00          14.74     21.56     63602       398   0.62 /dev/sda5
16:20:00           1.87      6.96  19056634    145414   0.76 /dev/sda7
16:20:00          26.54     31.64   6341145     64999   1.01 /dev/sda8
16:20:00           5.31     10.39  19201270       778   0.00 /dev/sda6
[...]

$ sar -F --fs=/dev/sda5,/dev/sda8
Linux 4.4.14-200.fc22.x86_64 (home) 05/20/18 _x86_64_ (8 CPU)

16:15:20  [...] %fsused  %ufsused     Ifree     Iused %Iused FILESYSTEM
16:20:00          14.74     21.56     63602       398   0.62 /dev/sda5
16:20:00          26.54     31.64   6341145     64999   1.01 /dev/sda8
[...]

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

index a30b949e2514be65e2a49691c7e17254445823e1..913d2f81819f067d9f92819ec16d87412557571a 100644 (file)
@@ -43,8 +43,10 @@ extern char timestamp[][TIMESTAMP_LEN];
 extern unsigned long avg_count;
 extern struct sa_dlist *st_iface_list;
 extern struct sa_dlist *st_dev_list;
+extern struct sa_dlist *st_fs_list;
 extern int dlst_iface_idx;
 extern int dlst_dev_idx;
+extern int dlst_fs_idx;
 
 /*
  ***************************************************************************
@@ -2748,6 +2750,14 @@ __print_funct_t stub_print_filesystem_stats(struct activity *a, int prev, int cu
        for (i = 0; i < a->nr[curr]; i++) {
                sfc = (struct stats_filesystem *) ((char *) a->buf[curr] + i * a->msize);
 
+               if (dlst_fs_idx) {
+                       /* A list of devices has been entered on the command line */
+                       if (!search_sa_dlist(st_fs_list, dlst_fs_idx,
+                                            DISPLAY_MOUNT(a->opt_flags) ? sfc->mountp : sfc->fs_name))
+                               /* Device not found */
+                               continue;
+               }
+
                found = FALSE;
                if (DISPLAY_ZERO_OMIT(flags) && !dispavg) {
 
diff --git a/sar.c b/sar.c
index 582f603993612b488b6ad383863bf8d617acd82a..589c6c678438d0baab7361e3f0ff46be098ca1e7 100644 (file)
--- a/sar.c
+++ b/sar.c
@@ -77,8 +77,8 @@ struct record_header record_hdr[3];
 unsigned int id_seq[NR_ACT];
 
 /* Devices entered on the command line */
-struct sa_dlist *st_iface_list = NULL, *st_dev_list = NULL;
-int dlst_iface_idx = 0, dlst_dev_idx = 0;
+struct sa_dlist *st_iface_list = NULL, *st_dev_list = NULL, *st_fs_list = NULL;
+int dlst_iface_idx = 0, dlst_dev_idx = 0, dlst_fs_idx = 0;
 
 struct tm rectime;
 
@@ -124,8 +124,8 @@ void usage(char *progname)
                          "[ -v ] [ -W ] [ -w ] [ -y ] [ -z ]\n"
                          "[ -I { <int_list> | SUM | ALL } ] [ -P { <cpu_list> | ALL } ]\n"
                          "[ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ]\n"
-                         "[ --dec={ 0 | 1 | 2 } ] [ --dev=<dev_list> ] [ --iface=<iface_list> ]\n"
-                         "[ --help ] [ --human ] [ --sadc ]\n"
+                         "[ --dev=<dev_list> ] [ --fs=<fs_list> ] [ --iface=<iface_list> ]\n"
+                         "[ --dec={ 0 | 1 | 2 } ] [ --help ] [ --human ] [ --sadc ]\n"
                          "[ -j { ID | LABEL | PATH | UUID | ... } ]\n"
                          "[ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ]\n"
                          "[ -i <interval> ] [ -s [ <hh:mm[:ss]> ] ] [ -e [ <hh:mm[:ss]> ] ]\n"));
@@ -1282,6 +1282,12 @@ int main(int argc, char **argv)
                                         &dlst_dev_idx, &opt, 6);
                }
 
+               else if (!strncmp(argv[opt], "--fs=", 5)) {
+                       /* Parse devices entered on the command line */
+                       parse_sa_devices(argv[opt], &st_fs_list,
+                                        &dlst_fs_idx, &opt, 5);
+               }
+
                else if (!strncmp(argv[opt], "--iface=", 8)) {
                        /* Parse devices entered on the command line */
                        parse_sa_devices(argv[opt], &st_iface_list,
@@ -1518,12 +1524,6 @@ int main(int argc, char **argv)
                /* Free stuctures and activity bitmaps */
                free_bitmaps(act);
                free_structures(act);
-               if (st_iface_list) {
-                       free(st_iface_list);
-               }
-               if (st_dev_list) {
-                       free(st_dev_list);
-               }
 
                return 0;
        }
@@ -1648,12 +1648,6 @@ int main(int argc, char **argv)
        /* Free structures and activity bitmaps */
        free_bitmaps(act);
        free_structures(act);
-       if (st_iface_list) {
-               free(st_iface_list);
-       }
-       if (st_dev_list) {
-               free(st_dev_list);
-       }
 
        return 0;
 }