myops/scripts/wjtx/tools.py
pengtao 9e4adf241f 1
2021-07-06 17:24:30 +08:00

131 lines
4.8 KiB
Python

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