Skip to content

Instantly share code, notes, and snippets.

@ludoo
Created September 20, 2012 08:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ludoo/3754644 to your computer and use it in GitHub Desktop.
Save ludoo/3754644 to your computer and use it in GitHub Desktop.
Quick and dirty network load app indicator for ubuntu
#!/usr/bin/env python
# encoding: utf-8
import time
import gtk
import glib
import appindicator
class AppIndicatorExample:
fields = 'interface rbytes rpackets rerrs rdrop rfifo rframe rcompressed rmulticast sbytes spackets serrs sdrop sfifo scolls scarrier scompressed'.split()
def __init__(self):
self.guide = "999.99 MiB/s↓ 999.99 MiB/s↑"
self.ind = appindicator.Indicator ("ludo-indicator-traffic", "", appindicator.CATEGORY_OTHER)
self.ind.set_status (appindicator.STATUS_ACTIVE)
self.ind.set_property('label-guide', self.guide)
#self.ind.set_attention_icon ("indicator-messages-new")
#self.ind.set_icon("distributor-logo")
# create a menu
self.menu = gtk.Menu()
# create items for the menu - labels, checkboxes, radio buttons and images are supported:
item = gtk.MenuItem(label='Quit')
item.show()
item.connect("activate", self.quit)
self.menu.append(item)
self.menu.show()
self.ind.set_menu(self.menu)
self._f = file('/proc/net/dev')
self._down = self._up = self._t = None
data = self._get_data()
self._setlabel()
def _get_data(self):
self._f.seek(0)
data = self._f.read()
t = time.time()
data = [l.strip() for l in data.split("\n") if l.strip()][-1].replace(':', ' ').split()
rbytes = int(data[1])
sbytes = int(data[9])
rdiff = sdiff = 0
if self._down is not None:
rdiff = rbytes - self._down
if self._up is not None:
sdiff = sbytes - self._up
if self._t is not None:
if rdiff:
rdiff = rdiff / (t - self._t) * 1.0
if sdiff:
sdiff = sdiff / (t - self._t) * 1.0
self._down = rbytes
self._up = sbytes
self._t = t
return dict(interface=data[0], rbytes=rbytes, sbytes=sbytes, rdiff=rdiff, sdiff=sdiff)
def _format_traffic(self, value):
if value < 1000:
return "%d B/s" % value
if value < 1000000:
return "%.1f KiB/s" % (value/1000.0)
return "%.2f MiB/s" % (value/1000000.0)
def _setlabel(self):
data = self._get_data()
down = self._format_traffic(data['rdiff'])
up = self._format_traffic(data['sdiff'])
#print len(down), len(up)
label = "↓%s ↑%s" % (down, up)
self.ind.set_label(label.center(28), self.guide)
glib.timeout_add(1000, self._setlabel)
def quit(self, widget, data=None):
gtk.main_quit()
def main():
gtk.main()
return 0
if __name__ == "__main__":
indicator = AppIndicatorExample()
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment