def monitoring(self): """ Will be look until all the threads die. """ while True: try: still_alive = [ thread for pos, thread in enumerate(self.pool) if self.pool[pos].is_alive() ] if len(still_alive) == 0: message = "All threads was closed!" print >> stdout, message log.info(message) break sleep(settings.MANAGER_SLEEP) except: log.critical("Problem while monitoring the threads.")
def update_request(self, action_name, queue_id, status, message, retry, reprocess_time, retry_update=0): """ Check if have some request in the queue retry_update is internal use. """ args = [ queue_id, status, message, retry, reprocess_time ] result = None try: if status != 0: log.warning("[%s/%s] - ID: [%s] - Status [%s] - Message [%s]" % (self.name, action_name, queue_id, status, message), verbose=1) result = self.manager.execute_sp(self.attrib["sp_update_row"], details=True, *args) except OperationalError, oe: # Deadlock found when trying to get lock; try restarting transaction if oe[0] == 1213: if retry_update < 5: # Sleep to give the time to unlock sleep(0.5) retry_update += 1 log.warning("Deadlock found, retrying [%s/5]" % retry_update) return self.update_request(action_name, queue_id, status, message, retry, reprocess_time, retry_update) else: log.critical("Was not possible to update the information, please check the process.") else: log.critical("An operation error occurred: %s" % str(oe))
else: self.update_request(action_name, row[PROCESS_ID], settings.CONFIG_ERROR, "Tag [%s] of [%s] not exist!" % (action["tag"], action_name), action["retry"], action["reprocess_time"]) except OperationalError, oe: if oe[0] in self.CONFIG_MYSQL_ERROR: raise oe log.warning("[%s/%s] - [%s], try reconnect." % (self.name, self.connection_name, oe)) while not self.__stop_event.isSet(): try: self.__stop_event.wait(settings.RETRY_SLEEP) self.manager.reconnect() # if don't have error, will be able to back to the process log.warning("[%s/%s] reestablished" % (self.name, self.connection_name)) break except Exception: log.warning("Still have a error in [%s/%s] - Retry after %s seconds" % (self.name, self.connection_name, settings.RETRY_SLEEP)) except: log.critical("Problem while ran the instance thread [%s]." % self.name) def join(self, timeout=None): """ Executed when have a request to exit """ self.__stop_event.set() Thread.join(self, timeout=timeout) def have_request(self): """ Check if have some request in the queue """ args = [ self.name, ] if self.attrib["complement"] is not None: args.extend(self.attrib["complement"]) result = self.manager.execute_sp(self.attrib["sp_search_row"], *args)
from _mysql_exceptions import OperationalError from contextlib import closing from datetime import datetime, timedelta from getpass import getuser from procsync.modules import settings, logger as log from procsync.modules.tools import format_value from sys import exit from warnings import filterwarnings filterwarnings("ignore", "No data .*") try: import MySQLdb except: log.critical("The application need the module mysqldb to run.\nSee: http://sourceforge.net/projects/mysql-python/") exit(1) def check_arguments(file_config, connection_key): """ Used in the modules.configuration.ConnectionConfig to identify how attributes will be necessary for this module """ # Set and return return { "host" : file_config.get_config_value(connection_key, "host", default_value=None), "port" : file_config.get_config_value(connection_key, "port", default_value=3306), "user" : file_config.get_config_value(connection_key, "user", default_value=getuser()), "passwd" : file_config.get_config_value(connection_key, "passwd", default_value=None), "db" : file_config.get_config_value(connection_key, "db", default_value=None), "unix_socket" : file_config.get_config_value(connection_key, "unix_socket", default_value=settings.MYSQL_UNIX_SOCKET), "connect_timeout" : file_config.get_config_value(connection_key, "connect_timeout", default_value=None, return_type=int), "persistent" : file_config.get_config_value(connection_key, "persistent", default_value=False), "wait_timeout" : file_config.get_config_value(connection_key, "wait_timeout", default_value=28800), "retry_sleep" : file_config.get_config_value(connection_key, "retry_sleep", default_value=settings.RETRY_SLEEP),