[tor-relays] Tor-Plugin for munin

Damian Johnson atagar at torproject.org
Thu Mar 27 16:57:32 UTC 2014

> Everybody likes graphs, right?
> I tried some of the available munin plugins, but none of those were
> really working anymore. So I sat down and began writing my own, using
> stem, which is really awesome.
> These are really early stages, but it already supports autoconf
> determination and suggestions. If you want to take a look, it is
> hosted on github[1].
> At the moment it supports a connection graph, getting its data from
> orconn-status. More graphs are possible, but not yet implemented.
> Ideas are welcome.

Neat, thanks Martin! Added munin-tor to our examples...


Few quick thoughts about the Stem bits...

> with Controller.from_port(port=port) as controller:
>   controller.authenticate()
>   if controller.is_authenticated():
>     print('yes')
>   else:
>     print('no (Authentication failed)')

The is_authenticated() is unnecessary. The authenticate() call will
raise an AuthenticationFailure if unsuccessful...


> response = controller.get_info('orconn-status')

You might want to do the following instead if you'd rather not risk

response = controller.get_info('orconn-status', None)

if response is None:

> states = {'NEW': 0, 'LAUNCHED': 0, 'CONNECTED': 0, 'FAILED': 0, 'CLOSED': 0}

Up to you but you could also use Stem's ORStatus enum.

>>> import stem
>>> dict((state, 0) for state in stem.ORStatus)
{'NEW': 0, 'CONNECTED': 0, 'CLOSED': 0, 'LAUNCHED': 0, 'FAILED': 0}

> response = controller.get_info('traffic/read')
> print('read.value {}'.format(response))
> response = controller.get_info('traffic/written')
> print('written.value {}'.format(response))

Again, this could potentially raise exceptions unless you provide
get_info() a default value.

Cheers! -Damian

More information about the tor-relays mailing list