[Iftop-users] [PATCH] Add colored output to iftop

David Heidelberger david.heidelberger at ixit.cz
Mon, 24 Mar 2014 15:14:50 +0100


--=_85bf27ff67a895e7b32504088ae6551a
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=UTF-8;
 format=flowed

Oh, try "patch -p1 < file" with attached file.

Look like email client damaged some spaces or something.
============================================

Add colored output to iftop.

Based on https://github.com/srix/iftopcolor

Signed-off-by: David Heidelberger <david.heidelberger@ixit.cz>
---
diff -Naur a/ui.c b/ui.c
--- a/ui.c	2014-01-08 14:00:48.776905827 +0100
+++ b/ui.c	2014-01-08 14:07:51.064903944 +0100
@@ -51,6 +51,9 @@
  "\n"\
  "iftop, version " IFTOP_VERSION

+#define COLOR_SENT 1
+#define COLOR_RECV 2
+#define COLOR_BOTH 3

  extern hash_type* history;
  extern int history_pos;
@@ -199,12 +202,13 @@
      }
  }

-void draw_bar(float n, int y) {
+void draw_bar(float n, int y, short colorpair) {
      int L;
+    colorpair = has_colors() ? colorpair : 0; /* set 0 if terminal is 
not color capable*/
      mvchgat(y, 0, -1, A_NORMAL, 0, NULL);
      L = get_bar_length(8 * n);
      if (L > 0)
-        mvchgat(y, 0, L + 1, A_REVERSE, 0, NULL);
+        mvchgat(y, 0, L + 1, A_REVERSE, colorpair, NULL);
  }

  void draw_line_totals(int y, host_pair_line* line, option_linedisplay_t 
linedisplay) {
@@ -219,17 +223,17 @@
      if(options.showbars) {
        switch(linedisplay) {
          case OPTION_LINEDISPLAY_TWO_LINE:
-          draw_bar(line->sent[options.bar_interval],y);
-          draw_bar(line->recv[options.bar_interval],y+1);
+          draw_bar(line->sent[options.bar_interval],y,  COLOR_SENT);
+          draw_bar(line->recv[options.bar_interval],y+1, COLOR_RECV);
            break;
          case OPTION_LINEDISPLAY_ONE_LINE_SENT:
-          draw_bar(line->sent[options.bar_interval],y);
+          draw_bar(line->sent[options.bar_interval],y,COLOR_SENT);
            break;
          case OPTION_LINEDISPLAY_ONE_LINE_RECV:
-          draw_bar(line->recv[options.bar_interval],y);
+          draw_bar(line->recv[options.bar_interval],y,COLOR_RECV);
            break;
          case OPTION_LINEDISPLAY_ONE_LINE_BOTH:
-          draw_bar(line->recv[options.bar_interval] + 
line->sent[options.bar_interval],y);
+          draw_bar(line->recv[options.bar_interval] + 
line->sent[options.bar_interval],y, COLOR_BOTH);
            break;
        }
      }
@@ -428,6 +432,13 @@

  void ui_curses_init() {
      (void) initscr();      /* initialize the curses library */
+    if (has_colors()) {
+	start_color();
+	use_default_colors();
+	init_pair(COLOR_RECV, COLOR_GREEN, -1);
+	init_pair(COLOR_SENT, COLOR_BLUE, -1);
+	init_pair(COLOR_BOTH, COLOR_MAGENTA, -1);
+    }
      keypad(stdscr, TRUE);  /* enable keyboard mapping */
      (void) nonl();         /* tell curses not to do NL->CR/NL on output 
*/
      (void) cbreak();       /* take input chars one at a time, no wait 
for \n */
---


Dne 2014-03-24 13:54, James Lay napsal:

> On Wed, 2014-03-19 at 18:05 +0100, David Heidelberger wrote:
> 
>> Add colored output to iftop.
>> 
>> Based on https://github.com/srix/iftopcolor [1]
>> 
>> Signed-off-by: David Heidelberger <david.heidelberger@ixit.cz>
>> ---
>> diff -Naur a/ui.c b/ui.c
>> --- a/ui.c 2014-01-08 14:00:48.776905827 +0100
>> +++ b/ui.c 2014-01-08 14:07:51.064903944 +0100
>> @@ -51,6 +51,9 @@
>> "n"
>> "iftop, version " IFTOP_VERSION
>> 
>> +#define COLOR_SENT 1
>> +#define COLOR_RECV 2
>> +#define COLOR_BOTH 3
>> 
>> extern hash_type* history;
>> extern int history_pos;
>> @@ -199,12 +202,13 @@
>> }
>> }
>> 
>> -void draw_bar(float n, int y) {
>> +void draw_bar(float n, int y, short colorpair) {
>> int L;
>> + colorpair = has_colors() ? colorpair : 0; /* set 0 if terminal is
>> not color capable*/
>> mvchgat(y, 0, -1, A_NORMAL, 0, NULL);
>> L = get_bar_length(8 * n);
>> if (L > 0)
>> - mvchgat(y, 0, L + 1, A_REVERSE, 0, NULL);
>> + mvchgat(y, 0, L + 1, A_REVERSE, colorpair, NULL);
>> }
>> 
>> void draw_line_totals(int y, host_pair_line* line, 
>> option_linedisplay_t
>> linedisplay) {
>> @@ -219,17 +223,17 @@
>> if(options.showbars) {
>> switch(linedisplay) {
>> case OPTION_LINEDISPLAY_TWO_LINE:
>> - draw_bar(line->sent[options.bar_interval],y);
>> - draw_bar(line->recv[options.bar_interval],y+1);
>> + draw_bar(line->sent[options.bar_interval],y, COLOR_SENT);
>> + draw_bar(line->recv[options.bar_interval],y+1, COLOR_RECV);
>> break;
>> case OPTION_LINEDISPLAY_ONE_LINE_SENT:
>> - draw_bar(line->sent[options.bar_interval],y);
>> + draw_bar(line->sent[options.bar_interval],y,COLOR_SENT);
>> break;
>> case OPTION_LINEDISPLAY_ONE_LINE_RECV:
>> - draw_bar(line->recv[options.bar_interval],y);
>> + draw_bar(line->recv[options.bar_interval],y,COLOR_RECV);
>> break;
>> case OPTION_LINEDISPLAY_ONE_LINE_BOTH:
>> - draw_bar(line->recv[options.bar_interval] +
>> line->sent[options.bar_interval],y);
>> + draw_bar(line->recv[options.bar_interval] +
>> line->sent[options.bar_interval],y, COLOR_BOTH);
>> break;
>> }
>> }
>> @@ -428,6 +432,13 @@
>> 
>> void ui_curses_init() {
>> (void) initscr(); /* initialize the curses library */
>> + if (has_colors()) {
>> + start_color();
>> + use_default_colors();
>> + init_pair(COLOR_RECV, COLOR_GREEN, -1);
>> + init_pair(COLOR_SENT, COLOR_BLUE, -1);
>> + init_pair(COLOR_BOTH, COLOR_MAGENTA, -1);
>> + }
>> keypad(stdscr, TRUE); /* enable keyboard mapping */
>> (void) nonl(); /* tell curses not to do NL->CR/NL on output
>> */
>> (void) cbreak(); /* take input chars one at a time, no wait
>> for n */
>> 
>> _______________________________________________
>> iftop-users mailing list
>> iftop-users@lists.beasts.org
>> http://lists.beasts.org/mailman/listinfo/iftop-users [2]
> 
> I couldn't get this to apply to either 0.17 or 1.0pre4...unless I'm 
> doing something radically wrong. Download, untar and:
> 
> patch -p0 < patch.diff
> 
> Yes? Thank you...this will be cool when I get it working.
> 
> James


Links:
------
[1] https://github.com/srix/iftopcolor
[2] http://lists.beasts.org/mailman/listinfo/iftop-users
--=_85bf27ff67a895e7b32504088ae6551a
Content-Transfer-Encoding: base64
Content-Type: text/x-diff;
 name=iftop-1.0_pre3-colors.patch
Content-Disposition: attachment;
 filename=iftop-1.0_pre3-colors.patch;
 size=2541

QWRkIGNvbG9yZWQgb3V0cHV0IHRvIGlmdG9wLgoKQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29t
L3NyaXgvaWZ0b3Bjb2xvcgoKU2lnbmVkLW9mZi1ieTogRGF2aWQgSGVpZGVsYmVyZ2VyIDxkYXZp
ZC5oZWlkZWxiZXJnZXJAaXhpdC5jej4KLS0tCmRpZmYgLU5hdXIgYS91aS5jIGIvdWkuYwotLS0g
YS91aS5jCTIwMTQtMDEtMDggMTQ6MDA6NDguNzc2OTA1ODI3ICswMTAwCisrKyBiL3VpLmMJMjAx
NC0wMS0wOCAxNDowNzo1MS4wNjQ5MDM5NDQgKzAxMDAKQEAgLTUxLDYgKzUxLDkgQEAKICJcbiJc
CiAiaWZ0b3AsIHZlcnNpb24gIiBJRlRPUF9WRVJTSU9OIAogCisjZGVmaW5lIENPTE9SX1NFTlQg
MQorI2RlZmluZSBDT0xPUl9SRUNWIDIKKyNkZWZpbmUgQ09MT1JfQk9USCAzCiAKIGV4dGVybiBo
YXNoX3R5cGUqIGhpc3Rvcnk7CiBleHRlcm4gaW50IGhpc3RvcnlfcG9zOwpAQCAtMTk5LDEyICsy
MDIsMTMgQEAKICAgICB9CiB9CiAKLXZvaWQgZHJhd19iYXIoZmxvYXQgbiwgaW50IHkpIHsKK3Zv
aWQgZHJhd19iYXIoZmxvYXQgbiwgaW50IHksIHNob3J0IGNvbG9ycGFpcikgewogICAgIGludCBM
OworICAgIGNvbG9ycGFpciA9IGhhc19jb2xvcnMoKSA/IGNvbG9ycGFpciA6IDA7IC8qIHNldCAw
IGlmIHRlcm1pbmFsIGlzIG5vdCBjb2xvciBjYXBhYmxlKi8KICAgICBtdmNoZ2F0KHksIDAsIC0x
LCBBX05PUk1BTCwgMCwgTlVMTCk7CiAgICAgTCA9IGdldF9iYXJfbGVuZ3RoKDggKiBuKTsKICAg
ICBpZiAoTCA+IDApCi0gICAgICAgIG12Y2hnYXQoeSwgMCwgTCArIDEsIEFfUkVWRVJTRSwgMCwg
TlVMTCk7CisgICAgICAgIG12Y2hnYXQoeSwgMCwgTCArIDEsIEFfUkVWRVJTRSwgY29sb3JwYWly
LCBOVUxMKTsKIH0KIAogdm9pZCBkcmF3X2xpbmVfdG90YWxzKGludCB5LCBob3N0X3BhaXJfbGlu
ZSogbGluZSwgb3B0aW9uX2xpbmVkaXNwbGF5X3QgbGluZWRpc3BsYXkpIHsKQEAgLTIxOSwxNyAr
MjIzLDE3IEBACiAgICAgaWYob3B0aW9ucy5zaG93YmFycykgewogICAgICAgc3dpdGNoKGxpbmVk
aXNwbGF5KSB7CiAgICAgICAgIGNhc2UgT1BUSU9OX0xJTkVESVNQTEFZX1RXT19MSU5FOgotICAg
ICAgICAgIGRyYXdfYmFyKGxpbmUtPnNlbnRbb3B0aW9ucy5iYXJfaW50ZXJ2YWxdLHkpOwotICAg
ICAgICAgIGRyYXdfYmFyKGxpbmUtPnJlY3Zbb3B0aW9ucy5iYXJfaW50ZXJ2YWxdLHkrMSk7Cisg
ICAgICAgICAgZHJhd19iYXIobGluZS0+c2VudFtvcHRpb25zLmJhcl9pbnRlcnZhbF0seSwgIENP
TE9SX1NFTlQpOworICAgICAgICAgIGRyYXdfYmFyKGxpbmUtPnJlY3Zbb3B0aW9ucy5iYXJfaW50
ZXJ2YWxdLHkrMSwgQ09MT1JfUkVDVik7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
T1BUSU9OX0xJTkVESVNQTEFZX09ORV9MSU5FX1NFTlQ6Ci0gICAgICAgICAgZHJhd19iYXIobGlu
ZS0+c2VudFtvcHRpb25zLmJhcl9pbnRlcnZhbF0seSk7CisgICAgICAgICAgZHJhd19iYXIobGlu
ZS0+c2VudFtvcHRpb25zLmJhcl9pbnRlcnZhbF0seSxDT0xPUl9TRU5UKTsKICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBPUFRJT05fTElORURJU1BMQVlfT05FX0xJTkVfUkVDVjoKLSAg
ICAgICAgICBkcmF3X2JhcihsaW5lLT5yZWN2W29wdGlvbnMuYmFyX2ludGVydmFsXSx5KTsKKyAg
ICAgICAgICBkcmF3X2JhcihsaW5lLT5yZWN2W29wdGlvbnMuYmFyX2ludGVydmFsXSx5LENPTE9S
X1JFQ1YpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE9QVElPTl9MSU5FRElTUExB
WV9PTkVfTElORV9CT1RIOgotICAgICAgICAgIGRyYXdfYmFyKGxpbmUtPnJlY3Zbb3B0aW9ucy5i
YXJfaW50ZXJ2YWxdICsgbGluZS0+c2VudFtvcHRpb25zLmJhcl9pbnRlcnZhbF0seSk7CisgICAg
ICAgICAgZHJhd19iYXIobGluZS0+cmVjdltvcHRpb25zLmJhcl9pbnRlcnZhbF0gKyBsaW5lLT5z
ZW50W29wdGlvbnMuYmFyX2ludGVydmFsXSx5LCBDT0xPUl9CT1RIKTsKICAgICAgICAgICBicmVh
azsKICAgICAgIH0KICAgICB9CkBAIC00MjgsNiArNDMyLDEzIEBACiAKIHZvaWQgdWlfY3Vyc2Vz
X2luaXQoKSB7CiAgICAgKHZvaWQpIGluaXRzY3IoKTsgICAgICAvKiBpbml0aWFsaXplIHRoZSBj
dXJzZXMgbGlicmFyeSAqLworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigp
OworCXVzZV9kZWZhdWx0X2NvbG9ycygpOworCWluaXRfcGFpcihDT0xPUl9SRUNWLCBDT0xPUl9H
UkVFTiwgLTEpOworCWluaXRfcGFpcihDT0xPUl9TRU5ULCBDT0xPUl9CTFVFLCAtMSk7CisJaW5p
dF9wYWlyKENPTE9SX0JPVEgsIENPTE9SX01BR0VOVEEsIC0xKTsKKyAgICB9CiAgICAga2V5cGFk
KHN0ZHNjciwgVFJVRSk7ICAvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLwogICAgICh2b2lk
KSBub25sKCk7ICAgICAgICAgLyogdGVsbCBjdXJzZXMgbm90IHRvIGRvIE5MLT5DUi9OTCBvbiBv
dXRwdXQgKi8KICAgICAodm9pZCkgY2JyZWFrKCk7ICAgICAgIC8qIHRha2UgaW5wdXQgY2hhcnMg
b25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8K
--=_85bf27ff67a895e7b32504088ae6551a--