Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- import datetime
- import urllib2
- import json
- import psutil
- import spur
- import config as c
- import utilities as u
- class System(object):
- def __init__(self, name, *args, **kwargs):
- map((lambda signal: u.subscribe_to_message(self.quarterback_message, signal)),
- c.MESSAGE_SUBSCRIBES[type(self).__name__])
- self.name = name
- self.stats_to_get = c.SYSTEM_NAMES[self.name]
- self.status_good = {}
- self.status_vals = {}
- def quarterback_message(self, message):
- topic_qual = "process_{0}_{1}".format(message.topic.verb,
- message.topic.verb_qual)
- getattr(self, topic_qual)(message)
- def broadcast_status(self, queue):
- status = u.create_message_kit(kit_name="status", status = self.status_good, status_vals = self.status_vals)
- u.send_message(signal = "SYSTEM.{0}.CHANGED.STATUS".format(self.system_type.upper()), message_data=status, queue=queue)
- def start_checks(self):
- u.initiate_daemon(self.system_type, self.check_loop)
- def check_loop(self, queue):
- while True:
- map((lambda stat: getattr(self, "get_{0}".format(stat))()), self.stats_to_get)
- self.broadcast_status(queue)
- interval = getattr(c, "{0}_CHECK_INTERVAL".format(self.name.upper()))
- time.sleep(interval)
- def process_detected_drawn(self, _):
- self.start_checks()
- class Server(System):
- def __init__(self, name, *args, **kwargs):
- self.system_type = "server"
- super(Server, self).__init__(name, *args, **kwargs)
- def get_server_status(self):
- url = "{0}/{1}".format(c.SERVER_FULL_ADDR, c.SERVER_STATUS_URI)
- conn_stats = u.parse_requests(url)
- url += "?auto"
- auto_stats = u.server_status(url)
- self.status_vals["request_list"] = conn_stats
- self.status_vals["server_stats"] = auto_stats
- def get_server_hardware(self):
- shell = spur.SshShell(hostname=c.SERVER_IP, port=c.SERVER_SSH_PORT,
- username=c.SERVER_USERNAME, password=c.SERVER_PASSWORD,
- missing_host_key=spur.ssh.MissingHostKey.accept)
- with shell:
- result = shell.run(c.SERVER_HARDWARE_COMMAND)
- val_list = result.output.split()
- self.status_vals["cpu_percent"] = val_list[0]
- self.status_vals["ram_percent"] = val_list[1]
- class Desktop(System):
- def __init__(self, name, *args, **kwargs):
- self.system_type = "desktop"
- super(Desktop, self).__init__(name, *args, **kwargs)
- def get_hwinfo_data(self):
- url = "{0}:{1}".format(c.DESKTOP_FULL_ADDR, c.DESKTOP_HWINFO_PORT)
- f = urllib2.urlopen(url)
- json_string = f.read()
- parsed_json = json.loads(json_string)
- for sensor_dict in parsed_json:
- working_set = (sensor_dict["SensorName"], sensor_dict["SensorClass"])
- if working_set in c.HWINFO_SENSOR_NAMES:
- working_index = c.HWINFO_INDEX_CROSS[c.HWINFO_SENSOR_NAMES.index(working_set)]
- self.status_vals[working_index] = sensor_dict["SensorValue"]
- f.close()
- def get_cpu_percent(self):
- self.status_vals["cpu_percent"] = psutil.cpu_percent(interval=1)
- self.status_good["cpu_percent"] = False if self.status_vals["cpu_percent"] >= c.MAX_DESKTOP_CPU_PERCENT else True
- def get_ram_percent(self):
- self.status_vals["ram_percent"] = psutil.virtual_memory().percent
- self.status_good["ram_percent"] = False if self.status_vals["ram_percent"] >= c.MAX_DESKTOP_RAM_PERCENT else True
- def get_disk_percent(self):
- self.status_vals["disk_percent"] = psutil.disk_usage(c.DESKTOP_DISK_PATH).percent
- self.status_good["disk_percent"] = False if self.status_vals["disk_percent"] >= c.MAX_DESKTOP_DISK_PERCENT else True
- def get_boot_datetime(self):
- self.status_vals["boot_datetime"] = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%d %b %Y at %H:%M:%S')
- self.status_good["boot_datetime"] = True
- def get_users_on(self):
- self.status_vals["users_on"] = psutil.users()
- self.status_good["users_on"] = True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement