에이전트 정보 수신 진행중

에이전트의 데이터 메시지 수신 기능 개발
 - 테스트되지 않았음
main
semin.baek 5 months ago
parent 9bf05da49a
commit 66e9a715bb

@ -71,3 +71,32 @@ 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_AGENT_MESSAGE_HISTORY (
SENDER_AGENT_ID VARCHAR(256) NOT NULL
, SENDER_TS TIMESTAMP
, RECIPIENT_AGENT_ID VARCHAR(256) NOT NULL
, RECIPIENT_TS TIMESTAMP
, MESSAGE_UUID VARCHAR(36) NOT NULL
, MESSAGE_TYPE_CODE VARCHAR(64)
, CONSOLE_RECEIVE_TS TIMESTAMP
, PROCESS_STATUS_CODE VARCHAR(64)
, MESSAGE_DATA TEXT
, CONSTRAINT PK_DFX_AGENT_MESSAGE_HISTORY PRIMARY KEY (SENDER_AGENT_ID, MESSAGE_UUID)
);
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.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_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';
COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.MESSAGE_DATA IS '메시지 데이터';

@ -24,4 +24,33 @@ VALUES (
'DROPBOX_TASK_TYPE', 'RECEIVE_FILE', '파일 수신 후 파일 저장', '파일을 수신하여 파일로 저장한다.', 2, NULL, 'Y'
);
INSERT INTO TB_CODE (
CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN
)
VALUES (
'MESSAGE_TYPE', 'TRANSFER_DB_TO_DB', 'DB to DB 전달', '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 (
'MESSAGE_TYPE', 'TRANSFER_FILE', 'FILE to FILE 전달', '파일을 로드하여 파일 형태로 전달한다.', 2, NULL, 'Y'
);
INSERT INTO TB_CODE (
CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN
)
VALUES (
'PROCESS_STATUS', 'PROCESS_DONE', '프로세스 완료', '프로세스 완료', 1, NULL, 'Y'
);
INSERT INTO TB_CODE (
CODE_GROUP, CODE_NAME, CODE_VALUE, CODE_DESCRIPTION, ORDER_NO, PARENT_CODE_NAME, USE_YN
)
VALUES (
'PROCESS_STATUS', 'PROCESS_FAIL', '프로세스 실패', '프로세스 실패', 2, NULL, 'Y'
);
INSERT INTO TB_DFX_USER (USER_UUID, USER_EMAIL, USER_PASSWORD, USER_NICK) VALUES ('dad9f3b6-45bf-49f9-85c5-1a83810d921c', 'smbaek@bsm-lab.com', 'qortpals1!', '백세민');

@ -5,6 +5,7 @@ import lombok.*;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
@ToString
@Getter
@ -20,6 +21,7 @@ public class ReceiveMessageDto implements Serializable {
private long receivedTimestamp;
private String recipientHostId;
private String recipientDropBoxId;
private List<RoutingHost> routingHostList;
private String data;
private List<String> attachFileList;// = new ArrayList<>();
private ProcessStatus processStatus;
@ -30,4 +32,11 @@ public class ReceiveMessageDto implements Serializable {
PROCESS_NOT_POSSIBLE,
PROCESS_FAIL
}
@Data
@Builder
public static class RoutingHost implements Serializable {
private String hostId;
private long receivedTimestamp;
}
}

@ -3,6 +3,8 @@ package com.bsmlab.dfx.dfxconsole.app.agent;
import com.bsmlab.dfx.agent.config.AgentConfigDto;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentInfoDto;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentInfoService;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryService;
import com.bsmlab.dfx.dfxconsole.framework.support.ResponseUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.RequiredArgsConstructor;
@ -20,6 +22,7 @@ import java.util.Map;
@Slf4j
public class DfxAgentInfoController {
private final DfxAgentInfoService dfxAgentInfoService;
private final DfxAgentMessageHistoryService dfxAgentMessageHistoryService;
@PostMapping("/app-api/agent/getAgentInfoDtoList")
public ResponseEntity<List<DfxAgentInfoDto>> agentConfigDtoList() {
@ -45,4 +48,10 @@ public class DfxAgentInfoController {
return ResponseEntity.internalServerError().body(ResponseUtils.toExceptionResponseDto(e));
}
}
@PostMapping("/app-api/agent/getAgentMessageHistoryDtoList")
public ResponseEntity<List<DfxAgentMessageHistoryDto>> getAgentMessageHistoryDtoList() {
List<DfxAgentMessageHistoryDto> dfxAgentMessageHistoryDtoList = dfxAgentMessageHistoryService.selectDfxAgentMessageHistoryDtoList();
return ResponseEntity.ok().body(dfxAgentMessageHistoryDtoList);
}
}

