[systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units)

Charles Duffy charles at dyfis.net
Fri May 22 17:09:10 PDT 2015


From: Charles Duffy <chaduffy at cisco.com>

---
 src/cgtop/cgtop.c | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
index a390cf3..2849a1d 100644
--- a/src/cgtop/cgtop.c
+++ b/src/cgtop/cgtop.c
@@ -62,6 +62,7 @@ typedef struct Group {
 static unsigned arg_depth = 3;
 static unsigned arg_iterations = 0;
 static bool arg_batch = false;
+static bool arg_raw = false;
 static usec_t arg_delay = 1*USEC_PER_SEC;
 
 static enum {
@@ -96,6 +97,16 @@ static void group_hashmap_free(Hashmap *h) {
         hashmap_free(h);
 }
 
+static const char *cond_format_bytes(char *buf, size_t l, off_t t, bool raw, bool is_valid) {
+        if (!is_valid)
+                return "-";
+        if (raw) {
+                snprintf(buf, l, "%zd", t);
+                return buf;
+        }
+        return format_bytes(buf, l, t);
+}
+
 static int process(const char *controller, const char *path, Hashmap *a, Hashmap *b, unsigned iteration) {
         Group *g;
         int r;
@@ -532,18 +543,9 @@ static int display(Hashmap *a) {
                 } else
                         printf(" %*s", maxtcpu, format_timespan(buffer, sizeof(buffer), (nsec_t) (g->cpu_usage / NSEC_PER_USEC), 0));
 
-                if (g->memory_valid)
-                        printf(" %8s", format_bytes(buffer, sizeof(buffer), g->memory));
-                else
-                        fputs("        -", stdout);
-
-                if (g->io_valid) {
-                        printf(" %8s",
-                               format_bytes(buffer, sizeof(buffer), g->io_input_bps));
-                        printf(" %8s",
-                               format_bytes(buffer, sizeof(buffer), g->io_output_bps));
-                } else
-                        fputs("        -        -", stdout);
+                printf(" %8s", cond_format_bytes(buffer, sizeof(buffer), g->memory, arg_raw, g->memory_valid));
+                printf(" %8s", cond_format_bytes(buffer, sizeof(buffer), g->io_input_bps, arg_raw, g->io_valid));
+                printf(" %8s", cond_format_bytes(buffer, sizeof(buffer), g->io_output_bps, arg_raw, g->io_valid));
 
                 putchar('\n');
         }
@@ -561,6 +563,7 @@ static void help(void) {
                "  -c                  Order by CPU load\n"
                "  -m                  Order by memory load\n"
                "  -i                  Order by IO load\n"
+               "  -r                  Provide raw (not human-readable) numbers\n"
                "     --cpu[=TYPE]     Show CPU usage as time or percentage (default)\n"
                "  -d --delay=DELAY    Delay between updates\n"
                "  -n --iterations=N   Run for N iterations before exiting\n"
@@ -583,6 +586,7 @@ static int parse_argv(int argc, char *argv[]) {
                 { "delay",      required_argument, NULL, 'd'         },
                 { "iterations", required_argument, NULL, 'n'         },
                 { "batch",      no_argument,       NULL, 'b'         },
+                { "raw",        no_argument,       NULL, 'r'         },
                 { "depth",      required_argument, NULL, ARG_DEPTH   },
                 { "cpu",        optional_argument, NULL, ARG_CPU_TYPE},
                 {}
@@ -594,7 +598,7 @@ static int parse_argv(int argc, char *argv[]) {
         assert(argc >= 1);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "hptcmin:bd:", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "hptcmin:brd:", options, NULL)) >= 0)
 
                 switch (c) {
 
@@ -649,6 +653,10 @@ static int parse_argv(int argc, char *argv[]) {
                         arg_batch = true;
                         break;
 
+                case 'r':
+                        arg_raw = true;
+                        break;
+
                 case 'p':
                         arg_order = ORDER_PATH;
                         break;
-- 
2.0.0



More information about the systemd-devel mailing list