#!/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()