@ -0,0 +1,23 @@
package com.bsmlab.dfx.dfxconsole.app.agent.service;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class DfxAgentMessageHistoryDto {
private String senderAgentId;
private String senderHostName;
private long senderTs;
private String recipientAgentId;
private String recipientHostName;
private long recipientTs;
private String messageUuid;
private String messageTypeCode;
private long consoleReceiveTs;
private String processStatusCode;
private String messageData;
}

@ -0,0 +1,12 @@
package com.bsmlab.dfx.dfxconsole.app.agent.service;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface DfxAgentMessageHistoryMapper {
List<DfxAgentMessageHistoryDto> selectDfxAgentMessageHistoryList();
DfxAgentMessageHistoryDto selectDfxAgentMessageHistoryBySenderAgentIdAndMessageUuid(DfxAgentMessageHistoryDto dfxAgentMessageHistoryDto);
void insertDfxAgentMessageHistory(DfxAgentMessageHistoryDto dfxAgentMessageHistoryDto);
}

@ -0,0 +1,19 @@
package com.bsmlab.dfx.dfxconsole.app.agent.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
@Slf4j
public class DfxAgentMessageHistoryService {
private final DfxAgentMessageHistoryMapper dfxAgentMessageHistoryMapper;
public List<DfxAgentMessageHistoryDto> selectDfxAgentMessageHistoryDtoList() {
List<DfxAgentMessageHistoryDto> dfxAgentMessageHistoryDtoList = dfxAgentMessageHistoryMapper.selectDfxAgentMessageHistoryList();
return dfxAgentMessageHistoryDtoList;
}
}

