From 5e3ba5e36823c1c4729533d29246f07efbaa7c49 Mon Sep 17 00:00:00 2001 From: wangbing Date: Sat, 12 Oct 2019 18:05:15 +0800 Subject: [PATCH] 111 --- .../com/example/action/AjaxController.java | 39 ++++++++++++++-- .../com/example/action/screen/Mapping.java | 18 ++++++++ .../java/com/example/config/NginxConfig.java | 12 +++-- .../java/com/example/config/TaskConfig.java | 2 +- .../com/example/frame/utils/ProcessUtil.java | 31 ++++++------- admin/src/main/resources/nginx-1.14.2.zip | Bin 1473399 -> 1473914 bytes .../static/img/{restart.png => reload.png} | Bin .../src/main/resources/static/img/reload_.png | Bin 0 -> 3182 bytes admin/src/main/resources/static/js/ajax.js | 18 ++++++++ .../resources/templates/screen/mapping.ftl | 43 +++++++++++++++--- 10 files changed, 131 insertions(+), 32 deletions(-) create mode 100644 admin/src/main/java/com/example/action/screen/Mapping.java rename admin/src/main/resources/static/img/{restart.png => reload.png} (100%) create mode 100644 admin/src/main/resources/static/img/reload_.png diff --git a/admin/src/main/java/com/example/action/AjaxController.java b/admin/src/main/java/com/example/action/AjaxController.java index fda84d9..d7c2096 100644 --- a/admin/src/main/java/com/example/action/AjaxController.java +++ b/admin/src/main/java/com/example/action/AjaxController.java @@ -1,5 +1,8 @@ package com.example.action; +import com.example.config.NginxConfig; +import com.example.frame.utils.*; +import com.example.module.admin.ent.NginxCtrl; import com.example.module.admin.mgr.MappingManager; import com.example.module.admin.req.*; import org.springframework.stereotype.Controller; @@ -13,13 +16,9 @@ import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.InputStreamReader; -import com.example.frame.utils.LocalData; -import com.example.frame.utils.MapperUtil; -import com.example.frame.utils.Message; import com.example.frame.base.BaseResponse; import com.example.frame.base.ErrorType; import com.example.frame.base.Token; -import com.example.frame.utils.LogUtil; import com.example.frame.base.Error; @Controller @@ -27,6 +26,8 @@ public class AjaxController { @Autowired private MappingManager mappingManager; + @Autowired + private NginxCtrl nginxCtrl; @RequestMapping("/ajax") @ResponseBody @@ -56,6 +57,15 @@ public class AjaxController { // 示例 case "ajax.example.example": break; + case "nginx.start": + baseResponse = nginxStart(jsonString, token); + break; + case "nginx.stop": + baseResponse = nginxStop(jsonString, token); + break; + case "nginx.reload": + baseResponse = nginxReload(jsonString, token); + break; // 创建映射 case "ajax.admin.mapping.create": baseResponse = createMapping(jsonString, token); @@ -89,6 +99,27 @@ public class AjaxController { return baseResponse; } + private BaseResponse nginxStart(String jsonString, Token token) { + BaseResponse baseResponse = new BaseResponse(); + String exec = ProcessUtil.execBat(nginxCtrl.getStartCmd()); + System.out.println(exec); + return baseResponse; + } + + private BaseResponse nginxStop(String jsonString, Token token) { + BaseResponse baseResponse = new BaseResponse(); + String exec = ProcessUtil.execBat(nginxCtrl.getStopCmd()); + System.out.println(exec); + return baseResponse; + } + + private BaseResponse nginxReload(String jsonString, Token token) { + BaseResponse baseResponse = new BaseResponse(); + String exec = ProcessUtil.execBat(nginxCtrl.getReloadCmd()); + System.out.println(exec); + return baseResponse; + } + /** * 创建映射 */ diff --git a/admin/src/main/java/com/example/action/screen/Mapping.java b/admin/src/main/java/com/example/action/screen/Mapping.java new file mode 100644 index 0000000..746e033 --- /dev/null +++ b/admin/src/main/java/com/example/action/screen/Mapping.java @@ -0,0 +1,18 @@ +package com.example.action.screen; + +import com.example.frame.base.Screen; +import com.example.frame.utils.ProcessUtil; +import org.springframework.ui.Model; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; + +public class Mapping extends Screen { + + @Override + public void exec(Model model, HttpServletRequest request, HttpServletResponse response) { + boolean nginx = ProcessUtil.findProcess("nginx"); + model.addAttribute("run", nginx ? "true" : "false"); + } +} diff --git a/admin/src/main/java/com/example/config/NginxConfig.java b/admin/src/main/java/com/example/config/NginxConfig.java index 2ee2251..91431f4 100644 --- a/admin/src/main/java/com/example/config/NginxConfig.java +++ b/admin/src/main/java/com/example/config/NginxConfig.java @@ -60,13 +60,15 @@ public class NginxConfig { throw new RuntimeException("nginx home not exists!"); } - File exe = new File(nginxHome, "nginx.exe"); + File start = new File(nginxHome, "start.bat"); + File stop = new File(nginxHome, "stop.bat"); + File reload = new File(nginxHome, "reload.bat"); NginxCtrl nginxCtrl = new NginxCtrl(); - nginxCtrl.setStartCmd("start " + exe.getAbsolutePath()); - nginxCtrl.setStopCmd(exe.getAbsolutePath() + " -s quit"); - nginxCtrl.setReloadCmd(exe.getAbsolutePath() + " - s reload "); - nginxCtrl.setVersionCmd(exe.getAbsolutePath() + " -v "); + nginxCtrl.setStartCmd(start.getAbsolutePath()); + nginxCtrl.setStopCmd(stop.getAbsolutePath()); + nginxCtrl.setReloadCmd(reload.getAbsolutePath()); + nginxCtrl.setVersionCmd(nginxHome.getAbsolutePath() + " -v "); return nginxCtrl; } } diff --git a/admin/src/main/java/com/example/config/TaskConfig.java b/admin/src/main/java/com/example/config/TaskConfig.java index cf4fa1f..7d600f8 100644 --- a/admin/src/main/java/com/example/config/TaskConfig.java +++ b/admin/src/main/java/com/example/config/TaskConfig.java @@ -33,7 +33,7 @@ public class TaskConfig implements SchedulingConfigurer { Message message = new Message(); message.setType(MessageType.NGINX_STATE); State state = new State(); - state.setRun(true); + state.setRun(ProcessUtil.findProcess("nginx")); message.setObject(state); globalController.pushAll(message); } diff --git a/admin/src/main/java/com/example/frame/utils/ProcessUtil.java b/admin/src/main/java/com/example/frame/utils/ProcessUtil.java index c82562a..ac0333d 100644 --- a/admin/src/main/java/com/example/frame/utils/ProcessUtil.java +++ b/admin/src/main/java/com/example/frame/utils/ProcessUtil.java @@ -16,34 +16,31 @@ import java.io.InputStreamReader; public class ProcessUtil { /** * 启动windows系统下的exe文件 - * @param path 可执行exe文件路径 + * + * @param exe 可执行exe文件路径 */ - public static void execExe(String path) { - Runtime rn = Runtime.getRuntime(); - Process p = null; - try { - p = rn.exec(path); - } catch (Exception e) { - System.out.println("Error exec!"); + public static String execExe(String exe) { + if (!exe.endsWith(".bat")) { + throw new RuntimeException(exe + "is not a file of .exe"); } + return exec(exe); } /** * 执行windows批处理文件路 - * @param path 可执行批处理文件路径 + * + * @param bat 可执行批处理文件路径 */ - public static void execBat(String path) { - Runtime rn = Runtime.getRuntime(); - Process p = null; - try { - p = rn.exec(path); - } catch (Exception e) { - System.out.println("Error exec!"); + public static String execBat(String bat) { + if (!bat.endsWith(".bat")) { + throw new RuntimeException(bat + "is not a file of .bat"); } + return exec("call "+bat); } /** * 执行windows cmd命令 + * * @param command cmd命令 */ public static String execCmd(String command) { @@ -53,6 +50,7 @@ public class ProcessUtil { /** * 执行运行环境命令 + * * @param command cmd命令 */ public static String exec(String command) { @@ -60,6 +58,7 @@ public class ProcessUtil { Runtime runtime = Runtime.getRuntime(); Process process = null; try { + System.out.println("==>>" + command); process = runtime.exec(command); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")); String line = null; diff --git a/admin/src/main/resources/nginx-1.14.2.zip b/admin/src/main/resources/nginx-1.14.2.zip index 6dc614266bc1f0c4b55fc83643ac15ee52dd2a67..7bf81121415cdead3d02b5a48e9ce545c8785097 100644 GIT binary patch delta 622 zcmezVE%Mi|$c7fi7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~7QPn#7J(MQ7NHj57LgXw zEn*Kd>X}(Y7#J8h7{dB|{0r7R%+dw&w1Jolh>KEl@)J|^k`habJ$%od2tVQP{rIVu zU*HA*z<{;hng$P^p7K6_X7vT{wH~1tbi*{f&Ytx5VPpvKh8b!MH1yM^>L02=!<2!T z6NrmT5{pXUX4YddR7=lOM=S6I$Y=&6!$2bdH zavdX+JlK0c!)vGa<%{u6_bV3T+s>IO79})&L6sOwJ+2^80a^(H3P5~6LkuZ^xWHlz z42%pC4DpkHv^;9K%4p{bp|_qXD}4y$Lu`hajTtgXX4f;AWQrjI3fb(Nyfb4!X7AWP z159U~?-oHf8#ADg%w}i+8x09IWRs`VF|~qBZV6{n1~V4P9!!N8&B_Myv@sA)7G_|$ J2sD6!0RXWQw-*2a delta 80 zcmWN^$qj%Y002Qe@IDc#!*=KZyD(-;GO-W~FgBqHFWGsm_x5}3Mnp_PiX#YnGf^0^IFZWw9G_k33esK?M%2Igijam diff --git a/admin/src/main/resources/static/img/restart.png b/admin/src/main/resources/static/img/reload.png similarity index 100% rename from admin/src/main/resources/static/img/restart.png rename to admin/src/main/resources/static/img/reload.png diff --git a/admin/src/main/resources/static/img/reload_.png b/admin/src/main/resources/static/img/reload_.png new file mode 100644 index 0000000000000000000000000000000000000000..322fbf07125c04b477e69c77a1792fa53790d0e0 GIT binary patch literal 3182 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 Nginx 控制中心 - + - + - - + + @@ -180,7 +182,7 @@ }, select: [], result: [], - run: false + run: ${run?default('false')} }, methods: { onSearch: function () { @@ -269,7 +271,6 @@ } }, startMonitor: function () { - console.log(this) if (window.EventSource) { window.evtSource = new EventSource('${Uri.getUrl("/sse/1")}'); window.evtSource.addEventListener('message', function (e) { @@ -287,6 +288,36 @@ } }.bind(this)) } + }, + nginxStart: function () { + ajax.nginxStart().then(function (response) { + if (response.errors.length > 0) { + nav.e(response.errors[0].message); + } else { + this.onFind(); + this.form.dialog = false; + } + }.bind(this)) + }, + nginxStop: function () { + ajax.nginxStop().then(function (response) { + if (response.errors.length > 0) { + nav.e(response.errors[0].message); + } else { + this.onFind(); + this.form.dialog = false; + } + }.bind(this)) + }, + nginxReload: function () { + ajax.nginxReload().then(function (response) { + if (response.errors.length > 0) { + nav.e(response.errors[0].message); + } else { + this.onFind(); + this.form.dialog = false; + } + }.bind(this)) } }, created: function () {