Ejemplo n.º 1
0
	def __init__(self, config, stdout=False):
		"""
			Class constructor
			:param stdout: forces the logging to stdout even if the logging destination is file
		"""
		self.lst_yes= ['yes',  'Yes', 'y', 'Y']
		self.global_config=global_config(config)
		self.logger = logging.getLogger(__name__)
		self.logger.setLevel(logging.DEBUG)
		self.logger.propagate = False
		formatter = logging.Formatter("%(asctime)s: [%(levelname)s] - %(filename)s (%(lineno)s): %(message)s", "%b %e %H:%M:%S")
		
		if self.global_config.log_dest=='stdout' or stdout:
			fh=logging.StreamHandler(sys.stdout)
			
		elif self.global_config.log_dest=='file':
			fh = TimedRotatingFileHandler(self.global_config.log_file, when="d",interval=1,backupCount=self.global_config.log_days_keep)
		
		if self.global_config.log_level=='debug':
			fh.setLevel(logging.DEBUG)
		elif self.global_config.log_level=='info':
			fh.setLevel(logging.INFO)
			
		fh.setFormatter(formatter)
		self.logger.addHandler(fh)

		self.my_eng=mysql_engine(self.global_config, self.logger)
		self.pg_eng=pg_engine(self.global_config, self.my_eng.my_tables, self.my_eng.table_file, self.logger, self.global_config.sql_dir)
		self.sleep_loop=self.global_config.sleep_loop
		
		self.pid_file = self.global_config.pid_file
		self.exit_file = self.global_config.exit_file
Ejemplo n.º 2
0
    def __init__(self, config, stdout=False):
        self.global_config = global_config(config)
        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(logging.DEBUG)
        self.logger.propagate = False
        formatter = logging.Formatter(
            "%(asctime)s: [%(levelname)s] - %(filename)s: %(message)s",
            "%b %e %H:%M:%S")

        if self.global_config.log_dest == 'stdout' or stdout:
            fh = logging.StreamHandler(sys.stdout)

        elif self.global_config.log_dest == 'file':
            if self.global_config.log_append:
                file_mode = 'a'
            else:
                file_mode = 'w'
            fh = logging.FileHandler(self.global_config.log_file, file_mode)

        if self.global_config.log_level == 'debug':
            fh.setLevel(logging.DEBUG)
        elif self.global_config.log_level == 'info':
            fh.setLevel(logging.INFO)

        fh.setFormatter(formatter)
        self.logger.addHandler(fh)

        self.my_eng = mysql_engine(self.global_config, self.logger)
        self.pg_eng = pg_engine(self.global_config, self.my_eng.my_tables,
                                self.my_eng.table_file, self.logger,
                                self.global_config.sql_dir)
        self.sleep_loop = self.global_config.sleep_loop

        self.pid_file = self.global_config.pid_file
        self.exit_file = self.global_config.exit_file
Ejemplo n.º 3
0
    def __init__(self, args):
        """
			Class constructor.
		"""
        self.catalog_version = '2.0.5'
        self.upgradable_version = '1.7'
        self.lst_yes = ['yes', 'Yes', 'y', 'Y']
        python_lib = get_python_lib()
        cham_dir = "%s/.pg_chameleon" % os.path.expanduser('~')

        local_conf = "%s/configuration/" % cham_dir
        self.global_conf_example = '%s/pg_chameleon/configuration/config-example.yml' % python_lib
        self.local_conf_example = '%s/config-example.yml' % local_conf

        local_logs = "%s/logs/" % cham_dir
        local_pid = "%s/pid/" % cham_dir

        self.conf_dirs = [
            cham_dir,
            local_conf,
            local_logs,
            local_pid,
        ]
        self.args = args
        self.source = self.args.source
        if self.args.command == 'set_configuration_files':
            self.set_configuration_files()
            sys.exit()

        self.__set_conf_permissions(cham_dir)

        self.load_config()

        log_list = self.__init_logger("global")
        self.logger = log_list[0]
        self.logger_fds = log_list[1]

        #notifier configuration
        self.notifier = rollbar_notifier(self.config["rollbar_key"],
                                         self.config["rollbar_env"],
                                         self.args.rollbar_level, self.logger)

        #pg_engine instance initialisation
        self.pg_engine = pg_engine()
        self.pg_engine.dest_conn = self.config["pg_conn"]
        self.pg_engine.logger = self.logger
        self.pg_engine.source = self.args.source
        self.pg_engine.full = self.args.full
        self.pg_engine.type_override = self.config["type_override"]
        self.pg_engine.sources = self.config["sources"]
        self.pg_engine.notifier = self.notifier

        #mysql_source instance initialisation
        self.mysql_source = mysql_source()
        self.mysql_source.source = self.args.source
        self.mysql_source.tables = self.args.tables
        self.mysql_source.schema = self.args.schema.strip()
        self.mysql_source.pg_engine = self.pg_engine
        self.mysql_source.logger = self.logger
        self.mysql_source.sources = self.config["sources"]
        self.mysql_source.type_override = self.config["type_override"]
        self.mysql_source.notifier = self.notifier

        #pgsql_source instance initialisation
        self.pgsql_source = pgsql_source()
        self.pgsql_source.source = self.args.source
        self.pgsql_source.tables = self.args.tables
        self.pgsql_source.schema = self.args.schema.strip()
        self.pgsql_source.pg_engine = self.pg_engine
        self.pgsql_source.logger = self.logger
        self.pgsql_source.sources = self.config["sources"]
        self.pgsql_source.type_override = self.config["type_override"]
        self.pgsql_source.notifier = self.notifier

        catalog_version = self.pg_engine.get_catalog_version()

        #safety checks
        if self.args.command == 'upgrade_replica_schema':
            self.pg_engine.sources = self.config["sources"]
            print(
                "WARNING, entering upgrade mode. Disabling the catalogue version's check. Expected version %s, installed version %s"
                % (self.catalog_version, catalog_version))
        elif self.args.command == 'enable_replica' and self.catalog_version != catalog_version:
            print(
                "WARNING, catalogue mismatch. Expected version %s, installed version %s"
                % (self.catalog_version, catalog_version))
        else:
            if catalog_version:
                if self.catalog_version != catalog_version:
                    print(
                        "FATAL, replica catalogue version mismatch. Expected %s, got %s"
                        % (self.catalog_version, catalog_version))
                    sys.exit()

        if self.args.source != '*' and self.args.command != 'add_source':
            self.pg_engine.connect_db()
            source_count = self.pg_engine.check_source()
            self.pg_engine.disconnect_db()
            if source_count == 0:
                print(
                    "FATAL, The source %s is not registered. Please add it add_source"
                    % (self.args.source))
                sys.exit()