@ -26,6 +26,12 @@ public class ListenerController {
@PostMapping(value = "/listen")
public AckDto listener(HttpServletRequest request) {
AckDto ackDto = AckDto.builder().build();
try {
String bodyString = ServletUtils.getBodyString(request);
ackDto = listenerService.receiveMessage(bodyString);
} catch (IOException e) {
ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText(e.getLocalizedMessage()).messageUuid("").build();
}
return ackDto;
}

@ -3,11 +3,15 @@ package com.bsmlab.dfx.dfxconsole.app.communicate.service;
import com.bsmlab.dfx.agent.config.AgentConfigDto;
import com.bsmlab.dfx.agent.listener.dto.AckDto;
import com.bsmlab.dfx.agent.listener.dto.CommandDto;
import com.bsmlab.dfx.agent.listener.dto.ReceiveMessageDto;
import com.bsmlab.dfx.agent.support.MessageUtils;
import com.bsmlab.dfx.agent.support.exception.IllegalMessageException;
import com.bsmlab.dfx.agent.support.exception.InCompleteMessageException;
import com.bsmlab.dfx.agent.support.exception.NullMessageException;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentInfoDto;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentInfoService;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto;
import com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -16,11 +20,15 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
@RequiredArgsConstructor
public class ListenerService {
private final DfxAgentInfoService dfxAgentInfoService;
private final DfxAgentMessageHistoryMapper dfxAgentMessageHistoryMapper;
public AckDto receiveCommand(String messageJsonString) {
AckDto ackDto;
@ -56,4 +64,35 @@ public class ListenerService {
dfxAgentInfoService.saveDfxAgentInfoDto(dfxAgentInfoDto);
}
}
/**
* .
* recipientHostId myHostId hostId myHostId .
* . (MessageUtils.transfer)
* @param messageJsonString
* @return
*/
public AckDto receiveMessage(String messageJsonString) {
AckDto ackDto = null;
try {
ReceiveMessageDto receiveMessageDto = MessageUtils.toReceiveMessageDto(messageJsonString);
DfxAgentMessageHistoryDto dfxAgentMessageHistoryDto = DfxAgentMessageHistoryDto.builder()
.senderAgentId(receiveMessageDto.getSenderHostId())
.senderTs(receiveMessageDto.getSenderTimestamp())
.recipientAgentId(receiveMessageDto.getRecipientHostId())
.recipientTs(receiveMessageDto.getReceivedTimestamp())
.messageUuid(receiveMessageDto.getMessageUuid())
.messageTypeCode(receiveMessageDto.getMessageType().name())
.consoleReceiveTs(System.currentTimeMillis())
.processStatusCode(receiveMessageDto.getProcessStatus().name())
.messageData(receiveMessageDto.getData())
.build();
dfxAgentMessageHistoryMapper.insertDfxAgentMessageHistory(dfxAgentMessageHistoryDto);
ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build();
} catch (IllegalMessageException | NullMessageException | InCompleteMessageException e) {
log.error("{}", e, e);
ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText(e.getLocalizedMessage()).build();
}
return ackDto;
}
}

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryMapper">
<select id="selectDfxAgentMessageHistoryList" resultType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto">
<![CDATA[
SELECT A.SENDER_AGENT_ID, TO_CHAR(A.SENDER_TS, 'YYYY-MM-DD HH24:MI:SS') AS SENDER_TS, A.RECIPIENT_AGENT_ID, TO_CHAR(A.RECIPIENT_TS, 'YYYY-MM-DD HH24:MI:SS') AS RECIPIENT_TS, A.MESSAGE_UUID, A.MESSAGE_TYPE_CODE, TO_CHAR(A.CONSOLE_RECEIVE_TS, 'YYYY-MM-DD HH24:MI:SS') AS CONSOLE_RECEIVE_TS, A.PROCESS_STATUS_CODE, A.MESSAGE_DATA
, B.HOST_NAME AS SENDER_HOST_NAME, C.HOST_NAME AS RECIPIENT_HOST_NAME
FROM (
SELECT SENDER_AGENT_ID, SENDER_TS, RECIPIENT_AGENT_ID, RECIPIENT_TS, MESSAGE_UUID, MESSAGE_TYPE_CODE, CONSOLE_RECEIVE_TS, PROCESS_STATUS_CODE, MESSAGE_DATA
FROM TB_DFX_AGENT_MESSAGE_HISTORY
WHERE 1 = 1
ORDER BY CONSOLE_RECEIVE_TS
LIMIT 20
OFFSET (1 - 1) * 20
) A
JOIN TB_DFX_AGENT_INFO B ON (A.SENDER_AGENT_ID = B.AGENT_ID)
JOIN TB_DFX_AGENT_INFO C ON (A.RECIPIENT_AGENT_ID = C.AGENT_ID)
WHERE 1 = 1
AND A.SENDER_AGENT_ID = #{senderAgentId}
AND A.MESSAGE_UUID = #{messageUuid}
]]>
</select>
<select id="selectDfxAgentMessageHistoryBySenderAgentIdAndMessageUuid" parameterType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto" resultType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto">
<![CDATA[
SELECT A.SENDER_AGENT_ID, TO_CHAR(A.SENDER_TS, 'YYYY-MM-DD HH24:MI:SS') AS SENDER_TS, A.RECIPIENT_AGENT_ID, TO_CHAR(A.RECIPIENT_TS, 'YYYY-MM-DD HH24:MI:SS') AS RECIPIENT_TS, A.MESSAGE_UUID, A.MESSAGE_TYPE_CODE, TO_CHAR(A.CONSOLE_RECEIVE_TS, 'YYYY-MM-DD HH24:MI:SS') AS CONSOLE_RECEIVE_TS, A.PROCESS_STATUS_CODE, A.MESSAGE_DATA
, B.HOST_NAME AS SENDER_HOST_NAME, C.HOST_NAME AS RECIPIENT_HOST_NAME
FROM TB_DFX_AGENT_MESSAGE_HISTORY A
JOIN TB_DFX_AGENT_INFO B ON (A.SENDER_AGENT_ID = B.AGENT_ID)
JOIN TB_DFX_AGENT_INFO C ON (A.RECIPIENT_AGENT_ID = C.AGENT_ID)
WHERE 1 = 1
AND A.SENDER_AGENT_ID = #{senderAgentId}
AND A.MESSAGE_UUID = #{messageUuid}
]]>
</select>
<insert id="insertDfxAgentMessageHistory" parameterType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto">
<![CDATA[
INSERT INTO TB_DFX_AGENT_MESSAGE_HISTORY (
SENDER_AGENT_ID, SENDER_TS, RECIPIENT_AGENT_ID, RECIPIENT_TS, MESSAGE_UUID, MESSAGE_TYPE_CODE, CONSOLE_RECEIVE_TS, PROCESS_STATUS_CODE, MESSAGE_DATA
)
VALUES (
#{senderAgentId}, #{senderTs}, #{recipientAgentId}, #{recipientTs}, #{messageUuid}, #{messageTypeCode}, #{consoleReceiveTs}, #{processStatusCode}, #{messageData}
)
]]>
</insert>
</mapper>
Loading…
Cancel
Save