Example #1
0
 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.")
Example #2
0
 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))
Example #3
0
                        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)
Example #4
0
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),