131 lines
4.8 KiB
Python
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
|