summaryrefslogtreecommitdiff
path: root/flowtop.c
diff options
context:
space:
mode:
authorVadim Kochan <vadim4j@gmail.com>2015-07-13 23:03:09 +0300
committerTobias Klauser <tklauser@distanz.ch>2015-07-17 12:03:44 +0200
commite388315a03bcec355abc7bae4e0467e9e453284b (patch)
treef0f2d295782e2d306074a9355823273fa88b922d /flowtop.c
parent246868dd98b913ff6c989216a49d395305c13da6 (diff)
flowtop: Show flow bytes in human readable format
Print flow bytes amount in human readable format units (G,M,K). Signed-off-by: Vadim Kochan <vadim4j@gmail.com> [tklauser: Make bandw2str static, change arg type, formatting] Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'flowtop.c')
-rw-r--r--flowtop.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/flowtop.c b/flowtop.c
index 083d16b..a6f8fc1 100644
--- a/flowtop.c
+++ b/flowtop.c
@@ -806,6 +806,20 @@ static uint16_t presenter_get_port(uint16_t src, uint16_t dst, int tcp)
}
}
+static char *bandw2str(double bytes, char *buf, size_t len)
+{
+ if (bytes > 1000000000.)
+ snprintf(buf, len, "%.1fG", bytes / 1000000000.);
+ if (bytes > 1000000.)
+ snprintf(buf, len, "%.1fM", bytes / 1000000.);
+ else if (bytes > 1000.)
+ snprintf(buf, len, "%.1fK", bytes / 1000.);
+ else
+ snprintf(buf, len, "%g", bytes);
+
+ return buf;
+}
+
static void presenter_screen_do_line(WINDOW *screen, struct flow_entry *n,
unsigned int *line)
{
@@ -870,9 +884,13 @@ static void presenter_screen_do_line(WINDOW *screen, struct flow_entry *n,
printw(" ->");
/* Number packets, bytes */
- if (n->counter_pkts > 0 && n->counter_bytes > 0)
- printw(" (%"PRIu64" pkts, %"PRIu64" bytes) ->",
- n->counter_pkts, n->counter_bytes);
+ if (n->counter_pkts > 0 && n->counter_bytes > 0) {
+ char bytes_str[64];
+
+ printw(" (%"PRIu64" pkts, %s bytes) ->", n->counter_pkts,
+ bandw2str(n->counter_bytes, bytes_str,
+ sizeof(bytes_str) - 1));
+ }
/* Show source information: reverse DNS, port, country, city */
if (show_src) {