from subprocess import run from pydantic import BaseModel from typing import Optional, Union import json import os from ops.common import run_cmd from ops.plog import get_log import datetime def get_log(log_path_files="/data/logs/ops/ops.log"): logger.add(log_path_files, rotation="500 MB", enqueue=True) return logger logger = get_log("~/temp/combine_pre") class CombineConfig(BaseModel): serverid: int redis_host: str redis_port: int def get_config(): alls = list() logger.info(f"base dirs {os.path.abspath('.')}") for item in os.listdir("tools/combine_db/tools_conf"): if item.split('.')[-1] == "json" and item.split('.')[0].split('_')[0] == "server": with open(os.path.join("tools/combine_db/tools_conf", item)) as f: data = json.loads(f.read()) for line in data: cc = CombineConfig(**line) alls.append(cc) return alls def back_mysql(i): #CombineConfig(serverid=496, redis_host='10.10.6.186', redis_port=6381) now = datetime.datetime.now().strftime("%Y%m%d%H%M%S") cmd = f"mysqldump --default-character-set=utf8 -uwjtx -pmMWA4DKCfeOL -h10.10.6.2 legend_{i.serverid} >back/legend_{i.serverid}_{now}.sql" status, out = run_cmd(cmd) if not status: logger.error(f"back mysql failed,serverid={i.serverid},out={out}") return False else: logger.debug(f"back mysql {i.serverid} success!") return True def back_game_redis(i): now = datetime.datetime.now().strftime("%Y%m%d%H%M%S") back_redis_cmd = f"redis-cli -h {i.redis_host} -p {i.redis_port} --rdb back/{i.serverid}_{now}.rdb " status, out = run_cmd(back_redis_cmd) if not status: logger.error(f"back redis failed,serverid={i.serverid},out={out}") return False else: logger.debug(f"back redis {i.serverid} success!") return True def main(): alls = get_config() for i in alls: back_mysql(i) back_game_redis(i) if __name__ == "__main__": main()