Repository navigation
Expand file tree
/
Copy pathprobe.py
More file actions
51 lines (40 loc) · 1.68 KB
/
Copy pathprobe.py
File metadata and controls
51 lines (40 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import influxdb
import logging
import os
import socket
import speedtest
import sys
log = logging.getLogger(__name__)
out_hdlr = logging.StreamHandler(sys.stdout)
out_hdlr.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
out_hdlr.setLevel(logging.INFO)
log.addHandler(out_hdlr)
log.setLevel(logging.INFO)
hostname = os.environ.get('HOSTNAME', socket.gethostname())
download_in_mbs = 0
upload_in_mbs = 0
try:
probe = speedtest.Speedtest()
probe.get_best_server()
if not probe.results.server:
log.error('Unable to select best server from Speedtest.net; Aborting')
else:
log.info("{0}: {1}".format(probe.results.server.get('sponsor'), probe.results.server.get('name')))
probe.download()
probe.upload()
download_in_mbs = probe.results.download / 1000000
upload_in_mbs = probe.results.upload / 1000000
except Exception as e:
log.error('Unable to gather results from Speedtest.net\n{0}', e.msg)
log.info("Host: {host}, Download: {down:.2f} Mb/s, Upload: {up:.2f} Mb/s".format(host=hostname,
down=download_in_mbs,
up=upload_in_mbs))
try:
db = influxdb.InfluxDBClient('db', 8086, 'admin', 'speedtest', 'speedtest')
except influxdb.exceptions.InfluxDBServerError as e:
log.error("DB is offline; results not saved.")
sys.exit(1)
db.create_database('speedtest')
db.write_points([{'measurement': 'download', 'fields': {'host': hostname, 'value': download_in_mbs}},
{'measurement': 'upload', 'fields': {'host': hostname, 'value': upload_in_mbs}}])
log.info("-" * 25)