diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2015-07-13 23:03:09 +0300 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2015-07-17 12:03:44 +0200 |
commit | e388315a03bcec355abc7bae4e0467e9e453284b (patch) | |
tree | f0f2d295782e2d306074a9355823273fa88b922d | |
parent | 246868dd98b913ff6c989216a49d395305c13da6 (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>
-rw-r--r-- | flowtop.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -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) { |