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 6dc6142..7bf8112 100644 Binary files a/admin/src/main/resources/nginx-1.14.2.zip and b/admin/src/main/resources/nginx-1.14.2.zip differ 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 0000000..322fbf0 Binary files /dev/null and b/admin/src/main/resources/static/img/reload_.png differ diff --git a/admin/src/main/resources/static/js/ajax.js b/admin/src/main/resources/static/js/ajax.js index 34c8a52..4863e74 100644 --- a/admin/src/main/resources/static/js/ajax.js +++ b/admin/src/main/resources/static/js/ajax.js @@ -103,6 +103,24 @@ window.ajax = { data: data }) }, + nginxStart: function (data) { + return jsonRequest({ + method: "nginx.start", + data: data + }) + }, + nginxStop: function (data) { + return jsonRequest({ + method: "nginx.stop", + data: data + }) + }, + nginxReload: function (data) { + return jsonRequest({ + method: "nginx.reload", + data: data + }) + }, fileUpload: function (file) { var fd = new FormData(); fd.append("file", file); diff --git a/admin/src/main/resources/templates/screen/mapping.ftl b/admin/src/main/resources/templates/screen/mapping.ftl index 00f4364..6f0ef4f 100644 --- a/admin/src/main/resources/templates/screen/mapping.ftl +++ b/admin/src/main/resources/templates/screen/mapping.ftl @@ -16,21 +16,23 @@ 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 () {