瀏覽代碼

优化代码、优化日志输出、增加定时任务手动执行日志

mxd 3 年之前
父節點
當前提交
53cdfb02fd

+ 9 - 2
magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicTaskController.java

@@ -3,6 +3,7 @@ package org.ssssssss.magicapi.controller;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.ssssssss.magicapi.config.MagicConfiguration;
+import org.ssssssss.magicapi.logging.MagicLoggerContext;
 import org.ssssssss.magicapi.model.DebugRequest;
 import org.ssssssss.magicapi.model.JsonBean;
 import org.ssssssss.magicapi.model.MagicEntity;
@@ -24,7 +25,13 @@ public class MagicTaskController extends MagicController implements MagicExcepti
 		notNull(entity, FILE_NOT_FOUND);
 		String script = entity.getScript();
 		DebugRequest debugRequest = DebugRequest.create(request);
-		MagicScriptDebugContext magicScriptContext = debugRequest.createMagicScriptContext(configuration.getDebugTimeout());
-		return new JsonBean<>(ScriptManager.executeScript(script, magicScriptContext));
+		MagicLoggerContext.SESSION.set(debugRequest.getRequestedClientId());
+		try {
+			MagicScriptDebugContext magicScriptContext = debugRequest.createMagicScriptContext(configuration.getDebugTimeout());
+			magicScriptContext.setScriptName(MagicConfiguration.getMagicResourceService().getScriptName(entity));
+			return new JsonBean<>(ScriptManager.executeScript(script, magicScriptContext));
+		} finally {
+			MagicLoggerContext.SESSION.remove();
+		}
 	}
 }

+ 4 - 4
magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java

