From 5e962963a8d0bea985a17379662cafb7a6462839 Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Mon, 1 Sep 2025 20:17:34 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=84=EC=86=A1=20=EC=9D=B4=EB=A0=A5=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=A7=84=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database/create-database.sql | 45 ++++++++++++++--- src/database/create-initial-data.sql | 38 +++++++++++++++ .../agent/listener/dto/ReceiveMessageDto.java | 1 + .../app/agent/service/DfxAgentInfoMapper.java | 4 ++ .../agent/service/DfxAgentInfoService.java | 30 ++++++++++++ .../service/DfxAgentMessageHistoryDto.java | 4 +- .../app/agent/service/DfxDropboxDto.java | 2 +- .../app/agent/service/DfxPostmanDto.java | 23 +++++++++ .../resources/mapper/app/dfx-agent-config.xml | 48 ++++++++++++++++++- .../mapper/app/dfx-agent-message-history.xml | 24 +++++----- 10 files changed, 197 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxPostmanDto.java diff --git a/src/database/create-database.sql b/src/database/create-database.sql index a0b6f2c..790e3ae 100644 --- a/src/database/create-database.sql +++ b/src/database/create-database.sql @@ -57,7 +57,7 @@ COMMENT ON COLUMN TB_DFX_AGENT_INFO.SETTINGS_DATA IS '에이전스 설정 파일 CREATE TABLE TB_DFX_DROPBOX ( AGENT_ID VARCHAR(256) NOT NULL , DROPBOX_ID VARCHAR(256) NOT NULL - , TASK_TYPE VARCHAR(64) NOT NULL + , TASK_TYPE_CODE VARCHAR(64) NOT NULL , DATA_SOURCE_ID VARCHAR(256) , SQL_ID VARCHAR(256) , DESCRIPTION VARCHAR(2048) @@ -66,18 +66,47 @@ CREATE TABLE TB_DFX_DROPBOX ( COMMENT ON TABLE TB_DFX_DROPBOX IS 'DROPBOX 설정'; COMMENT ON COLUMN TB_DFX_DROPBOX.AGENT_ID IS '에이전트ID'; COMMENT ON COLUMN TB_DFX_DROPBOX.DROPBOX_ID IS 'DROPBOX ID'; -COMMENT ON COLUMN TB_DFX_DROPBOX.TASK_TYPE IS 'CODE DROPBOX_TASK_TYPE'; +COMMENT ON COLUMN TB_DFX_DROPBOX.TASK_TYPE_CODE IS 'CODE DROPBOX_TASK_TYPE'; COMMENT ON COLUMN TB_DFX_DROPBOX.DATA_SOURCE_ID IS 'DATA SOURCE ID'; COMMENT ON COLUMN TB_DFX_DROPBOX.SQL_ID IS 'SQL_ID'; COMMENT ON COLUMN TB_DFX_DROPBOX.DESCRIPTION IS 'DESCRIPTION'; +CREATE TABLE TB_DFX_POSTMAN ( + AGENT_ID VARCHAR(256) NOT NULL + , POSTMAN_ID VARCHAR(256) NOT NULL + , POSTMAN_TASK_TYPE_CODE VARCHAR(64) NOT NULL + , POSTMAN_ACTION_TYPE_CODE VARCHAR(64) NOT NULL + , POSTMAN_ACTION_CRON VARCHAR(32) + , DATA_SOURCE_ID VARCHAR(256) + , SQL_ID VARCHAR(256) + , POST_PROCESSING_SQL_ID VARCHAR(256) + , RECIPIENT_AGENT_ID VARCHAR(256) + , RECIPIENT_DROPBOX_ID VARCHAR(256) + , DESCRIPTION VARCHAR(2048) + , CONSTRAINT PK_DFX_POSTMAN PRIMARY KEY (AGENT_ID, POSTMAN_ID) +); +COMMENT ON TABLE TB_DFX_POSTMAN IS 'DROPBOX 설정'; +COMMENT ON COLUMN TB_DFX_POSTMAN.AGENT_ID IS '에이전트ID'; +COMMENT ON COLUMN TB_DFX_POSTMAN.POSTMAN_ID IS 'POSTMAN ID'; +COMMENT ON COLUMN TB_DFX_POSTMAN.POSTMAN_TASK_TYPE_CODE IS 'CODE_GROUP: POSTMAN_TASK_TYPE'; +COMMENT ON COLUMN TB_DFX_POSTMAN.POSTMAN_ACTION_TYPE_CODE IS 'CODE_GROUP: POSTMAN_ACTION_TYPE'; +COMMENT ON COLUMN TB_DFX_POSTMAN.POSTMAN_ACTION_CRON IS 'POSTMAN ACTION CRON'; +COMMENT ON COLUMN TB_DFX_POSTMAN.DATA_SOURCE_ID IS 'POSTMAN DATA_SOURCE_ID'; +COMMENT ON COLUMN TB_DFX_POSTMAN.SQL_ID IS '전송데이터 조회 SQL_ID'; +COMMENT ON COLUMN TB_DFX_POSTMAN.POST_PROCESSING_SQL_ID IS '후처리 SQL ID'; +COMMENT ON COLUMN TB_DFX_POSTMAN.RECIPIENT_AGENT_ID IS '수신자 에이전트ID'; +COMMENT ON COLUMN TB_DFX_POSTMAN.RECIPIENT_DROPBOX_ID IS '수신자 DROPBOX ID'; +COMMENT ON COLUMN TB_DFX_POSTMAN.DESCRIPTION IS '설명'; + CREATE TABLE TB_DFX_AGENT_MESSAGE_HISTORY ( - SENDER_AGENT_ID VARCHAR(256) NOT NULL + MESSAGE_UUID VARCHAR(36) NOT NULL + , SENDER_AGENT_ID VARCHAR(256) NOT NULL + , SENDER_POSTMAN_ID VARCHAR(256) NOT NULL , SENDER_TS TIMESTAMPTZ(3) , RECIPIENT_AGENT_ID VARCHAR(256) NOT NULL + , RECIPIENT_DROPBOX_ID VARCHAR(256) NOT NULL , RECIPIENT_TS TIMESTAMPTZ(3) - , MESSAGE_UUID VARCHAR(36) NOT NULL , MESSAGE_TYPE_CODE VARCHAR(64) , CONSOLE_RECEIVE_TS TIMESTAMPTZ(3) , PROCESS_STATUS_CODE VARCHAR(64) @@ -89,11 +118,13 @@ CREATE TABLE TB_DFX_AGENT_MESSAGE_HISTORY ( CREATE INDEX IX_DFX_AGENT_MESSAGE_HISTORY_1 ON TB_DFX_AGENT_MESSAGE_HISTORY (RECIPIENT_AGENT_ID); CREATE INDEX IX_DFX_AGENT_MESSAGE_HISTORY_2 ON TB_DFX_AGENT_MESSAGE_HISTORY (CONSOLE_RECEIVE_TS); COMMENT ON TABLE TB_DFX_AGENT_MESSAGE_HISTORY IS '에이전트간 메시지 송신 이력'; -COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.SENDER_AGENT_ID IS '송신 에이전트ID'; +COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.MESSAGE_UUID IS 'MESSAGE UUID'; +COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.SENDER_AGENT_ID IS '송신 에이전트 ID'; +COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.SENDER_POSTMAN_ID IS '송신 에이전트 POSTMAN ID'; COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.SENDER_TS IS '송신 시간'; -COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.RECIPIENT_AGENT_ID IS '수신 에이전트ID'; +COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.RECIPIENT_AGENT_ID IS '수신 에이전트 ID'; +COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.RECIPIENT_DROPBOX_ID IS '수신 DROPBOX ID'; COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.RECIPIENT_TS IS '수신 시간'; -COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.MESSAGE_UUID IS 'MESSAGE UUID'; COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.MESSAGE_TYPE_CODE IS '메시지 타입 코드 CODE_GROUP: MESSAGE_TYPE'; COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.CONSOLE_RECEIVE_TS IS '콘솔 수신 시간'; COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.PROCESS_STATUS_CODE IS '프로세스 상태 코드 CODE_GROUP: PROCESS_STATUS'; diff --git a/src/database/create-initial-data.sql b/src/database/create-initial-data.sql index bc0612d..389de1c 100644 --- a/src/database/create-initial-data.sql +++ b/src/database/create-initial-data.sql @@ -50,6 +50,44 @@ VALUES ( 'PROCESS_STATUS', 'PROCESS_FAIL', '프로세스 실패', '프로세스 실패', 2, NULL, 'Y' ); +INSERT INTO TB_CODE ( + CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN +) +VALUES ( + 'POSTMAN_TASK_TYPE', 'DB_READ_THEN_SEND', 'DB 로드 및 전송', 'DB 로드 및 전송', 1, NULL, 'Y' +); +INSERT INTO TB_CODE ( + CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN +) +VALUES ( + 'POSTMAN_TASK_TYPE', 'FILE_READ_THEN_SEND', '파일 로드 및 전송', '파일 로드 및 및 전송', 2, NULL, 'Y' +); +INSERT INTO TB_CODE ( + CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN +) +VALUES ( + 'POSTMAN_TASK_TYPE', 'RECEIVE_DB_TO_DB_SAVE', 'DB 데이터 수신 및 저장', 'DB 데이터 수신 및 저장', 3, NULL, 'Y' +); +INSERT INTO TB_CODE ( + CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN +) +VALUES ( + 'POSTMAN_TASK_TYPE', 'RECEIVE_FILE', '파일 수신 및 저장', '파일 수신 및 저장', 4, NULL, 'Y' +); + +INSERT INTO TB_CODE ( + CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN +) +VALUES ( + 'POSTMAN_ACTION_TYPE', 'TRIGGER', '신호동작', '신호동작', 1, NULL, 'Y' +); +INSERT INTO TB_CODE ( + CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN +) +VALUES ( + 'POSTMAN_ACTION_TYPE', 'SCHEDULED', '주기동작', '주기동작', 2, NULL, 'Y' +); + diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java index 48551df..36ff060 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java @@ -16,6 +16,7 @@ import java.util.Map; public class ReceiveMessageDto implements Serializable { private String senderHostId; private long senderTimestamp; + private String senderPostmanId; private String messageUuid; private AgentConfigDto.MessageType messageType; private long receivedTimestamp; diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoMapper.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoMapper.java index 8fae2be..72e7e5d 100644 --- a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoMapper.java +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoMapper.java @@ -13,5 +13,9 @@ public interface DfxAgentInfoMapper { List selectDfxDropboxList(); DfxDropboxDto selectDfxDropboxByAgentIdAndDropBoxId(DfxDropboxDto dfxDropboxDto); void insertDfxDropbox(DfxDropboxDto dfxDropboxDto); + int deleteDfxDropboxByAgentId(DfxAgentInfoDto dfxAgentInfoDto); int deleteDfxDropboxByAgentIdAndDropboxId(DfxDropboxDto dfxDropboxDto); + void insertDfxPostman(DfxPostmanDto dfxPostmanDto); + int updateDfxPostman(DfxPostmanDto dfxPostmanDto); + int deleteDfxPostmanByAgentId(DfxAgentInfoDto dfxAgentInfoDto); } diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java index cbfad11..e4b7bac 100644 --- a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java @@ -39,6 +39,36 @@ public class DfxAgentInfoService { } } + public void saveDetailForRefreshDfxAgentInfoDto(DfxAgentInfoDto dfxAgentInfoDto) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + AgentConfigDto agentConfigDto = objectMapper.readValue(dfxAgentInfoDto.getSettingsData(), new TypeReference(){}); + dfxAgentInfoMapper.deleteDfxDropboxByAgentId(dfxAgentInfoDto); + List dropBoxList = agentConfigDto.getDropBoxConfig().getDropBoxList(); + if(dropBoxList != null && dropBoxList.size() > 0) { + for(AgentConfigDto.DropBox dropBox : dropBoxList) { + DfxDropboxDto dfxDropboxDto = DfxDropboxDto.builder().agentId(dfxAgentInfoDto.getAgentId()) + .dropboxId(dropBox.getDropBoxId()).dataSourceId(dropBox.getDataSourceId()).sqlId(dropBox.getSqlId()) + .taskTypeCode(dropBox.getTaskType().name()).description(dropBox.getDescription()) + .build(); + dfxAgentInfoMapper.insertDfxDropbox(dfxDropboxDto); + } + } + dfxAgentInfoMapper.deleteDfxPostmanByAgentId(dfxAgentInfoDto); + List postmanList = agentConfigDto.getPostmanConfig().getPostmanList(); + if(postmanList != null && postmanList.size() > 0) { + for(AgentConfigDto.Postman postman : postmanList) { + DfxPostmanDto dfxPostmanDto = DfxPostmanDto.builder().agentId(dfxAgentInfoDto.getAgentId()).postmanId(postman.getPostmanId()) + .postmanTaskTypeCode(postman.getTaskType().name()).postmanActionTypeCode(postman.getAction().getType().name()) + .postmanActionCron(postman.getAction().getCron()).dataSourceId(postman.getMessage().getDataSourceId()) + .sqlId(postman.getMessage().getSqlId()).postProcessingSqlId(postman.getMessage().getPostProcessingSqlId()) + .recipientAgentId(postman.getRecipientHostId()).recipientDropboxId(postman.getRecipientDropBoxId()) + .description(postman.getDescription()) + .build(); + dfxAgentInfoMapper.insertDfxPostman(dfxPostmanDto); + } + } + } + public AgentConfigDto getDfxAgentConfigDto(String agentId) throws JsonProcessingException { DfxAgentInfoDto dfxAgentInfoDto = null; dfxAgentInfoDto = dfxAgentInfoMapper.selectDfxAgentInfoByAgentId(DfxAgentInfoDto.builder().agentId(agentId).build()); diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentMessageHistoryDto.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentMessageHistoryDto.java index a04017c..ee96f3a 100644 --- a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentMessageHistoryDto.java +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentMessageHistoryDto.java @@ -9,15 +9,17 @@ import lombok.*; @Builder @ToString public class DfxAgentMessageHistoryDto { + private String messageUuid; private String senderAgentId; private String senderHostName; + private String senderPostmanId; private long senderTs; private String senderTimeString; private String recipientAgentId; private String recipientHostName; + private String recipientDropboxId; private long recipientTs; private String recipientTimeString; - private String messageUuid; private String messageTypeCode; private long consoleReceiveTs; private String consoleReceiveTimeString; diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxDropboxDto.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxDropboxDto.java index a22c1fe..e11d913 100644 --- a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxDropboxDto.java +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxDropboxDto.java @@ -11,7 +11,7 @@ import lombok.*; public class DfxDropboxDto { private String agentId; private String dropboxId; - private String taskType; + private String taskTypeCode; private String dataSourceId; private String sqlId; private String description; diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxPostmanDto.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxPostmanDto.java new file mode 100644 index 0000000..98f877c --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxPostmanDto.java @@ -0,0 +1,23 @@ +package com.bsmlab.dfx.dfxconsole.app.agent.service; + +import lombok.*; + +@NoArgsConstructor +@AllArgsConstructor +@Builder +@Getter +@Setter +@ToString +public class DfxPostmanDto { + private String agentId; + private String postmanId; + private String postmanTaskTypeCode; + private String postmanActionTypeCode; + private String postmanActionCron; + private String dataSourceId; + private String sqlId; + private String postProcessingSqlId; + private String recipientAgentId; + private String recipientDropboxId; + private String description; +} diff --git a/src/main/resources/mapper/app/dfx-agent-config.xml b/src/main/resources/mapper/app/dfx-agent-config.xml index 4f82a74..337a3b3 100644 --- a/src/main/resources/mapper/app/dfx-agent-config.xml +++ b/src/main/resources/mapper/app/dfx-agent-config.xml @@ -85,11 +85,57 @@ ]]> - + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/app/dfx-agent-message-history.xml b/src/main/resources/mapper/app/dfx-agent-message-history.xml index 93a90e8..b356dfb 100644 --- a/src/main/resources/mapper/app/dfx-agent-message-history.xml +++ b/src/main/resources/mapper/app/dfx-agent-message-history.xml @@ -4,11 +4,11 @@