From 433b9a89c48e0179d3be941ef3e175590ea13952 Mon Sep 17 00:00:00 2001 From: Tino Reichardt Date: Mon, 13 Mar 2023 23:30:09 +0100 Subject: [PATCH] Colorize zpool iostat output Use a bold header and colorize the space suffixes in iostat by order of magnitude like this: - K is green - M is yellow - G is red - T is lightblue - P is magenta - E is cyan - 0 space is colored gray Reviewed-by: WHR Reviewed-by: Brian Behlendorf Signed-off-by: Ethan Coe-Renner Signed-off-by: Tino Reichardt Closes #14621 Closes #14459 --- cmd/zpool/zpool_main.c | 35 ++++++++++++++++++++++++++++++++++- man/man8/zpool.8 | 2 ++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index 370d6b371a..a0072399f8 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -4205,6 +4205,8 @@ print_iostat_header_impl(iostat_cbdata_t *cb, unsigned int force_column_width, unsigned int namewidth; const char *title; + color_start(ANSI_BOLD); + if (cb->cb_flags & IOS_ANYHISTO_M) { title = histo_to_title[IOS_HISTO_IDX(cb->cb_flags)]; } else if (cb->cb_vdev_names_count) { @@ -4238,6 +4240,8 @@ print_iostat_header_impl(iostat_cbdata_t *cb, unsigned int force_column_width, if (cb->vcdl != NULL) print_cmd_columns(cb->vcdl, 1); + color_end(); + printf("\n"); } @@ -4247,6 +4251,35 @@ print_iostat_header(iostat_cbdata_t *cb) print_iostat_header_impl(cb, 0, NULL); } +/* + * Prints a size string (i.e. 120M) with the suffix ("M") colored + * by order of magnitude. Uses column_size to add padding. + */ +static void +print_stat_color(char *statbuf, unsigned int column_size) +{ + fputs(" ", stdout); + if (*statbuf == '0') { + color_start(ANSI_GRAY); + fputc('0', stdout); + column_size--; + } else { + for (; *statbuf; statbuf++) { + if (*statbuf == 'K') color_start(ANSI_GREEN); + else if (*statbuf == 'M') color_start(ANSI_YELLOW); + else if (*statbuf == 'G') color_start(ANSI_RED); + else if (*statbuf == 'T') color_start(ANSI_BOLD_BLUE); + else if (*statbuf == 'P') color_start(ANSI_MAGENTA); + else if (*statbuf == 'E') color_start(ANSI_CYAN); + fputc(*statbuf, stdout); + if (--column_size <= 0) + break; + } + } + color_end(); + for (; column_size > 0; column_size--) + fputc(' ', stdout); +} /* * Display a single statistic. @@ -4262,7 +4295,7 @@ print_one_stat(uint64_t value, enum zfs_nicenum_format format, if (scripted) printf("\t%s", buf); else - printf(" %*s", column_size, buf); + print_stat_color(buf, column_size); } /* diff --git a/man/man8/zpool.8 b/man/man8/zpool.8 index 192a8e2eac..e5d7c85151 100644 --- a/man/man8/zpool.8 +++ b/man/man8/zpool.8 @@ -433,6 +433,8 @@ to dump core on exit for the purposes of running .It Sy ZFS_COLOR Use ANSI color in .Nm zpool status +and +.Nm zpool iostat output. .It Sy ZPOOL_IMPORT_PATH The search path for devices or files to use with the pool.