import time from scripts.common.ansible import AnsiInterface, write_host import redis from ops.mmysql import MysqlBase import json from scripts.logger import logger as log config = { "global_redis_conf": { "host": "10.10.6.4", "port": "6379" }, "game_conf": { "host": "10.10.6.2", "port": 3306, "user": "wjtx", "pswd": "mMWA4DKCfeOL" } } class WjtxTools: def __init__(self) -> None: self.mysql_conf = config['game_conf'] self.redis_conf = config['global_redis_conf'] async def change_start_time(self, serverid: int, start_time: str) -> bool: self.serverid = serverid self.mysql_conf['db'] = f"legend_{self.serverid}" if self.check_serverid(): if self._change_db(start_time): if self._restart_service(): return True else: return False else: return False else: return False def _reset_worldboss(self, values): legend_db = MysqlBase(**self.mysql_conf) tablename = "world_boss" u_data = {'worldboss_level': values} try: legend_db.update(tablename, u_data, True) log.info(f"change world_boss to {values} success!") return True except Exception as e: log.error(e) return False # def _restart_stage(self): # global_redis = redis.Redis(host=self.redis_conf['host'], port=self.redis_conf['port'], charset='utf8', # db=self.redis_conf.get('db') or 0) # host_info = json.loads(global_redis.hget('game_info', self.serverid)) # hostip = host_info.get('innerIp', None) # if not hostip: # log.error(f"get host with {self.serverid} failed ,{host_info}") # return False # restart_cmd = f"su - kingsome -c 'cd /data/apps/game1009stage && sh restart.sh {self.serverid}'" # hostfilename = write_host(hostip) # time.sleep(1) # myansible = AnsiInterface(hostfilename) # resule = myansible.exec_command(restart_cmd) # log.debug(resule) # if not (resule['failed'] or resule['unreachable']): # log.info(f"restart {self.serverid} success!") # return True # else: # log.error(f"restart {self.serverid} failed,output was {resule}") # return False def _change_db(self, opentime): legend_db = MysqlBase(**self.mysql_conf) # update server_info set start_time='2020-03-16 11:00:00'; tablename = "server_info" u_data = {'start_time': opentime} try: legend_db.update(tablename, u_data, True) log.info("change db success!") return True except Exception as e: log.error(e) return False def _restart_service(self): global_redis = redis.Redis(host=self.redis_conf['host'], port=self.redis_conf['port'], charset='utf8', db=self.redis_conf.get('db') or 0) host_info = json.loads(global_redis.hget('game_info', self.serverid)) hostip = host_info.get('innerIp', None) if not hostip: log.error(f"get host info with {self.serverid} failed!") if int(self.serverid) < 20000: restart_cmd = f"su - kingsome -c 'cd /data/apps/game1009game && sh restart.sh {self.serverid}'" else: restart_cmd = f"su - kingsome -c 'cd /data/apps/game1012game && sh restart.sh {self.serverid}'" hostfilename = write_host(hostip) time.sleep(1) myansible = AnsiInterface(hostfilename) resule = myansible.exec_command(restart_cmd) log.debug(resule) if not (resule['failed'] or resule['unreachable']): log.info(f"restart {self.serverid} success!") return True else: log.error(f"restart {self.serverid} failed,output was {resule}") return False def check_serverid(self): global_redis = redis.Redis(host=self.redis_conf['host'], port=self.redis_conf['port'], charset='utf8', db=self.redis_conf.get('db') or 0) server_state = global_redis.hget('server_state', self.serverid) if int(server_state) != 12: return False else: log.info(f"{self.serverid} check ok!") return True async def change_worldboss(self, serverid: int, values: int) -> bool: self.serverid = serverid self.mysql_conf['db'] = f"legend_{self.serverid}" if self._reset_worldboss(values): if self._restart_stage(): return True else: return False else: return False