Add collectd-exec support to speedtest-cli.

This commit is contained in:
Marco Paganini 2015-09-06 12:25:14 -07:00
parent 72da41e4fc
commit fdc71a8f55
2 changed files with 42 additions and 5 deletions

View File

@ -38,6 +38,16 @@ Generate and provide a URL to the speedtest.net share results image
Suppress verbose output, only show basic information
.RE
\fB\-\-collectd\fR
.RS
Emit output compatible with the \fBcollectd-exec(5)\fR collectd script.
.RE
\fB\-\-collectd_interval COLLECTD_INTERVAL\fR
.RS
The collection interval (in seconds) to be used when using the \fBcollectd-exec(5)\fR script.
.RE
\fB\-\-list\fR
.RS
Display a list of speedtest.net servers sorted by distance

View File

@ -21,6 +21,7 @@ import sys
import math
import signal
import socket
import time
import timeit
import threading
@ -539,6 +540,12 @@ def speedtest():
parser.add_argument('--simple', action='store_true',
help='Suppress verbose output, only show basic '
'information')
parser.add_argument('--collectd', action='store_true',
help='Outputs PUTVAL lines compatible with the '
'collectd-exec script')
parser.add_argument('--collectd_interval', default=900, type=int,
help='Collection interval for the collectd-exec '
'plugin (in seconds)')
parser.add_argument('--list', action='store_true',
help='Display a list of speedtest.net servers '
'sorted by distance')
@ -568,6 +575,10 @@ def speedtest():
source = args.source
socket.socket = bound_socket
# Assume 'simple' if collectd format was requested.
if args.collectd:
args.simple = True
if not args.simple:
print_('Retrieving speedtest.net configuration...')
try:
@ -673,6 +684,11 @@ def speedtest():
except NameError:
print_('Hosted by %(sponsor)s (%(name)s) [%(d)0.2f km]: '
'%(latency)s ms' % best)
else:
if args.collectd:
print_('PUTVAL "%s/speedtest/latency-latency_ms" interval=%d N:%d' %
(socket.gethostname(), args.collectd_interval,
best['latency']))
else:
print_('Ping: %(latency)s ms' % best)
@ -687,6 +703,10 @@ def speedtest():
dlspeed = downloadSpeed(urls, args.simple)
if not args.simple:
print_()
if args.collectd:
print_('PUTVAL "%s/speedtest/bitrate-download_bps" interval=%d N:%d' %
(socket.gethostname(), args.collectd_interval, dlspeed * 8))
else:
print_('Download: %0.2f M%s/s' %
((dlspeed / 1000 / 1000) * args.units[1], args.units[0]))
@ -700,6 +720,10 @@ def speedtest():
ulspeed = uploadSpeed(best['url'], sizes, args.simple)
if not args.simple:
print_()
if args.collectd:
print_('PUTVAL "%s/speedtest/bitrate-upload_bps" interval=%d N:%d' %
(socket.gethostname(), args.collectd_interval, ulspeed * 8))
else:
print_('Upload: %0.2f M%s/s' %
((ulspeed / 1000 / 1000) * args.units[1], args.units[0]))
@ -752,6 +776,9 @@ def speedtest():
print_('Share results: https://www.speedtest.net/result/%s.png' %
resultid[0])
# Sleep before next cycle if collectd requested
if args.collectd:
time.sleep(args.collectd_interval)
def main():
try: