Change to Peewee

master
Hofei 5 years ago
parent a2080b8864
commit c2ebbc2c9c

@ -0,0 +1,38 @@
import peewee
db = peewee.Proxy()
class BaseModel(peewee.Model):
class Meta:
database = db
class PiWatch(BaseModel):
ts = peewee.DateTimeField(primary_key=True)
name = peewee.TextField()
cpu_percent = peewee.FloatField()
cpufreq_current = peewee.FloatField()
cpu_temp = peewee.FloatField()
cpu_spannung = peewee.FloatField()
vmemory_total = peewee.FloatField()
vmemory_available = peewee.FloatField()
vmemory_percent = peewee.FloatField()
vmemory_used = peewee.FloatField()
vmemory_free = peewee.FloatField()
swapmemory_total = peewee.FloatField()
swapmemory_used = peewee.FloatField()
swapmemory_free = peewee.FloatField()
swapmemory_percent = peewee.FloatField()
disk_total = peewee.FloatField()
disk_used = peewee.FloatField()
disk_free = peewee.FloatField()
disk_percent = peewee.FloatField()
class Meta:
table_name = "pi_watch"
def create_table():
db.create_tables([PiWatch])

@ -1,19 +1,18 @@
#!/usr/bin/python3 import datetime
import os
import subprocess
import time
# # # # # # # # # #
#Imports
# # # # # # # # # #
import psutil import psutil
import subprocess
import toml import toml
import os
import time
from sshtunnel import SSHTunnelForwarder from sshtunnel import SSHTunnelForwarder
import sqlalchemy
from db_modell import db, PiWatch, create_table
from peewee import PostgresqlDatabase
def load_config(): def load_config():
configfile = os.path.join(PFAD, "conf.toml") configfile = os.path.join(SKRIPTPFAD, "conf.toml")
with open(configfile) as conffile: with open(configfile) as conffile:
config = toml.loads(conffile.read()) config = toml.loads(conffile.read())
config["ssh"] = {} config["ssh"] = {}
@ -22,47 +21,14 @@ def load_config():
return config return config
# # # # # # # # # # SKRIPTPFAD = os.path.abspath(os.path.dirname(__file__))
# Config
# # # # # # # # # #
PFAD = os.path.abspath(os.path.dirname(__file__))
CONFIG = load_config() CONFIG = load_config()
MESSINTERVALL = datetime.timedelta(seconds=CONFIG["messintervall"])
SENDEINTERVALL = datetime.timedelta(seconds=CONFIG["sendeintervall"])
class PGHandler: def system_daten_erfassen(now):
def __init__(self, port): daten = {"ts": now, "name": "hofei", "cpu_percent": psutil.cpu_percent()}
self.pguser = CONFIG["pguser"]
self.pgpw = CONFIG["pgpw"]
self.port = port
self.db = CONFIG["DB"]
self.engine = sqlalchemy.create_engine('postgresql+psycopg2://{pguser}:{pgpw}@localhost:{port}/{db}'.format(
pguser=self.pguser, pgpw=self.pgpw, port=self.port, db=self.db))
def check_spalten(self, daten):
for key in daten.keys():
print(key)
def daten_schreiben(self, daten):
with self.engine.begin() as conn:
values = [CONFIG["name"]]
spalte_liste = ["name"]
values_var = ""
for spalte, wert in daten.items():
values.append(wert)
spalte_liste.append(spalte)
values_var = ', '.join(['%s'] * (len(spalte_liste)))
spalten = ", ".join(spalte_liste)
sql = "INSERT INTO pi_watch ({spalten}) VALUES ({values_var})".format(spalten=spalten,
values_var=values_var)
data = values
conn.execute(sql, data)
# # # # # # # # # #
# Funktionen
# # # # # # # # # #
def system_daten_erfassen():
daten = {"cpu_percent": psutil.cpu_percent()}
abfrage = psutil.cpu_freq() abfrage = psutil.cpu_freq()
daten["cpufreq_current"] = abfrage.current daten["cpufreq_current"] = abfrage.current
@ -85,35 +51,40 @@ def system_daten_erfassen():
daten["disk_free"] = abfrage.free daten["disk_free"] = abfrage.free
daten["disk_percent"] = abfrage.percent daten["disk_percent"] = abfrage.percent
abfrage = psutil.net_io_counters(pernic=True)
for schnittstelle in CONFIG["netzwerk"]:
daten[schnittstelle + "_bytes_sent"] = abfrage[schnittstelle].bytes_sent
daten[schnittstelle + "_bytes_recv"] = abfrage[schnittstelle].bytes_recv
daten[schnittstelle + "_packets_sent"] = abfrage[schnittstelle].packets_sent
daten[schnittstelle + "_packets_recv"] = abfrage[schnittstelle].packets_recv
daten[schnittstelle + "_errin"] = abfrage[schnittstelle].errin
daten[schnittstelle + "_errout"] = abfrage[schnittstelle].errout
daten[schnittstelle + "_dropin"] = abfrage[schnittstelle].dropin
daten[schnittstelle + "_dropout"] = abfrage[schnittstelle].dropout
if CONFIG["pi"]: if CONFIG["pi"]:
daten["cpu_temp"] = subprocess.Popen(["vcgencmd", "measure_temp"], stdout=subprocess.PIPE).stdout.read() cpu_temp = subprocess.Popen(["vcgencmd", "measure_temp"], stdout=subprocess.PIPE).stdout.read()
daten["cpu_temp"] = daten["cpu_temp"].decode("utf-8").strip("temp='C\n") daten["cpu_temp"] = cpu_temp.decode("utf-8").strip("temp='C\n")
daten["cpu_spannung"] = subprocess.Popen(["vcgencmd", "measure_volts"], stdout=subprocess.PIPE).stdout.read() cpu_spannung = subprocess.Popen(["vcgencmd", "measure_volts"], stdout=subprocess.PIPE).stdout.read()
daten["cpu_spannung"] = daten["cpu_spannung"].decode("utf-8").strip("volt=V\n") daten["cpu_spannung"] = cpu_spannung.decode("utf-8").strip("volt=V\n")
return daten return daten
def main(): def main():
zwischenspeicher = []
letzte_messung = datetime.datetime.now() - MESSINTERVALL
letzter_upload = datetime.datetime.now() - SENDEINTERVALL
while True:
now = datetime.datetime.now()
if (now - letzte_messung) > MESSINTERVALL:
daten = system_daten_erfassen(now)
zwischenspeicher.append(daten)
letzte_messung = now
if (now - letzter_upload) > SENDEINTERVALL:
with SSHTunnelForwarder( with SSHTunnelForwarder(
(CONFIG["ssh"]["ip_server"], CONFIG["ssh"]["ssh_port"]), ssh_username=CONFIG["ssh"]["user"], (CONFIG["ssh"]["ip_server"], CONFIG["ssh"]["ssh_port"]), ssh_username=CONFIG["ssh"]["user"],
ssh_password=CONFIG["ssh"]["pw"], remote_bind_address=('127.0.0.1', CONFIG["pgport"])) as server: ssh_password=CONFIG["ssh"]["pw"], remote_bind_address=('127.0.0.1', CONFIG["pgport"])) as server:
pg_handler = PGHandler(server.local_bind_port) db.initialize(PostgresqlDatabase(CONFIG["db"],
while True: user=CONFIG["pguser"], password=CONFIG["pgpw"],
daten = system_daten_erfassen() host="127.0.0.1",
pg_handler.daten_schreiben(daten) port=server.local_bind_port))
time.sleep(CONFIG["intervall"]) create_table()
PiWatch.insert_many(zwischenspeicher).execute()
zwischenspeicher = []
letzter_upload = now
time.sleep(1)
if __name__ == "__main__": if __name__ == "__main__":

Loading…
Cancel
Save