@@ -90,10 +90,10 @@ public class RequestHandler extends MagicController {
 						 @PathVariable(required = false) Map<String, Object> pathVariables,
 						 @RequestHeader(required = false) Map<String, Object> defaultHeaders,
 						 @RequestParam(required = false) Map<String, Object> parameters) throws Throwable {
-		String sessionId = null;
+		String clientId = null;
 		Map<String, Object> headers = new LinkedCaseInsensitiveMap<>();
 		headers.putAll(defaultHeaders);
-		boolean requestedFromTest = configuration.isEnableWeb() && (sessionId = request.getHeader(HEADER_REQUEST_CLIENT_ID)) != null && request.getHeader(HEADER_REQUEST_SCRIPT_ID) != null;
+		boolean requestedFromTest = configuration.isEnableWeb() && (clientId = request.getHeader(HEADER_REQUEST_CLIENT_ID)) != null && request.getHeader(HEADER_REQUEST_SCRIPT_ID) != null;
 		RequestEntity requestEntity = RequestEntity.create()
 				.info(requestMagicDynamicRegistry.getApiInfoFromRequest(request))
 				.request(request)
@@ -115,7 +115,7 @@ public class RequestHandler extends MagicController {
 				.forEach(paths::add);
 		Object bodyValue = readRequestBody(requestEntity.getRequest());
 		requestEntity.setRequestBody(bodyValue);
-		String scriptName = requestMagicDynamicRegistry.getMagicResourceStorage().buildScriptName(info);
+		String scriptName = MagicConfiguration.getMagicResourceService().getScriptName(info);
 		MagicScriptContext context = createMagicScriptContext(scriptName, requestEntity);
 		requestEntity.setMagicScriptContext(context);
 		try {
@@ -174,7 +174,7 @@ public class RequestHandler extends MagicController {
 				if (context instanceof MagicScriptDebugContext) {
 					WebSocketSessionManager.addMagicScriptContext(sessionAndScriptId, (MagicScriptDebugContext) context);
 				}
-				MagicLoggerContext.SESSION.set(sessionId);
+				MagicLoggerContext.SESSION.set(clientId);
 				return invokeRequest(requestEntity);
 			} finally {
 				MagicLoggerContext.remove();

+ 0 - 4
magic-api/src/main/java/org/ssssssss/magicapi/provider/MagicResourceStorage.java

@@ -70,10 +70,6 @@ public interface MagicResourceStorage<T extends MagicEntity> {
 
 	String buildMappingKey(T entity);
 
-	default String buildScriptName(T entity) {
-		return null;
-	}
-
 	default String buildKey(MagicEntity entity) {
 		return buildMappingKey((T) entity);
 	}

+ 12 - 0
magic-api/src/main/java/org/ssssssss/magicapi/service/MagicResourceService.java

@@ -2,6 +2,7 @@ package org.ssssssss.magicapi.service;
 
 import org.ssssssss.magicapi.adapter.Resource;
 import org.ssssssss.magicapi.model.*;
+import org.ssssssss.magicapi.utils.PathUtils;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -108,5 +109,16 @@ public interface MagicResourceService {
 
 	public String getGroupName(String groupId);
 
+	default String getScriptName(MagicEntity entity){
+		String fullName;
+		if(entity instanceof PathMagicEntity){
+			PathMagicEntity pme = (PathMagicEntity) entity;
+			fullName = String.format("/%s/%s(/%s/%s)", getGroupName(pme.getGroupId()), pme.getName(), getGroupPath(pme.getGroupId()), pme.getPath());
+		} else {
+			fullName = String.format("/%s/%s", getGroupName(entity.getGroupId()), entity.getName());
+		}
+		return PathUtils.replaceSlash(fullName);
+	}
+
 
 }

+ 0 - 7
magic-api/src/main/java/org/ssssssss/magicapi/service/impl/AbstractPathMagicResourceStorage.java

@@ -32,13 +32,6 @@ public abstract class AbstractPathMagicResourceStorage<T extends PathMagicEntity
 		return PathUtils.replaceSlash("/" + Objects.toString(path, "") + "/"+ Objects.toString(entity.getPath(), ""));
 	}
 
-	@Override
-	public String buildScriptName(T entity) {
-		String fullGroupName = magicResourceService.getGroupName(entity.getGroupId());
-		String fullGroupPath = magicResourceService.getGroupPath(entity.getGroupId());
-		return PathUtils.replaceSlash(String.format("/%s/%s(/%s/%s)", fullGroupName, entity.getName(), fullGroupPath, entity.getPath()));
-	}
-
 	@Override
 	public void validate(T entity) {
 		notBlank(entity.getPath(), REQUEST_PATH_REQUIRED);

+ 2 - 1
magic-api/src/main/java/org/ssssssss/magicapi/service/impl/FunctionMagicDynamicRegistry.java

@@ -3,6 +3,7 @@ package org.ssssssss.magicapi.service.impl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.event.EventListener;
+import org.ssssssss.magicapi.config.MagicConfiguration;
 import org.ssssssss.magicapi.event.FileEvent;
 import org.ssssssss.magicapi.event.GroupEvent;
 import org.ssssssss.magicapi.model.FunctionInfo;
@@ -30,7 +31,7 @@ public class FunctionMagicDynamicRegistry extends AbstractMagicDynamicRegistry<F
 	private Object lookupLambdaFunction(MagicScriptContext context, String path) {
 		FunctionInfo functionInfo = getMapping(path);
 		if (functionInfo != null) {
-			String scriptName = magicResourceStorage.buildScriptName(functionInfo);
+			String scriptName = MagicConfiguration.getMagicResourceService().getScriptName(functionInfo);
 			List<Parameter> parameters = functionInfo.getParameters();
 			return (Function<Object[], Object>) objects -> {
 				MagicScriptContext functionContext = new MagicScriptContext(context.getRootVariables());

+ 2 - 1
magic-api/src/main/java/org/ssssssss/magicapi/service/impl/RequestMagicDynamicRegistry.java

@@ -6,6 +6,7 @@ import org.springframework.context.event.EventListener;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.servlet.HandlerMapping;
 import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
+import org.ssssssss.magicapi.config.MagicConfiguration;
 import org.ssssssss.magicapi.controller.RequestHandler;
 import org.ssssssss.magicapi.event.FileEvent;
 import org.ssssssss.magicapi.event.GroupEvent;
@@ -56,7 +57,7 @@ public class RequestMagicDynamicRegistry extends AbstractMagicDynamicRegistry<Ap
 			String path = name.substring(index + 1);
 			ApiInfo info = getMapping(method.toUpperCase() + ":" + path);
 			if (info != null) {
-				String scriptName = magicResourceStorage.buildScriptName(info);
+				String scriptName = MagicConfiguration.getMagicResourceService().getScriptName(info);
 				return (MagicScriptLambdaFunction) (variables, args) -> {
 					MagicScriptContext newContext = new MagicScriptContext();
 					Map<String, Object> varMap = new LinkedHashMap<>(context.getRootVariables());

+ 22 - 6
magic-api/src/main/java/org/ssssssss/magicapi/service/impl/TaskMagicDynamicRegistry.java

@@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.TaskScheduler;
 import org.springframework.scheduling.config.CronTask;
+import org.ssssssss.magicapi.config.MagicConfiguration;
 import org.ssssssss.magicapi.event.FileEvent;
 import org.ssssssss.magicapi.event.GroupEvent;
 import org.ssssssss.magicapi.model.TaskInfo;
@@ -36,21 +37,36 @@ public class TaskMagicDynamicRegistry extends AbstractMagicDynamicRegistry<TaskI
 		processEvent(event);
 	}
 
+	@Override
+	public boolean register(TaskInfo entity) {
+		unregister(entity);
+		return super.register(entity);
+	}
+
 	@Override
 	protected boolean register(MappingNode<TaskInfo> mappingNode) {
 		TaskInfo info = mappingNode.getEntity();
 		CronTask cronTask = new CronTask(() -> {
-			try {
-				ScriptManager.executeScript(info.getScript(), new MagicScriptContext());
-			} catch (Exception e) {
-				logger.error("定时任务执行出错", e);
+			TaskInfo entity = mappingNode.getEntity();
+			String scriptName = MagicConfiguration.getMagicResourceService().getScriptName(entity);
+			if(entity.isEnabled()){
+				try {
+					logger.info("定时任务:[{}]开始执行", scriptName);
+					MagicScriptContext magicScriptContext = new MagicScriptContext();
+					magicScriptContext.setScriptName(scriptName);
+					ScriptManager.executeScript(entity.getScript(), magicScriptContext);
+				} catch (Exception e) {
+					logger.error("定时任务执行出错", e);
+				} finally {
+					logger.info("定时任务:[{}]执行完毕", scriptName);
+				}
 			}
 		}, info.getCron());
 		mappingNode.setMappingData(taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger()));
 		if(taskScheduler != null){
-			logger.debug("注册定时任务:[{}, {}, {}]", info.getName(), info.getPath(), info.getCron());
+			logger.debug("注册定时任务:[{},{}]", MagicConfiguration.getMagicResourceService().getScriptName(info), info.getCron());
 		} else {
-			logger.debug("注册定时任务失败:[{}, {}, {}], 当前 TaskScheduler 为空", info.getName(), info.getPath(), info.getCron());
+			logger.debug("注册定时任务失败:[{}, {}], 当前 TaskScheduler 为空", MagicConfiguration.getMagicResourceService().getScriptName(info), info.getCron());
 		}
 
 		return true;