Advertisement
Guest User

Untitled

a guest
May 27th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. import time
  2. import datetime
  3. import urllib2
  4. import json
  5. import psutil
  6. import spur
  7. import config as c
  8. import utilities as u
  9.  
  10.  
  11. class System(object):
  12.  
  13. def __init__(self, name, *args, **kwargs):
  14. map((lambda signal: u.subscribe_to_message(self.quarterback_message, signal)),
  15. c.MESSAGE_SUBSCRIBES[type(self).__name__])
  16. self.name = name
  17. self.stats_to_get = c.SYSTEM_NAMES[self.name]
  18. self.status_good = {}
  19. self.status_vals = {}
  20.  
  21. def quarterback_message(self, message):
  22. topic_qual = "process_{0}_{1}".format(message.topic.verb,
  23. message.topic.verb_qual)
  24. getattr(self, topic_qual)(message)
  25.  
  26. def broadcast_status(self, queue):
  27. status = u.create_message_kit(kit_name="status", status = self.status_good, status_vals = self.status_vals)
  28. u.send_message(signal = "SYSTEM.{0}.CHANGED.STATUS".format(self.system_type.upper()), message_data=status, queue=queue)
  29.  
  30. def start_checks(self):
  31. u.initiate_daemon(self.system_type, self.check_loop)
  32.  
  33. def check_loop(self, queue):
  34. while True:
  35. map((lambda stat: getattr(self, "get_{0}".format(stat))()), self.stats_to_get)
  36. self.broadcast_status(queue)
  37. interval = getattr(c, "{0}_CHECK_INTERVAL".format(self.name.upper()))
  38. time.sleep(interval)
  39.  
  40. def process_detected_drawn(self, _):
  41. self.start_checks()
  42.  
  43.  
  44. class Server(System):
  45.  
  46. def __init__(self, name, *args, **kwargs):
  47. self.system_type = "server"
  48. super(Server, self).__init__(name, *args, **kwargs)
  49.  
  50. def get_server_status(self):
  51. url = "{0}/{1}".format(c.SERVER_FULL_ADDR, c.SERVER_STATUS_URI)
  52. conn_stats = u.parse_requests(url)
  53. url += "?auto"
  54. auto_stats = u.server_status(url)
  55. self.status_vals["request_list"] = conn_stats
  56. self.status_vals["server_stats"] = auto_stats
  57.  
  58. def get_server_hardware(self):
  59. shell = spur.SshShell(hostname=c.SERVER_IP, port=c.SERVER_SSH_PORT,
  60. username=c.SERVER_USERNAME, password=c.SERVER_PASSWORD,
  61. missing_host_key=spur.ssh.MissingHostKey.accept)
  62. with shell:
  63. result = shell.run(c.SERVER_HARDWARE_COMMAND)
  64. val_list = result.output.split()
  65. self.status_vals["cpu_percent"] = val_list[0]
  66. self.status_vals["ram_percent"] = val_list[1]
  67.  
  68.  
  69. class Desktop(System):
  70.  
  71. def __init__(self, name, *args, **kwargs):
  72. self.system_type = "desktop"
  73. super(Desktop, self).__init__(name, *args, **kwargs)
  74.  
  75. def get_hwinfo_data(self):
  76. url = "{0}:{1}".format(c.DESKTOP_FULL_ADDR, c.DESKTOP_HWINFO_PORT)
  77. f = urllib2.urlopen(url)
  78. json_string = f.read()
  79. parsed_json = json.loads(json_string)
  80. for sensor_dict in parsed_json:
  81. working_set = (sensor_dict["SensorName"], sensor_dict["SensorClass"])
  82. if working_set in c.HWINFO_SENSOR_NAMES:
  83. working_index = c.HWINFO_INDEX_CROSS[c.HWINFO_SENSOR_NAMES.index(working_set)]
  84. self.status_vals[working_index] = sensor_dict["SensorValue"]
  85. f.close()
  86.  
  87. def get_cpu_percent(self):
  88. self.status_vals["cpu_percent"] = psutil.cpu_percent(interval=1)
  89. self.status_good["cpu_percent"] = False if self.status_vals["cpu_percent"] >= c.MAX_DESKTOP_CPU_PERCENT else True
  90.  
  91. def get_ram_percent(self):
  92. self.status_vals["ram_percent"] = psutil.virtual_memory().percent
  93. self.status_good["ram_percent"] = False if self.status_vals["ram_percent"] >= c.MAX_DESKTOP_RAM_PERCENT else True
  94.  
  95. def get_disk_percent(self):
  96. self.status_vals["disk_percent"] = psutil.disk_usage(c.DESKTOP_DISK_PATH).percent
  97. self.status_good["disk_percent"] = False if self.status_vals["disk_percent"] >= c.MAX_DESKTOP_DISK_PERCENT else True
  98.  
  99. def get_boot_datetime(self):
  100. self.status_vals["boot_datetime"] = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%d %b %Y at %H:%M:%S')
  101. self.status_good["boot_datetime"] = True
  102.  
  103. def get_users_on(self):
  104. self.status_vals["users_on"] = psutil.users()
  105. self.status_good["users_on"] = True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement