pastafaristats/pastafaristats/send_info_daemon.py
2021-06-08 13:49:28 +02:00

137 lines
2.9 KiB
Python

#!/usr/bin/python3 -u
import psutil
import json
import urllib.request
import urllib.parse
import ssl
from time import sleep
import configparser
import os
from sys import exit
from pathlib import Path
import signal
from socket import getfqdn
import datetime
#url="http://url/to/info"
user_home=str(Path.home())
hostname=getfqdn()
def load_config():
yes_config=False
config = configparser.ConfigParser(interpolation=None)
if os.path.isfile(user_home+'/.config/pastafari/stats.cfg'):
config.read(user_home+'/.config/pastafari/stats.cfg')
yes_config=True
elif os.path.isfile('/etc/pastafari/stats.cfg'):
config.read('/etc/pastafari/stats.cfg')
yes_config=True
if not yes_config:
exit("Sorry, cannot load config file")
if not 'DEFAULT' in config:
exit("Sorry, config file need [DEFAULT] section")
if not 'url_server' in config['DEFAULT']:
exit("Sorry, config file need url_server variable in [DEFAULT] section")
url=config['DEFAULT']['url_server']
return url
def run(url):
network_info=psutil.net_io_counters(pernic=False)
network_devices=psutil.net_if_addrs()
cpu_idle=psutil.cpu_percent(interval=1)
cpus_idle=psutil.cpu_percent(interval=1, percpu=True)
cpu_number=psutil.cpu_count()
disk_info=psutil.disk_partitions()
partitions={}
for disk in disk_info:
partition=str(disk[1])
partitions[partition]=psutil.disk_usage(partition)
#print(partition+"="+str(partitions[partition]))
dev_info={}
mem_info=psutil.virtual_memory()
json_info=json.dumps({'net_info': network_info, 'cpu_idle': cpu_idle, 'cpus_idle': cpus_idle, 'cpu_number': cpu_number, 'disks_info': partitions, 'mem_info': mem_info, 'hostname': hostname, 'datetime': datetime.datetime.utcnow()})
data = urllib.parse.urlencode({'data_json': json_info})
data = data.encode('ascii')
try:
if url[:5]=='https':
# For nexts versions 3.5
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
content=urllib.request.urlopen(url, data, context=ctx)
else:
content=urllib.request.urlopen(url, data)
except Exception as e:
print('Cannot connect to data server -> '+str(e))
#Reload config
url=load_config()
def start(url):
# Get config from /etc/pastafari or ~/.config/pastafari
# Load configuration
while True:
run(url)
sleep(120)
if __name__=='__main__':
def catch_signal(sig, frame):
print('Exiting...')
exit(0)
signal.signal(signal.SIGINT, catch_signal)
url=load_config()
start(url)