Added speedtest plugin, fixed database connection error.
This commit is contained in:
39
plugins/system/smart_plugin.py
Normal file
39
plugins/system/smart_plugin.py
Normal file
@ -0,0 +1,39 @@
|
||||
from datetime import datetime
|
||||
|
||||
import psutil
|
||||
from peewee import *
|
||||
from playhouse.shortcuts import model_to_dict
|
||||
|
||||
import config
|
||||
from database import BaseModel
|
||||
from plugins.plugin import Plugin
|
||||
|
||||
|
||||
class SMART(BaseModel):
|
||||
time = DateTimeField(index=True, default=datetime.utcnow)
|
||||
drive = TextField(null=False)
|
||||
attribute_id = IntegerField(null=False)
|
||||
attribute_name = TextField(null=False)
|
||||
value = IntegerField(null=False)
|
||||
worst = IntegerField(null=False)
|
||||
threshold = IntegerField(null=False)
|
||||
raw = IntegerField(null=False)
|
||||
|
||||
|
||||
class SMARTPlugin(Plugin):
|
||||
models = [SMART]
|
||||
|
||||
def get_interval(self):
|
||||
return config.DISK_USAGE_INTERVAL
|
||||
|
||||
def execute(self):
|
||||
for partition in psutil.disk_partitions():
|
||||
usage = psutil.disk_usage(partition.mountpoint)
|
||||
|
||||
entry = DiskUsage()
|
||||
entry.partition = partition.device
|
||||
entry.mountpoint = partition.mountpoint
|
||||
entry.total = usage.total
|
||||
entry.used = usage.used
|
||||
entry.free = usage.free
|
||||
entry.save()
|
57
plugins/system/speedtest_plugin.py
Normal file
57
plugins/system/speedtest_plugin.py
Normal file
@ -0,0 +1,57 @@
|
||||
import subprocess
|
||||
import re
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
|
||||
import psutil
|
||||
from peewee import *
|
||||
from playhouse.shortcuts import model_to_dict
|
||||
|
||||
import config
|
||||
from database import BaseModel
|
||||
from plugins.plugin import Plugin
|
||||
|
||||
import json
|
||||
|
||||
import logging
|
||||
|
||||
class Speedtest(BaseModel):
|
||||
time = DateTimeField(index=True, default=datetime.utcnow)
|
||||
upload = IntegerField(null=False)
|
||||
download = IntegerField(null=False)
|
||||
latency = FloatField(null=True)
|
||||
jitter = FloatField(null=True)
|
||||
packetLoss = IntegerField(null=True)
|
||||
|
||||
|
||||
class SpeedtestPlugin(Plugin):
|
||||
models = [Speedtest]
|
||||
|
||||
def get_interval(self):
|
||||
return config.SPEEDTEST_INTERVAL
|
||||
|
||||
def execute(self):
|
||||
command = ['/usr/local/bin/SpeedTest', '--output', 'json']
|
||||
proc = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
stdout = proc.stdout.decode()
|
||||
stderr = proc.stderr.decode()
|
||||
|
||||
entry = Speedtest()
|
||||
entry.download = 0
|
||||
entry.upload = 0
|
||||
|
||||
if proc.returncode == 0:
|
||||
try:
|
||||
result = json.loads(stdout)
|
||||
entry.download = int(float(result['download']))
|
||||
entry.upload = int(float(result['upload']))
|
||||
entry.latency = float(result['ping'])
|
||||
entry.jitter = float(result['jitter'])
|
||||
except BaseException as e:
|
||||
logging.error(f"SpeedTest failed: {e}")
|
||||
|
||||
else:
|
||||
logging.error(f"SpeedTest nonzero return: {proc.returncode}\n-----\n{stdout}\n{stderr}\n\n")
|
||||
|
||||
|
||||
entry.save()
|
Reference in New Issue
Block a user