D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
imh-python
/
lib
/
python2.7
/
site-packages
/
cmu_ded
/
Libs
/
Filename :
logthis.py
back
Copy
""" Overloading out logging script so that we can send errors to a logging server. This is an attempt get issues without users reporting them because we normally don't report errors. If we don't get that many errors then th script is most likely not logging enough. """ import logging import requests from rads.common import strcolor class LogThis(object): """ Basically a logging class. Helps if no logger exists. """ def __init__(self, logger=None, dev_mode=False): """ Init class, if you want remote logging, set from_server and to_server. :param logger: Instance of logging. """ self.logger = logger self.to_server = "" self.from_server = "" self.dev_mode = dev_mode self.url = "http://log-export.inmotionhosting.com/" def info(self, msg): """ :param msg: :return: """ msg = msg if self.logger: self.logger.info(msg) else: print(msg) def warning(self, msg): """ Print all the warnings. :return: Output """ msg = strcolor("yellow", "[xx] " + msg) if self.logger: self.logger.warning(msg) else: print(msg) def error(self, msg): """ Printing all the error's :return: Output """ msg = strcolor("red", "[!!] " + msg) if self.logger: self.logger.error(msg) else: print(msg) def critical(self, msg): """ Logging critical errors. :return: Returns the message for logging. """ # Checks are handled in the function. self.log_critical_error(msg, self.from_server, self.to_server) msg = strcolor("red", "[!!!!] " + msg) if self.logger: self.logger.critical(msg) else: print(msg) def success(self, msg): """ Printing good stuff. :param msg: The string we want to print. :return: Output. """ msg = strcolor("green", "[*] " + msg) if self.logger: self.logger.info(msg) else: print(msg) def debug(self, msg): """ Verbose information. :param msg: The message you want to send. :return: Output. """ if self.logger: self.logger.debug(msg) else: print(msg) def log_start_migration(self, arguments, from_server, to_server): """ Log specifically when we are starting the migration. To do this you need to push the following data to a remote logging server: {"arguments": "--test15", "from_server": "vps15", "to_server": "vps16"} API call to a remote server. :return: True or False depending on exec. """ self.from_server = from_server self.to_server = to_server data = { "arguments": arguments, "from_server": from_server, "to_server": to_server } try: response = requests.post(self.url + "start_migration", json=data) if response.status_code != 200: self.warning("Issue in pushing log to log-export.inmotionhosting.com") self.warning("%s :: %s" % (response.status_code, response.text)) self.warning("<Args :: %s; from_server :: %s; to_server :: %s>" % (arguments, from_server, to_server)) return False else: self.success("Pushed start_migration to the remote server.") return True except requests.HTTPError as e: if e.errno == 400: self.warning("Recieved a Bad Request from API.") return False except requests.ConnectionError as e: self.error("Issues with connecting with the remote server.") self.error(e.message) return False def log_end_migration(self): """ Log specifically when we are starting the migration. Data going to the remote server should look something like this. {"from_server": "vps15", "to_server": "vps16"} API call to a remote server. :return: True or False depending on exec. """ data = { "from_server": self.from_server, "to_server": self.to_server, } if self.dev_mode: data["testing"] = self.dev_mode try: response = requests.post(self.url + "end_migration", json=data) if response.status_code != 200: self.warning("Issue in pushing log to log-export.inmotionhosting.com") self.warning("%s :: %s" % (response.status_code, response.text)) self.warning("<from_server :: %s; to_server :: %s>" % (self.from_server, self.to_server)) return False else: self.success("Pushed end_migration to the remote server.") return True except requests.HTTPError as e: if e.errno == 400: self.warning("Recieved a Bad Request from API.") return False except requests.ConnectionError as e: self.error("Issues with connecting with the remote server.") self.error(e.message) return False def log_critical_error(self, msg, from_server=None, to_server=None): """ Logging a critical error to the remote server. Data needs to look something like this: {"message": "Hey look I failed.", "from_server": "vps15", "to_server": "vps16"} Modification of MySQL on the remote server. :return: True or False depending on exec. """ # Just incase something isn't setup yet. if from_server: self.from_server = from_server if to_server: self.to_server = to_server if not self.from_server and not self.to_server: # Breaking out of the function if these two arn't set. return False data = { "from_server": self.from_server, "to_server": self.to_server, "message": msg, } if self.dev_mode: data["testing"] = self.dev_mode try: response = requests.post(self.url + "critical_error", json=data) if response.status_code != 200: self.warning("Issue in pushing log to log-export.inmotionhosting.com") self.warning("%s :: %s" % (response.status_code, response.text)) self.warning("<from_server :: %s; to_server :: %s>" % (self.from_server, self.to_server)) return False else: self.success("Pushed critical_error to the remote server.") return True except requests.HTTPError as e: if e.errno == 400: self.warning("Recieved a Bad Request from API.") return False except requests.ConnectionError as e: self.error("Issues with connecting with the remote server.") self.error(e.message) return False if __name__ == '__main__': # just some personal debugging tests. logger = logging.getLogger('root') logger.info(str(isinstance(logger, LogThis))) logger.info("info test") logger.debug("debug test") logger.warning("Warning Test") logger.error("Testing Error") logger.critical("Testing Critical")