Ejemplo n.º 4
0
	def __init__(self, args):
		"""
			Class constructor.
		"""
		self.catalog_version = '2.0.6'
		self.upgradable_version = '1.7'
		self.lst_yes= ['yes',  'Yes', 'y', 'Y']
		python_lib=get_python_lib()
		cham_dir = "%s/.pg_chameleon" % os.path.expanduser('~')	
		
			
		local_conf = "%s/configuration/" % cham_dir 
		self.global_conf_example = '%s/pg_chameleon/configuration/config-example.yml' % python_lib
		self.local_conf_example = '%s/config-example.yml' % local_conf
		
		local_logs = "%s/logs/" % cham_dir 
		local_pid = "%s/pid/" % cham_dir 
		
		self.conf_dirs=[
			cham_dir, 
			local_conf, 
			local_logs, 
			local_pid, 
			
		]
		self.args = args
		self.source = self.args.source
		if self.args.command == 'set_configuration_files':
			self.set_configuration_files()
			sys.exit()
		
		self.__set_conf_permissions(cham_dir)
		
		self.load_config()
		
		log_list = self.__init_logger("global")
		self.logger = log_list[0]
		self.logger_fds = log_list[1]
		
		#notifier configuration
		self.notifier = rollbar_notifier(self.config["rollbar_key"],self.config["rollbar_env"] , self.args.rollbar_level ,  self.logger )
					
		#pg_engine instance initialisation
		self.pg_engine = pg_engine()
		self.pg_engine.dest_conn = self.config["pg_conn"]
		self.pg_engine.logger = self.logger
		self.pg_engine.source = self.args.source
		self.pg_engine.full = self.args.full
		self.pg_engine.type_override = self.config["type_override"]
		self.pg_engine.sources = self.config["sources"]
		self.pg_engine.notifier = self.notifier
		
		#mysql_source instance initialisation
		self.mysql_source = mysql_source()
		self.mysql_source.source = self.args.source
		self.mysql_source.tables = self.args.tables
		self.mysql_source.schema = self.args.schema.strip()
		self.mysql_source.pg_engine = self.pg_engine
		self.mysql_source.logger = self.logger
		self.mysql_source.sources = self.config["sources"]
		self.mysql_source.type_override = self.config["type_override"]
		self.mysql_source.notifier = self.notifier
		
		#pgsql_source instance initialisation
		self.pgsql_source = pgsql_source()
		self.pgsql_source.source = self.args.source
		self.pgsql_source.tables = self.args.tables
		self.pgsql_source.schema = self.args.schema.strip()
		self.pgsql_source.pg_engine = self.pg_engine
		self.pgsql_source.logger = self.logger
		self.pgsql_source.sources = self.config["sources"]
		self.pgsql_source.type_override = self.config["type_override"]
		self.pgsql_source.notifier = self.notifier
		
		catalog_version = self.pg_engine.get_catalog_version()

		#safety checks
		if self.args.command == 'upgrade_replica_schema':
			self.pg_engine.sources = self.config["sources"]
			print("WARNING, entering upgrade mode. Disabling the catalogue version's check. Expected version %s, installed version %s" % (self.catalog_version, catalog_version))
		elif self.args.command == 'enable_replica' and self.catalog_version != catalog_version:
			print("WARNING, catalogue mismatch. Expected version %s, installed version %s" % (self.catalog_version, catalog_version))
		else:
			if  catalog_version:
				if self.catalog_version != catalog_version:
					print("FATAL, replica catalogue version mismatch. Expected %s, got %s" % (self.catalog_version, catalog_version))
					sys.exit()
		
		if self.args.source != '*' and self.args.command != 'add_source':
			self.pg_engine.connect_db()
			source_count = self.pg_engine.check_source()
			self.pg_engine.disconnect_db()
			if source_count == 0:
				print("FATAL, The source %s is not registered. Please add it add_source" % (self.args.source))
				sys.exit()