diff --git a/src/docs/settings-examples/dfxagent.json b/src/docs/settings-examples/dfxagent.json index 6891334..4688348 100644 --- a/src/docs/settings-examples/dfxagent.json +++ b/src/docs/settings-examples/dfxagent.json @@ -1,8 +1,6 @@ { - "who-am-i": { - "host-id": "first-agent", - "listen-port": 16801 - }, + "host-id": "first-agent", + "listen-port": 16801, "known-agent": [ { "host-id": "second-agent", @@ -52,13 +50,35 @@ { "postman-id": "postman1", "task-type": "DB_READ_THEN_SEND", + "action": { + "type": "TRIGGER", + "command": "runSelectSomeThenSend", + "parameters-key-list": ["REG_DATE_FROM", "REG_DATE_TO"] + }, + "message": { + "message-type": "SAVE_DB_DATA", + "dataSourceId": "dfcms", + "sql-id": "dfcms.selectSome" + }, + "recipient-host-id": "third-agent", + "recipient-drop-box-id": "drop3", + "routing-host-id-list": ["first-agent", "second-agent", "third-agent"] + }, + { + "postman-id": "postman2", + "task-type": "DB_READ_THEN_SEND", + "action": { + "type": "SCHEDULED", + "cron": "1 0 3 * * *" + }, "message": { "message-type": "SAVE_DB_DATA", "dataSourceId": "dfcms", "sql-id": "dfcms.selectSome" }, "recipient-host-id": "third-agent", - "recipient-drop-box-id": "drop3" + "recipient-drop-box-id": "drop3", + "routing-host-id-list": ["first-agent", "second-agent", "third-agent"] } ] } diff --git a/src/main/java/com/bsmlab/dfx/agent/config/Settings.java b/src/main/java/com/bsmlab/dfx/agent/config/Settings.java index 2bbe58b..eab491d 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/Settings.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/Settings.java @@ -2,6 +2,7 @@ package com.bsmlab.dfx.agent.config; import com.bsmlab.dfx.agent.config.datasource.DataSourceDto; import com.bsmlab.dfx.agent.task.dropbox.DropBoxDto; +import com.bsmlab.dfx.agent.task.postman.PostmanDto; import com.fasterxml.jackson.databind.DatabindException; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; @@ -25,11 +26,15 @@ public class Settings { private String messageStorageRootPath; private Map dropBoxDtoMap = new HashMap<>(); private Resource[] mapperLocations; + private int listenPort = 12345; + private Map postmanDtoMap; + public void loadSettingFile(String settingFilePath) { try { ObjectMapper objectMapper = new ObjectMapper(); Map settingMap = objectMapper.readValue(new File(settingFilePath), Map.class); this.mapperLocations = this.createMapperLocations(settingMap); + this.listenPort = (Integer)settingMap.get("listen-port"); log.debug("settingMap: {}", settingMap); this.parseDataSources(settingMap); this.parseDropBoxes(settingMap); @@ -77,7 +82,6 @@ public class Settings { messageStorageRootFile.mkdirs(); } List> dropBoxMapList = (List>)dropBoxSettingMap.get("drop-box-list"); - //TODO drop-box executor 개발 -> ListenerController for(Map dropBoxMap : dropBoxMapList) { DropBoxDto dropBoxDto = DropBoxDto.builder() .dropBoxId(dropBoxMap.get("drop-box-id")).taskType(dropBoxMap.get("task-type")) @@ -88,6 +92,14 @@ public class Settings { } } + private void parsePostman(Map settingMap) { + Map postmanDtoMap = new HashMap<>(); + Map postmanSettingMap = (Map)settingMap.get("postman"); + + + + } + public Resource[] getMapperLocations() { return this.mapperLocations; } @@ -107,4 +119,8 @@ public class Settings { public DropBoxDto getDropBoxDto(String dropBoxId) { return this.dropBoxDtoMap.get(dropBoxId); } + + public int getListenPort() { + return this.listenPort; + } } diff --git a/src/main/java/com/bsmlab/dfx/agent/config/WebServerCustomizer.java b/src/main/java/com/bsmlab/dfx/agent/config/WebServerCustomizer.java new file mode 100644 index 0000000..8552989 --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/agent/config/WebServerCustomizer.java @@ -0,0 +1,20 @@ +package com.bsmlab.dfx.agent.config; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +@RequiredArgsConstructor +public class WebServerCustomizer implements WebServerFactoryCustomizer { + private final Settings settings; + @Override + public void customize(ConfigurableServletWebServerFactory factory) { + int port = settings.getListenPort(); + factory.setPort(port); + factory.setContextPath("/"); + } +} diff --git a/src/main/java/com/bsmlab/dfx/agent/config/constant/ActionType.java b/src/main/java/com/bsmlab/dfx/agent/config/constant/ActionType.java new file mode 100644 index 0000000..1ae13ae --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/agent/config/constant/ActionType.java @@ -0,0 +1,6 @@ +package com.bsmlab.dfx.agent.config.constant; + +public enum ActionType { + TRIGGER, + SCHEDULED +} diff --git a/src/main/java/com/bsmlab/dfx/agent/config/constant/TaskType.java b/src/main/java/com/bsmlab/dfx/agent/config/constant/TaskType.java new file mode 100644 index 0000000..2307f65 --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/agent/config/constant/TaskType.java @@ -0,0 +1,5 @@ +package com.bsmlab.dfx.agent.config.constant; + +public enum TaskType { + DB_READ_THEN_SEND +} diff --git a/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorService.java b/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorService.java index 1fa76cf..277b9f6 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorService.java @@ -1,14 +1,12 @@ package com.bsmlab.dfx.agent.task; import com.bsmlab.dfx.agent.config.Settings; -import com.bsmlab.dfx.agent.config.constant.MessageType; import com.bsmlab.dfx.agent.config.datasource.SqlExecuteService; import com.bsmlab.dfx.agent.listener.dto.ReceiveMessageDto; import com.bsmlab.dfx.agent.task.dropbox.DropBoxDto; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.EnumUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -24,7 +22,7 @@ public class TaskExecutorService { private final SqlExecuteService sqlExecuteService; @Async("threadPoolTaskExecutor") - public void process(String messageFilePath) { + public void processDropBox(String messageFilePath) { try (ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(messageFilePath))) { ReceiveMessageDto receiveMessageDto = (ReceiveMessageDto)objectInputStream.readObject(); DropBoxDto dropBoxDto = settings.getDropBoxDto(receiveMessageDto.getRecipientDropBoxId()); @@ -49,4 +47,9 @@ public class TaskExecutorService { throw new RuntimeException(e); } } + + @Async("threadPoolTaskExecutor") + public void processPostman() { + + } } diff --git a/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorStarter.java b/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorStarter.java index c25424d..b4b70de 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorStarter.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/TaskExecutorStarter.java @@ -1,5 +1,6 @@ package com.bsmlab.dfx.agent.task; +import com.bsmlab.dfx.agent.config.Settings; import com.bsmlab.dfx.agent.task.dropbox.DropBoxService; import io.micrometer.common.util.StringUtils; import jakarta.annotation.PostConstruct; @@ -13,6 +14,7 @@ import org.springframework.stereotype.Component; public class TaskExecutorStarter { private final DropBoxService dropBoxService; private final TaskExecutorService taskExecutorService; + private final Settings settings; @PostConstruct public void run() { @@ -21,7 +23,7 @@ public class TaskExecutorStarter { Thread.sleep(10); String messageFilePath = dropBoxService.poll(); if(StringUtils.isNotBlank(messageFilePath)) { - taskExecutorService.process(messageFilePath); + taskExecutorService.processDropBox(messageFilePath); } } catch (InterruptedException e) { log.error("{}", e, e); diff --git a/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanDto.java b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanDto.java new file mode 100644 index 0000000..4525f8f --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanDto.java @@ -0,0 +1,35 @@ +package com.bsmlab.dfx.agent.task.postman; + +import com.bsmlab.dfx.agent.config.constant.ActionType; +import com.bsmlab.dfx.agent.config.constant.MessageType; +import com.bsmlab.dfx.agent.config.constant.TaskType; +import lombok.Builder; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +public class PostmanDto { + private String postmanId; + private TaskType taskType; + private PostmanActionType postmanActionType; + private PostmanMessageType postmanMessageType; + private String recipientHostId; + private String recipientDropBoxId; + private List routingHostIdList; + + public class PostmanActionType { + private ActionType actionType; + private String command; + private List parameterKeyList = new ArrayList<>(); + private String cron; + } + public class PostmanMessageType { + private MessageType messageType; + private String dataSourceId; + private String sqlId; + } + +}