콘솔로의 메시지 송신 기능 개발

- 테스트되지 않았음
main
semin.baek 5 months ago
parent 09b984796e
commit 802177878a

@ -3,6 +3,7 @@ package com.bsmlab.dfx.agent.config;
import com.fasterxml.jackson.databind.DatabindException; import com.fasterxml.jackson.databind.DatabindException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -26,6 +27,8 @@ public class AgentConfigReader {
private String applicationVersion; private String applicationVersion;
@Value("${spring.application.commitId}") @Value("${spring.application.commitId}")
private String applicationCommitId; private String applicationCommitId;
@Setter
private boolean connectedConsole;
public void loadConfigFile(String configFilePath) { public void loadConfigFile(String configFilePath) {
try { try {

@ -23,12 +23,13 @@ import java.util.*;
@Slf4j @Slf4j
public class MessageUtils { public class MessageUtils {
private static final ObjectMapper objectMapper = new ObjectMapper();
private MessageUtils() {}; private MessageUtils() {};
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static ReceiveMessageDto toReceiveMessageDto(String messageJsonString) throws IllegalMessageException, NullMessageException, InCompleteMessageException { public static ReceiveMessageDto toReceiveMessageDto(String messageJsonString) throws IllegalMessageException, NullMessageException, InCompleteMessageException {
ReceiveMessageDto receiveMessageDto = null; ReceiveMessageDto receiveMessageDto = null;
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> map = null; Map<String, Object> map = null;
try { try {
map = objectMapper.readValue(messageJsonString, new TypeReference<HashMap<String, Object>>() {}); map = objectMapper.readValue(messageJsonString, new TypeReference<HashMap<String, Object>>() {});
@ -164,7 +165,6 @@ public class MessageUtils {
} }
public static AckDto toAckDto(String messageJsonString) throws NullMessageException, IllegalMessageException { public static AckDto toAckDto(String messageJsonString) throws NullMessageException, IllegalMessageException {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> map = null; Map<String, Object> map = null;
AckDto ackDto; AckDto ackDto;
try { try {
@ -187,7 +187,6 @@ public class MessageUtils {
public static CommandDto toCommandDto(String messageJsonString) throws IllegalMessageException, NullMessageException { public static CommandDto toCommandDto(String messageJsonString) throws IllegalMessageException, NullMessageException {
CommandDto commandDto; CommandDto commandDto;
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> map = null; Map<String, Object> map = null;
try { try {
map = objectMapper.readValue(messageJsonString, new TypeReference<Map<String, Object>>() {}); map = objectMapper.readValue(messageJsonString, new TypeReference<Map<String, Object>>() {});
@ -209,7 +208,6 @@ public class MessageUtils {
AgentConfigDto.KnownAgent recipientAgent = agentConfigReader.getKnownAgent(receiveMessageDto.getRecipientHostId()); AgentConfigDto.KnownAgent recipientAgent = agentConfigReader.getKnownAgent(receiveMessageDto.getRecipientHostId());
String targetHostId = recipientAgent.getRoutingHostIdList().get(0); String targetHostId = recipientAgent.getRoutingHostIdList().get(0);
AgentConfigDto.KnownAgent knownAgent = agentConfigReader.getKnownAgent(targetHostId); AgentConfigDto.KnownAgent knownAgent = agentConfigReader.getKnownAgent(targetHostId);
ObjectMapper objectMapper = new ObjectMapper();
HttpHeaders httpHeaders = new HttpHeaders(); HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON); httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")" httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")"
@ -238,7 +236,6 @@ public class MessageUtils {
} }
} }
AgentConfigDto.KnownAgent knownAgent = agentConfigReader.getKnownAgent(targetHostId); AgentConfigDto.KnownAgent knownAgent = agentConfigReader.getKnownAgent(targetHostId);
ObjectMapper objectMapper = new ObjectMapper();
HttpHeaders httpHeaders = new HttpHeaders(); HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON); httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")" httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")"
@ -267,7 +264,6 @@ public class MessageUtils {
String url = "http://" + knownAgent.getHostName() + ":" + knownAgent.getListenPort() + "/command"; String url = "http://" + knownAgent.getHostName() + ":" + knownAgent.getListenPort() + "/command";
log.debug("StatusChecker to {} send a message UUID {}", knownAgent.getHostName(), messageUuid); log.debug("StatusChecker to {} send a message UUID {}", knownAgent.getHostName(), messageUuid);
String response = ""; String response = "";
ObjectMapper objectMapper = new ObjectMapper();
AckDto ackDto = null; AckDto ackDto = null;
response = restTemplate.postForObject(url, bodyEntity, String.class); response = restTemplate.postForObject(url, bodyEntity, String.class);
ackDto = objectMapper.readValue(response, new TypeReference<AckDto>() {}); ackDto = objectMapper.readValue(response, new TypeReference<AckDto>() {});
@ -275,7 +271,6 @@ public class MessageUtils {
} }
public static AckDto announceInformation(AgentConfigReader agentConfigReader) throws JsonProcessingException { public static AckDto announceInformation(AgentConfigReader agentConfigReader) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String messageUuid = UUID.randomUUID().toString(); String messageUuid = UUID.randomUUID().toString();
String data = objectMapper.writeValueAsString(agentConfigReader.getAgentConfigDto()); String data = objectMapper.writeValueAsString(agentConfigReader.getAgentConfigDto());
CommandDto commandDto = CommandDto.builder().commandType(CommandDto.CommandType.INFORMATION).messageUuid(messageUuid).data(data).build(); CommandDto commandDto = CommandDto.builder().commandType(CommandDto.CommandType.INFORMATION).messageUuid(messageUuid).data(data).build();
@ -291,7 +286,7 @@ public class MessageUtils {
+ agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName() + ":" + agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName() + ":"
+ agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleListenPort() + agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleListenPort()
+ "/command"; + "/command";
log.debug("StatusChecker to console {} send a message UUID {}", agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName(), messageUuid); log.debug("announceInformation to console {} send a message UUID {}", agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName(), messageUuid);
String response = ""; String response = "";
AckDto ackDto = null; AckDto ackDto = null;
response = restTemplate.postForObject(url, bodyEntity, String.class); response = restTemplate.postForObject(url, bodyEntity, String.class);
@ -299,4 +294,24 @@ public class MessageUtils {
return ackDto; return ackDto;
} }
public static AckDto announceMessageHistory(AgentConfigReader agentConfigReader, ReceiveMessageDto receiveMessageDto) throws JsonProcessingException {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")"
+ ", host ID: " + agentConfigReader.getAgentConfigDto().getMyHostId()
+ ", action: message-history"
);
HttpEntity<ReceiveMessageDto> bodyEntity = new HttpEntity<>(receiveMessageDto, httpHeaders);
RestTemplate restTemplate = new RestTemplate();
String url = (agentConfigReader.getAgentConfigDto().getStatusChecker().isConsoleSslEnabled() ? "https://" : "http://")
+ agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName() + ":"
+ agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleListenPort()
+ "/listen";
log.debug("announceMessageHistory to console {} send a message UUID {}", agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName(), receiveMessageDto.getMessageUuid());
String response = "";
AckDto ackDto = null;
response = restTemplate.postForObject(url, bodyEntity, String.class);
ackDto = objectMapper.readValue(response, new TypeReference<AckDto>() {});
return ackDto;
}
} }

@ -96,20 +96,6 @@ public class PostmanSchedulerService {
.recipientHostId(postman.getRecipientHostId()).recipientDropBoxId(postman.getRecipientDropBoxId()) .recipientHostId(postman.getRecipientHostId()).recipientDropBoxId(postman.getRecipientDropBoxId())
.routingHostList(routingHostList) .routingHostList(routingHostList)
.data(dataString).build(); .data(dataString).build();
/*
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")"
+ ", host ID: " + agentConfigReader.getAgentConfigDto().getMyHostId()
+ ", action: postman(postman-id: " + postman.getPostmanId() + ")"
);
HttpEntity<ReceiveMessageDto> bodyEntity = new HttpEntity<>(receiveMessageDto, httpHeaders);
RestTemplate restTemplate = new RestTemplate();
String url = "http://" + knownAgent.getHostName() + ":" + knownAgent.getListenPort() + "/listen";
log.debug("postman to {} send a message UUID {} (data count: {})", receiveMessageDto.getRecipientHostId(), receiveMessageDto.getMessageUuid(), dataMapList.size());
response = restTemplate.postForObject(url, bodyEntity, String.class);
AckDto ackDto = objectMapper.readValue(response, new TypeReference<AckDto>() {});
*/
log.debug("postman to {} send a message UUID {} (data count: {})", receiveMessageDto.getRecipientHostId(), receiveMessageDto.getMessageUuid(), dataMapList.size()); log.debug("postman to {} send a message UUID {} (data count: {})", receiveMessageDto.getRecipientHostId(), receiveMessageDto.getMessageUuid(), dataMapList.size());
AckDto ackDto = MessageUtils.send(this.agentConfigReader, postman.getPostmanId(), receiveMessageDto); AckDto ackDto = MessageUtils.send(this.agentConfigReader, postman.getPostmanId(), receiveMessageDto);
log.debug("postman received ack from {} ack: {}", receiveMessageDto.getRecipientHostId(), ackDto); log.debug("postman received ack from {} ack: {}", receiveMessageDto.getRecipientHostId(), ackDto);
@ -121,6 +107,12 @@ public class PostmanSchedulerService {
String postProcessingSqlId = postman.getMessage().getPostProcessingSqlId(); String postProcessingSqlId = postman.getMessage().getPostProcessingSqlId();
sqlExecuteService.update(dataSourceId, postProcessingSqlId, new HashMap<String, Object>()); sqlExecuteService.update(dataSourceId, postProcessingSqlId, new HashMap<String, Object>());
} }
if(agentConfigReader.isConnectedConsole()) {
ReceiveMessageDto.ProcessStatus processStatus = AckDto.ResultType.RECEIVE_SUCCESS == ackDto.getResult() ? ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED : ReceiveMessageDto.ProcessStatus.PROCESS_FAIL;
receiveMessageDto.setProcessStatus(processStatus);
receiveMessageDto.setReceivedTimestamp(System.currentTimeMillis());
MessageUtils.announceMessageHistory(this.agentConfigReader, receiveMessageDto);
}
} }
} }
catch (JsonProcessingException e) { catch (JsonProcessingException e) {

@ -72,10 +72,12 @@ public class StatusCheckerSchedulerService {
if(AckDto.ResultType.PROCESS_SUCCESS == ackDto.getResult()) { if(AckDto.ResultType.PROCESS_SUCCESS == ackDto.getResult()) {
// console response // console response
log.debug("console {} is ALIVE", this.agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName()); log.debug("console {} is ALIVE", this.agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName());
this.agentConfigReader.setConnectedConsole(true);
} }
else { else {
// console is down // console is down
log.debug("console {} is DOWN", this.agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName()); log.debug("console {} is DOWN", this.agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName());
this.agentConfigReader.setConnectedConsole(false);
} }
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.debug("Console {} information message is not valid then set DOWN", this.agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName()); log.debug("Console {} information message is not valid then set DOWN", this.agentConfigReader.getAgentConfigDto().getStatusChecker().getConsoleHostName());

Loading…
Cancel
Save