From db1793bf9eb57725b498e5309085b91cdbdbdc29 Mon Sep 17 00:00:00 2001 From: "PC-202302260912\\Administrator" <1769111741@qq.com> Date: Wed, 26 Jul 2023 17:30:12 +0800 Subject: [PATCH] =?UTF-8?q?gm=E6=B8=85=E5=BA=93=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/script/clearMongo.js | 12 +++ conf/script/deluser.sh | 49 +++++++++++ conf/script/reboot_core.sh | 4 + src/main/java/com/Application.java | 3 - .../controller/ChannelInfoController.java | 8 +- .../com/jmfy/controller/CommonManager.java | 9 +- .../jmfy/controller/ServerInfoController.java | 24 +++--- .../com/jmfy/utils/AutoServerManager.java | 82 +++++++++++++------ src/main/java/com/jmfy/utils/MinuteTask.java | 7 +- 9 files changed, 141 insertions(+), 57 deletions(-) create mode 100644 conf/script/clearMongo.js create mode 100644 conf/script/deluser.sh create mode 100644 conf/script/reboot_core.sh diff --git a/conf/script/clearMongo.js b/conf/script/clearMongo.js new file mode 100644 index 0000000..c37352f --- /dev/null +++ b/conf/script/clearMongo.js @@ -0,0 +1,12 @@ +print('========= operate mongoDB... =========='); +if (db.getCollection('user').count()<50){ + //mongoDB + db.getCollection('user').drop(); + db.getCollection('globalSystemControl').drop(); + db.getCollection('itemLog').drop(); + db.getCollection('mailingSystem').drop(); + db.getCollection('server_config').drop(); + db.getCollection('guildInfo').drop(); + db.getCollection('guildLog').drop(); + print('========= mongoDB删除成功... =========='); +} diff --git a/conf/script/deluser.sh b/conf/script/deluser.sh new file mode 100644 index 0000000..d51d3d4 --- /dev/null +++ b/conf/script/deluser.sh @@ -0,0 +1,49 @@ +#!/bin/bash +#set 200 81.71.33.247 20002 "core2" +gameip=$1 #游戏服ip +serverid=$2 #游戏服id +proccessname=$3 #core1 +echo $gameip $serverid $proccessname + +##这里是所有的动态参数,根据游戏服做修改 +mongourl=$4 +redisIp=$5 +redisPwd=$6 + +#停游戏进程 +ansible $gameip -m shell -a "supervisorctl stop $proccessname" + +#删mongo数据 +tempFile="clearMongo.js" + +#if [ ! -f "$tempFile" ]; then +# touch $tempFile +# echo "print('========= 进入mongo脚本 mongoDB... ==========');" >> $tempFile +# echo "if (db.getCollection('user').count()<50){" >> $tempFile +# echo "db.getCollection('user').drop();" >> $tempFile +# echo "db.getCollection('globalSystemControl').drop();" >> $tempFile +# echo "db.getCollection('itemLog').drop();" >> $tempFile +# echo "db.getCollection('mailingSystem').drop(); " >> $tempFile +# echo "db.getCollection('server_config').drop();" >> $tempFile +# echo "db.getCollection('guildInfo').drop();" >> $tempFile +# echo "db.getCollection('guildLog').drop(); " >> $tempFile +# echo "print('========= mongoDB脚本删除成功... ==========');}" >> $tempFile +#fi + +mongo "mongodb://"$mongourl"/jieling_"$serverid"?authSource=admin" $tempFile + +#删除redis数据 +num=$(redis-cli -h $redisIp -a $redisPwd keys $serverid"*"|wc -l) +echo "redis数量"$num +if [ $num -lt 500 ] +then + redis-cli -h $redisIp -a $redisPwd keys $serverid"*" | xargs redis-cli -h $redisIp -a $redisPwd del + echo "deleting redis data" +else + echo "too many users,can not delete success" +fi + +#起游戏进程 +ansible $gameip -m shell -a "supervisorctl start $proccessname" +#ansible 129.226.193.174 -m shell -a "/data/jieling/bin/start-all.sh core1" + diff --git a/conf/script/reboot_core.sh b/conf/script/reboot_core.sh new file mode 100644 index 0000000..45d0fed --- /dev/null +++ b/conf/script/reboot_core.sh @@ -0,0 +1,4 @@ +#!/bin/bash +gameip=$1 +proccessname=$2 +ansible $gameip -m shell -a "supervisorctl restart $proccessname" diff --git a/src/main/java/com/Application.java b/src/main/java/com/Application.java index 487f2f8..dfee44b 100644 --- a/src/main/java/com/Application.java +++ b/src/main/java/com/Application.java @@ -5,7 +5,6 @@ import com.jmfy.controller.GlobalSysController; import com.jmfy.controller.LoginController; import com.jmfy.handler.BaseHandler; import com.jmfy.handler.ManagerManager; -import com.jmfy.handler.RedisLogic; import com.jmfy.thrift.pool.ThriftPoolUtils; import com.jmfy.utils.*; import org.springframework.boot.SpringApplication; @@ -17,8 +16,6 @@ import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.ConfigurableApplicationContext; import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/com/jmfy/controller/ChannelInfoController.java b/src/main/java/com/jmfy/controller/ChannelInfoController.java index 57381c4..b6b42a1 100644 --- a/src/main/java/com/jmfy/controller/ChannelInfoController.java +++ b/src/main/java/com/jmfy/controller/ChannelInfoController.java @@ -30,8 +30,6 @@ public class ChannelInfoController { @Resource private CUserDao cUserDao; @Resource - private CommonManager commonManager; - @Resource private SeqUtils seqUtils; /** @@ -77,7 +75,7 @@ public class ChannelInfoController { int insertChannelInfo(HttpServletRequest request) throws Exception { HashMap map = JsonUtil.getInstence().getParameterMap(request); // 验证权限 - boolean verifyPower = commonManager.verifyPower(request, PowersEnum.ADD_CHANNEL_PERMISSIONS); + boolean verifyPower = CommonManager.verifyPower(request, PowersEnum.ADD_CHANNEL_PERMISSIONS); if (!verifyPower){ return 2; } @@ -114,7 +112,7 @@ public class ChannelInfoController { int updateChannel(HttpServletRequest request) throws Exception { HashMap map = JsonUtil.getInstence().getParameterMap(request); // 验证权限 - boolean verifyPower = commonManager.verifyPower(request, PowersEnum.UPDATE_CHANNEL_PERMISSIONS); + boolean verifyPower = CommonManager.verifyPower(request, PowersEnum.UPDATE_CHANNEL_PERMISSIONS); if (!verifyPower){ return 2; } @@ -168,7 +166,7 @@ public class ChannelInfoController { int deleteChannelInfo(HttpServletRequest request) throws Exception { HashMap map = JsonUtil.getInstence().getParameterMap(request); // 验证权限 - boolean verifyPower = commonManager.verifyPower(request, PowersEnum.DELETE_CHANNEL_PERMISSIONS); + boolean verifyPower = CommonManager.verifyPower(request, PowersEnum.DELETE_CHANNEL_PERMISSIONS); if (!verifyPower){ return 2; } diff --git a/src/main/java/com/jmfy/controller/CommonManager.java b/src/main/java/com/jmfy/controller/CommonManager.java index d956ce8..e9a4300 100644 --- a/src/main/java/com/jmfy/controller/CommonManager.java +++ b/src/main/java/com/jmfy/controller/CommonManager.java @@ -20,8 +20,11 @@ import javax.servlet.http.HttpServletRequest; public class CommonManager { private static final Logger LOGGER = LoggerFactory.getLogger(CommonManager.class); - @Resource - private CUserDao cUserDao; + private static CUserDao cUserDao; + + public CommonManager(CUserDao cUserDao){ + CommonManager.cUserDao = cUserDao; + } /** * 验证权限 @@ -29,7 +32,7 @@ public class CommonManager { * @param powersEnum * @return */ - public boolean verifyPower(HttpServletRequest request, PowersEnum... powersEnum) throws Exception { + public static boolean verifyPower(HttpServletRequest request, PowersEnum... powersEnum) throws Exception { String username = (String) request.getSession().getAttribute("username"); if (username == null){ LOGGER.error("用户不存在,操作失败"); diff --git a/src/main/java/com/jmfy/controller/ServerInfoController.java b/src/main/java/com/jmfy/controller/ServerInfoController.java index c029cbc..36a8226 100644 --- a/src/main/java/com/jmfy/controller/ServerInfoController.java +++ b/src/main/java/com/jmfy/controller/ServerInfoController.java @@ -43,10 +43,6 @@ public class ServerInfoController { @Resource private ServerInfoDao serverInfoDao; @Resource - private CommonManager commonManager; - @Resource - private AutoServerManager autoServerManager; - @Resource private CUserDao cUserDao; private static int state = 0; @@ -182,7 +178,7 @@ public class ServerInfoController { @RequestMapping(value = "/deleteServer", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int deleteServer(HttpServletRequest request) throws Exception { - boolean power = commonManager.verifyPower(request, PowersEnum.DELETE_SERVER_PERMISSIONS); + boolean power = CommonManager.verifyPower(request, PowersEnum.DELETE_SERVER_PERMISSIONS); if (!power){ return 2; } @@ -203,7 +199,7 @@ public class ServerInfoController { @RequestMapping(value = "/transferServer", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int transferServer(HttpServletRequest request) throws Exception { - boolean power = commonManager.verifyPower(request, PowersEnum.TRANSFER_SERVER_PERMISSIONS); + boolean power = CommonManager.verifyPower(request, PowersEnum.TRANSFER_SERVER_PERMISSIONS); if (!power){ return 0; } @@ -251,7 +247,7 @@ public class ServerInfoController { int notState = ServerStatusEnum.NOT_OPERATE.getId(); // 正常状态转向未运营状态,验证权限 if (info.getStatusInt() != notState && vo.getStatusInt() == notState){ - boolean verifyPower = commonManager.verifyPower(request, PowersEnum.SERVER_NOT_OPERATION); + boolean verifyPower = CommonManager.verifyPower(request, PowersEnum.SERVER_NOT_OPERATION); String account = String.valueOf(request.getSession().getAttribute("username")); CAdmin admin = cUserDao.findAdmin(account); if (!verifyPower || admin == null || admin.getIdentity() != IdentityEnum.SYSTEM_ADMIN.getId()){ @@ -269,7 +265,7 @@ public class ServerInfoController { ServerInfoVo infoVo = createServerVo(info, 0); if (!vo.getOpenTime().equals(infoVo.getOpenTime())){ serverInfoDao.updateOpenServerTime(vo.getServer_id(),vo.getOpenTime()); - autoServerManager.rebootServer(info.getServer_id()); + AutoServerManager.rebootServer(info.getServer_id()); } }else { RedisLogic.updateGmGroupId(vo.getServer_id(),vo.getCrossGroupId()); @@ -312,7 +308,7 @@ public class ServerInfoController { break; case "-3":// -3表示重启全部服务器 TaskKit.scheduleWithFixedOne(()->GMHandler.sendGm(id,"kick 0"),0); - autoServerManager.rebootServer(id); + AutoServerManager.rebootServer(id); break; default: // 修改服务器信息 @@ -375,7 +371,7 @@ public class ServerInfoController { @RequestMapping(value = "/cleanupServer", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int cleanupServer(HttpServletRequest request) throws Exception { - boolean power = commonManager.verifyPower(request, PowersEnum.CLEANUP_SERVER_PERMISSIONS); + boolean power = CommonManager.verifyPower(request, PowersEnum.CLEANUP_SERVER_PERMISSIONS); if (!power){ return 2; } @@ -391,7 +387,7 @@ public class ServerInfoController { } // 2. 清库 ServerInfoVo serverInfoVo = createServerVo(info,1); - TaskKit.scheduleWithFixedOne(()->autoServerManager.manualStartServer(serverInfoVo),0); + TaskKit.scheduleWithFixedOne(()->AutoServerManager.manualStartServer(serverInfoVo),0); return 1; } @@ -522,7 +518,7 @@ public class ServerInfoController { @RequestMapping(value = "/updateAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int updateAutoServerSetting(@RequestBody AutoServerSetting setting,HttpServletRequest request) throws Exception { - boolean power = commonManager.verifyPower(request, PowersEnum.AUTO_START_SERVER_PERMISSIONS); + boolean power = CommonManager.verifyPower(request, PowersEnum.AUTO_START_SERVER_PERMISSIONS); if (!power){ return 2; } @@ -539,13 +535,13 @@ public class ServerInfoController { @RequestMapping(value = "/restartServer", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int restartServer(HttpServletRequest request) throws Exception { - boolean power = commonManager.verifyPower(request, PowersEnum.RESTART_SERVER_PERMISSIONS); + boolean power = CommonManager.verifyPower(request, PowersEnum.RESTART_SERVER_PERMISSIONS); if (!power){ return 2; } String serverId = request.getParameter("serverId"); - return autoServerManager.rebootServer(serverId); + return AutoServerManager.rebootServer(serverId); } /** diff --git a/src/main/java/com/jmfy/utils/AutoServerManager.java b/src/main/java/com/jmfy/utils/AutoServerManager.java index 437bd53..f82ad25 100644 --- a/src/main/java/com/jmfy/utils/AutoServerManager.java +++ b/src/main/java/com/jmfy/utils/AutoServerManager.java @@ -2,7 +2,6 @@ package com.jmfy.utils; import com.jmfy.controller.LoginController; import com.jmfy.dao.ServerInfoDao; -import com.jmfy.handler.DingTalkLogic; import com.jmfy.model.AutoServerSetting; import com.jmfy.model.CServerOpenTime; import com.jmfy.model.ServerInfo; @@ -11,9 +10,10 @@ import com.jmfy.model.vo.ServerStatusEnum; import com.jmfy.redisProperties.RedisUserKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.io.*; import java.util.ArrayList; import java.util.List; @@ -29,15 +29,39 @@ import java.util.stream.Collectors; public class AutoServerManager { private static final Logger LOGGER = LoggerFactory.getLogger(AutoServerManager.class); - private AutoServerManager() { + private static ServerInfoDao serverInfoDao; + + @Autowired + public AutoServerManager(ServerInfoDao serverInfoDao) { + AutoServerManager.serverInfoDao = serverInfoDao; } - public static class Instance { - public final static AutoServerManager instance = new AutoServerManager(); + private static String gameMongodb; + public static String getGameMongodb() { + String[] split = gameMongodb.split("/"); + return split[2]; + } + @Value("${spring.data.gameMongodb.uri}") + public void setGameMongodb(String gameMongodb) { + AutoServerManager.gameMongodb = gameMongodb; } - public static AutoServerManager getInstance() { - return AutoServerManager.Instance.instance; + private static String redisHost; + public static String getRedisHost() { + return redisHost; + } + @Value("${spring.redis.host}") + public void setRedisHost(String redisHost) { + AutoServerManager.redisHost = redisHost; + } + + private static String redisPwd; + public static String getRedisPwd() { + return redisPwd; + } + @Value("${spring.redis.password}") + public void setRedisPwd(String redisPwd) { + AutoServerManager.redisPwd = redisPwd; } private static long date = 0; @@ -47,11 +71,6 @@ public class AutoServerManager { public static final String REGISTER = "1"; public static final String AUTOTIME = "2"; - @Resource - private ServerInfoDao serverInfoDao; - @Resource - private DingTalkLogic dingTalkLogic; - /** * 是否开启自动开服功能 * @@ -62,6 +81,12 @@ public class AutoServerManager { return autoServerSetting != null && "1".equals(autoServerSetting.getState()); } + /** + * 获取下一个服务器信息 + * @param infoList + * @param num + * @return + */ private static ServerInfo getServerIndex(List infoList, int num){ ServerInfo info = null; try { @@ -73,7 +98,7 @@ public class AutoServerManager { /** * 开服 */ - void startServer(){ + public static void startServer(){ try { if (isOpen()) { // 当前时间 @@ -135,9 +160,9 @@ public class AutoServerManager { * @param newServer * @throws Exception */ - private void startServers(ServerInfo oldServer, ServerInfo newServer) throws Exception { + private static void startServers(ServerInfo oldServer, ServerInfo newServer) throws Exception { // 停服脚本 - AutoServerManager.getInstance().delUser(newServer); + delUser(newServer); // 间隔30秒再获取开服数据 Thread.sleep(DateUtil.ONE_SECOND * 30); // 验证 @@ -156,7 +181,7 @@ public class AutoServerManager { /** * 验证开服状态 */ - private boolean verifyServerStatus(ServerInfo serverInfo) { + private static boolean verifyServerStatus(ServerInfo serverInfo) { String serverId = serverInfo.getServer_id(); // 错误信息 String cont; @@ -171,7 +196,7 @@ public class AutoServerManager { if (sameDay){ return true; } - cont = "服务器验证开服时间错误:服务器信息:{"+serverTime.toString()+"}"; + cont = "服务器验证开服时间错误:服务器信息:{"+ serverTime +"}"; } } catch (Exception e) { cont = "服务器验证状态异常:{"+e.getMessage()+"}"; @@ -190,7 +215,7 @@ public class AutoServerManager { * @param status * @param news */ - private void updateServer(ServerInfo serverInfo, int status, int news, String serverId) throws Exception { + private static void updateServer(ServerInfo serverInfo, int status, int news, String serverId) throws Exception { if (serverInfo == null) { LOGGER.error("自动开服,服务器不存在:{}", serverId); return; @@ -204,11 +229,11 @@ public class AutoServerManager { * 手动开服 * @param vo */ - public void manualStartServer(ServerInfoVo vo){ + public static void manualStartServer(ServerInfoVo vo){ try { ServerInfo serverInfo = serverInfoDao.getServerInfo(vo.getServer_id()); // 停服脚本 - AutoServerManager.getInstance().delUser(serverInfo); + delUser(serverInfo); // 间隔30秒再获取开服数据 Thread.sleep(DateUtil.ONE_SECOND * 10); // 验证 @@ -229,15 +254,15 @@ public class AutoServerManager { * @return * @throws Exception */ - public int rebootServer(String serverId) throws Exception { - String path = "/data/jieling/reboot_core.sh"; + public static int rebootServer(String serverId) throws Exception { + String path = "/conf/script/reboot_core.sh"; ServerInfo serverInfo = serverInfoDao.getServerInfo(serverId); if (serverInfo == null){ return 0; } - String command = "sh " + path + " " + serverInfo.getIp() + " " + serverInfo.getCoreName(); + String command = "bash " + path + " " + serverInfo.getIp() + " " + serverInfo.getCoreName(); LOGGER.info("重启命令:{}", command); Process exec = null; @@ -264,17 +289,20 @@ public class AutoServerManager { * @param serverInfo * @return */ - private void delUser(ServerInfo serverInfo) { - String path = "/data/jieling/deluser.sh"; + private static void delUser(ServerInfo serverInfo) { + String path = "conf/script/deluser.sh"; if (serverInfo.getIp() == null || "".equals(serverInfo.getIp()) || serverInfo.getServer_id() == null || "".equals(serverInfo.getServer_id()) || serverInfo.getCoreName() == null || "".equals(serverInfo.getCoreName())) { - LOGGER.error("删除操作参数不全,执行失败:参数:{}", serverInfo.toString()); + LOGGER.error("删除操作参数不全,执行失败:参数:{}", serverInfo); return; } - String command = "sh " + path + " 500 " + serverInfo.getIp() + " " + serverInfo.getServer_id() + " " + serverInfo.getCoreName(); + String space = " "; + + String command = "bash " + path + serverInfo.getIp() + space + serverInfo.getServer_id() + space + serverInfo.getCoreName() + + space + getGameMongodb() + space + getRedisHost() + space + getRedisPwd(); LOGGER.info("清库命令:{}", command); Process exec = null; diff --git a/src/main/java/com/jmfy/utils/MinuteTask.java b/src/main/java/com/jmfy/utils/MinuteTask.java index 680e66d..cc17f5f 100644 --- a/src/main/java/com/jmfy/utils/MinuteTask.java +++ b/src/main/java/com/jmfy/utils/MinuteTask.java @@ -20,10 +20,7 @@ public class MinuteTask implements Runnable { public void setsHotFixManager(SHotFixManager sHotFixManager) { this.sHotFixManager = sHotFixManager; - } - - @Resource - private AutoServerManager autoServer; + }; /** * 需要注意,这里面运行的方法需要自行在方法体内添加try-catch,防止报错 @@ -34,7 +31,7 @@ public class MinuteTask implements Runnable { //邮件补发 getsHotFixManager().updateTablesWithTableNames(); //自动开服 - autoServer.startServer(); + AutoServerManager.startServer(); }catch (Exception e){ e.printStackTrace(); }