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 logger = get_log("/data/logs/ops/combine_pre.log") class CombineConfig(BaseModel): serverid: int redis_host: str redis_port: int base_redis = {"serverid": 0, "redis_host": "10.10.6.4", "redis_port": 6379} def get_config(): alls = list() logger.info(f"base dirs {os.path.abspath('.')}") for item in os.listdir("../tools_conf"): if item.split('.')[-1] == "json" and item.split('.')[0].split('_')[0] == "server" and len(item.split('_')) == 3: with open(os.path.join("../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() base_redis_i = CombineConfig(**base_redis) back_game_redis(base_redis_i) for i in alls: back_mysql(i) back_game_redis(i) if __name__ == "__main__": main()