cetus/dumpbinlog-tool/cetus_config.py
2019-02-21 15:39:58 +08:00

78 lines
2.7 KiB
Python

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import json
import configparser
import logging
class CetusConf:
def __init__(self, sharding_conf_file):
with open(os.path.expanduser(sharding_conf_file)) as f:
self.shard_config = json.load(f)
def sharded_and_single_tables(self):
return self.sharded_tables() + self.single_tables()
def sharded_tables(self):
return [(t['db'], t['table']) for t in self.shard_config['table']]
def single_tables(self):
return [(t['db'], t['table']) for t in self.shard_config['single_tables']]
class BinlogConfig:
BINLOG_MYSQL = {}
OUTPUT_MYSQL = {}
SKIP_SCHEMAS = None
BINLOG_POS = {}
IGNORE_DDL = False
LOG_LEVEL = logging.INFO
ONLY_SHARDING_TABLE = None
ALLOW_TABLES = None # get these table from file: ONLY_SHARDING_TABLE
def __init__(self, filename):
conf = configparser.ConfigParser()
conf.read(filename)
self.BINLOG_MYSQL['host'] = conf['BINLOG_MYSQL']['host']
self.BINLOG_MYSQL['port'] = int(conf['BINLOG_MYSQL']['port'])
self.BINLOG_MYSQL['user'] = conf['BINLOG_MYSQL']['user']
self.BINLOG_MYSQL['passwd'] = conf['BINLOG_MYSQL']['password']
self.OUTPUT_MYSQL['host'] = conf['OUTPUT_MYSQL']['host']
self.OUTPUT_MYSQL['port'] = int(conf['OUTPUT_MYSQL']['port'])
self.OUTPUT_MYSQL['user'] = conf['OUTPUT_MYSQL']['user']
self.OUTPUT_MYSQL['password'] = conf['OUTPUT_MYSQL']['password']
skip_schemas = conf['DEFAULT'].get('skip_schemas', None)
if skip_schemas:
self.SKIP_SCHEMAS = [s.strip() for s in skip_schemas.split(',')]
sharding_file = conf['DEFAULT'].get('only_sharding_table', None)
if sharding_file:
self.ONLY_SHARDING_TABLE = sharding_file
pos = conf['DEFAULT'].get('auto_position', None)
if pos:
self.BINLOG_POS['auto_position'] = pos
log_file = conf['DEFAULT'].get('log_file', None)
if log_file:
self.BINLOG_POS['log_file'] = log_file
log_pos = conf['DEFAULT'].get('log_pos', None)
if log_file:
self.BINLOG_POS['log_pos'] = int(log_pos)
level = conf['DEFAULT'].get('log_level', 'INFO')
if level == 'DEBUG':
self.LOG_LEVEL = logging.DEBUG
if conf['DEFAULT'].getboolean('ignore_ddl', False):
self.IGNORE_DDL = True
def dump(self):
print(' SKIP_SCHEMAS:', self.SKIP_SCHEMAS)
print(' BINLOG_POS:', self.BINLOG_POS)
print(' IGNORE_DDL:', self.IGNORE_DDL)
print(' LOG_LEVEL:', self.LOG_LEVEL)
print(' ONLY_SHARDING_TABLE:', self.ONLY_SHARDING_TABLE)
print('')