137 lines
2.9 KiB
Python
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)
|
|
|