root / plugins / network / transmission @ dd4afac8
Historique | Voir | Annoter | Télécharger (4,73 ko)
| 1 | d5be273c | Paul Fariello | #!/usr/bin/env python2.6 |
|---|---|---|---|
| 2 | b75c8e25 | Thomas Leveil | # -*- encoding: iso-8859-1 -*- |
| 3 | """ |
||
| 4 | : << =cut |
||
| 5 | |||
| 6 | =head1 NAME |
||
| 7 | |||
| 8 | transmission - Munin plugin to monitor Transmission bittorrent daemon |
||
| 9 | |||
| 10 | =head1 DESCRIPTION |
||
| 11 | |||
| 12 | This plugin implements the multigraph protocol and provides the following graphs |
||
| 13 | transmission_throughput - monitor traffic volumes of Transmission torrents |
||
| 14 | transmission_activity - plugin to monitor traffic speed of Transmission torrents |
||
| 15 | |||
| 16 | 1cda52e5 | Thomas L?veil | This plugin requires python and the transmissionrpc python module. |
| 17 | See http://pypi.python.org/pypi/transmissionrpc/ |
||
| 18 | |||
| 19 | b75c8e25 | Thomas Leveil | =head1 CONFIGURATION |
| 20 | |||
| 21 | [transmission] |
||
| 22 | env.host 10.0.0.1 |
||
| 23 | env.port 9093 |
||
| 24 | env.user transmission |
||
| 25 | env.pass secret |
||
| 26 | |||
| 27 | [transmission_*] |
||
| 28 | env.host 10.0.0.1 |
||
| 29 | env.port 9093 |
||
| 30 | env.user transmission |
||
| 31 | env.pass secret |
||
| 32 | |||
| 33 | |||
| 34 | =head1 AUTHOR |
||
| 35 | |||
| 36 | Thomas L?veil |
||
| 37 | |||
| 38 | =head1 LICENSE |
||
| 39 | |||
| 40 | Permission to use, copy, and modify this software with or without fee |
||
| 41 | is hereby granted, provided that this entire notice is included in |
||
| 42 | all source code copies of any software which is or includes a copy or |
||
| 43 | modification of this software. |
||
| 44 | |||
| 45 | THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR |
||
| 46 | IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY |
||
| 47 | REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE |
||
| 48 | MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR |
||
| 49 | PURPOSE. |
||
| 50 | |||
| 51 | =head1 CONTRIBUTE |
||
| 52 | |||
| 53 | 1cda52e5 | Thomas L?veil | find this plugin on github at http://github.com/VolatileMesh/munin-plugins |
| 54 | b75c8e25 | Thomas Leveil | |
| 55 | =head1 MAGIC MARKERS |
||
| 56 | |||
| 57 | #%# family=auto contrib |
||
| 58 | #%# capabilities=autoconf |
||
| 59 | |||
| 60 | =head1 VERSION |
||
| 61 | |||
| 62 | 078fb31f | Thomas L?veil | 1.1 |
| 63 | b75c8e25 | Thomas Leveil | |
| 64 | =head1 CHANGELOG |
||
| 65 | |||
| 66 | =head2 1.0 - 2010/11/12 |
||
| 67 | |||
| 68 | first release |
||
| 69 | 078fb31f | Thomas L?veil | |
| 70 | =head2 1.1 - 2011/05/29 |
||
| 71 | |||
| 72 | fix transmission error handling |
||
| 73 | b75c8e25 | Thomas Leveil | |
| 74 | =cut |
||
| 75 | """ |
||
| 76 | 078fb31f | Thomas L?veil | __version__ = '1.1' |
| 77 | b75c8e25 | Thomas Leveil | |
| 78 | |||
| 79 | import os, sys |
||
| 80 | from string import Template |
||
| 81 | |||
| 82 | plugin_name=list(os.path.split(sys.argv[0]))[1] |
||
| 83 | host = os.getenv('host','localhost')
|
||
| 84 | port = os.getenv('port',9091)
|
||
| 85 | user = os.getenv('user')
|
||
| 86 | passwd = os.getenv('pass')
|
||
| 87 | |||
| 88 | |||
| 89 | def config(): |
||
| 90 | conf = Template("""multigraph ${plugin_name}_throughput
|
||
| 91 | graph_title Transmission throughput for ${host}
|
||
| 92 | graph_vlabel bytes/${graph_period} in (-) / out (+)
|
||
| 93 | graph_args --base 1000 |
||
| 94 | graph_category network |
||
| 95 | graph_info This graph shows the throughput for Transmission torrents |
||
| 96 | down.label throughput |
||
| 97 | down.type COUNTER |
||
| 98 | down.draw LINE1 |
||
| 99 | down.min 0 |
||
| 100 | 1cda52e5 | Thomas L?veil | down.graph no |
| 101 | up.label sent |
||
| 102 | up.negative down |
||
| 103 | up.type COUNTER |
||
| 104 | up.draw LINE1 |
||
| 105 | up.min 0 |
||
| 106 | b75c8e25 | Thomas Leveil | |
| 107 | multigraph ${plugin_name}_activity
|
||
| 108 | graph_title Transmission activity for ${host}
|
||
| 109 | graph_vlabel torrents |
||
| 110 | graph_args --base 1000 |
||
| 111 | graph_category network |
||
| 112 | graph_info This graph shows the number of Transmission torrents |
||
| 113 | total.label total |
||
| 114 | total.draw AREA |
||
| 115 | total.min 0 |
||
| 116 | total.colour AFE3FF |
||
| 117 | active.label active |
||
| 118 | active.draw AREA |
||
| 119 | active.min 0 |
||
| 120 | active.colour 77FF6F |
||
| 121 | paused.label paused |
||
| 122 | paused.draw LINE1 |
||
| 123 | paused.min 0 |
||
| 124 | paused.colour 8F8F8F |
||
| 125 | """) |
||
| 126 | print conf.safe_substitute(plugin_name=plugin_name, host=host) |
||
| 127 | sys.exit(0) |
||
| 128 | |||
| 129 | |||
| 130 | def autoconf(): |
||
| 131 | try: |
||
| 132 | import transmissionrpc |
||
| 133 | print('yes')
|
||
| 134 | except ImportError: |
||
| 135 | print 'no python module \'transmissionrpc\' missing' |
||
| 136 | |||
| 137 | |||
| 138 | |||
| 139 | def fetch(): |
||
| 140 | import transmissionrpc |
||
| 141 | |||
| 142 | try: |
||
| 143 | client = transmissionrpc.Client(host, port=port, user=user, password=passwd) |
||
| 144 | 078fb31f | Thomas L?veil | except transmissionrpc.TransmissionError, err: |
| 145 | b75c8e25 | Thomas Leveil | print err |
| 146 | sys.exit(1) |
||
| 147 | |||
| 148 | stats = client.session_stats(10) |
||
| 149 | print_values_throughput(stats) |
||
| 150 | print_values_activity(stats) |
||
| 151 | |||
| 152 | |||
| 153 | def print_values_activity(stats): |
||
| 154 | print "multigraph {plugin_name}_activity".format(plugin_name=plugin_name)
|
||
| 155 | try: |
||
| 156 | print "total.value %s" % stats.torrentCount |
||
| 157 | except: |
||
| 158 | print "total.value U" |
||
| 159 | |||
| 160 | try: |
||
| 161 | print "active.value %s" % stats.activeTorrentCount |
||
| 162 | except: |
||
| 163 | print "active.value U" |
||
| 164 | |||
| 165 | try: |
||
| 166 | print "paused.value %s" % stats.pausedTorrentCount |
||
| 167 | except: |
||
| 168 | print "paused.value U" |
||
| 169 | |||
| 170 | |||
| 171 | def print_values_throughput(stats): |
||
| 172 | print "multigraph {plugin_name}_throughput".format(plugin_name=plugin_name)
|
||
| 173 | try: |
||
| 174 | print "down.value %s" % stats.cumulative_stats['downloadedBytes'] |
||
| 175 | except: |
||
| 176 | print "down.value U" |
||
| 177 | |||
| 178 | try: |
||
| 179 | print "up.value %s" % stats.cumulative_stats['uploadedBytes'] |
||
| 180 | except: |
||
| 181 | print "up.value U" |
||
| 182 | |||
| 183 | |||
| 184 | |||
| 185 | def dumpstats(): |
||
| 186 | import transmissionrpc |
||
| 187 | try: |
||
| 188 | client = transmissionrpc.Client(host, port=port, user=user, password=passwd) |
||
| 189 | except transmissionrpc.transmission.TransmissionError, err: |
||
| 190 | print err |
||
| 191 | sys.exit(1) |
||
| 192 | stats = client.session_stats(10) |
||
| 193 | print stats |
||
| 194 | |||
| 195 | |||
| 196 | if __name__ == '__main__': |
||
| 197 | if len(sys.argv)>1 : |
||
| 198 | if sys.argv[1]=="dumpstats" : |
||
| 199 | dumpstats() |
||
| 200 | elif sys.argv[1]=="config" : |
||
| 201 | config() |
||
| 202 | elif sys.argv[1]=="autoconf" : |
||
| 203 | autoconf() |
||
| 204 | d5be273c | Paul Fariello | elif sys.argv[1]!="": |
| 205 | b75c8e25 | Thomas Leveil | raise ValueError, "unknown parameter '%s'" % sys.argv[1] |
| 206 | d5be273c | Paul Fariello | |
| 207 | fetch() |
||
| 208 | sys.exit(0) |
