AlarmStateManager 스프링bean 아닌 곳에 사용할수있도록 getAlarmStateManager() 추가.
RESTProcess에 circuitbreak시, 이벤트 전달하도록 수정.
This commit is contained in:
@@ -11,14 +11,14 @@ import java.util.concurrent.TimeUnit;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.eactive.eai.common.property.PropManager;
|
||||
import com.eactive.eai.common.util.ApplicationContextProvider;
|
||||
import com.eactive.eai.common.util.Logger;
|
||||
import com.eactive.eai.custom.alarm.event.AlarmEvent;
|
||||
import com.eactive.eai.custom.alarm.key.AlarmKey;
|
||||
import com.eactive.eai.custom.alarm.policy.AlarmPolicy;
|
||||
import com.eactive.eai.custom.alarm.policy.CounterPolicy;
|
||||
import com.eactive.eai.custom.alarm.policy.SendPolicy;
|
||||
import com.eactive.eai.custom.alarm.ums.UmsService;
|
||||
import com.eactive.eai.custom.alarm.ums.payload.IUmsGsonObject;
|
||||
import com.eactive.eai.custom.alarm.ums.payload.ObpMonitoringUmsTemplate;
|
||||
import com.eactive.eai.custom.alarm.ums.payload.UmsRequestPayload;
|
||||
|
||||
@@ -31,12 +31,21 @@ public class AlarmStateManager {
|
||||
|
||||
protected static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
||||
|
||||
private static AlarmStateManager alarmStateManager;
|
||||
|
||||
@Autowired
|
||||
AlarmService alarmService;
|
||||
|
||||
@Autowired
|
||||
UmsService usmService;
|
||||
|
||||
public static AlarmStateManager getAlarmStateManager() {
|
||||
if (alarmStateManager == null) {
|
||||
alarmStateManager = ApplicationContextProvider.getContext().getBean(AlarmStateManager.class);
|
||||
}
|
||||
return alarmStateManager;
|
||||
}
|
||||
|
||||
public AlarmStateManager() {
|
||||
|
||||
this.scheduler = Executors.newSingleThreadScheduledExecutor(r -> {
|
||||
@@ -86,6 +95,7 @@ public class AlarmStateManager {
|
||||
|
||||
SendPolicy sendPolicy = sendPolicyMap.get(event.getKey());
|
||||
|
||||
send(sendPolicy, event);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -106,7 +116,8 @@ public class AlarmStateManager {
|
||||
.content(ObpMonitoringUmsTemplate.builder().message(event.getMessage()).build())
|
||||
.cellphone(cellPhone).build();
|
||||
|
||||
usmService.send(payload);
|
||||
// usmService.send(payload);
|
||||
logger.info("UMS Send!!, {}", payload);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
@@ -42,6 +42,11 @@ import com.eactive.eai.common.worker.ResponseMap;
|
||||
import com.eactive.eai.control.HttpSender;
|
||||
import com.eactive.eai.control.LogSender;
|
||||
import com.eactive.eai.control.Transform;
|
||||
import com.eactive.eai.custom.alarm.AlarmStateManager;
|
||||
import com.eactive.eai.custom.alarm.condition.AlarmCondition;
|
||||
import com.eactive.eai.custom.alarm.event.AlarmEvent;
|
||||
import com.eactive.eai.custom.alarm.key.AlarmKey;
|
||||
import com.eactive.eai.custom.alarm.key.CoreAlarmKey;
|
||||
import com.eactive.eai.env.ElinkConfig;
|
||||
import com.eactive.eai.inbound.processor.Processor;
|
||||
import com.ext.eai.common.stdmessage.STDMessageKeys;
|
||||
@@ -96,20 +101,36 @@ public class RESTProcess extends HTTPProcess {
|
||||
String circuitBreakerUseYn = PropManager.getInstance().getProperty("CircuitBreaker", "useYn");
|
||||
|
||||
try {
|
||||
if("Y".equals(circuitBreakerUseYn)){
|
||||
String apiId = reqEaiMsg.getEAISvcCd();
|
||||
CircuitBreaker circuitBreaker = CircuitBreakerManager.getInstance().getCircuitBreaker(apiId);
|
||||
if ("Y".equals(circuitBreakerUseYn)) {
|
||||
String apiId = reqEaiMsg.getEAISvcCd();
|
||||
CircuitBreaker circuitBreaker = CircuitBreakerManager.getInstance().getCircuitBreaker(apiId);
|
||||
|
||||
// ObjectMapper 인스턴스 생성
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
// ObjectMapper 인스턴스 생성
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
// 서킷 브레이커의 메트릭 정보와 상태 정보를 직접 Node로 변환
|
||||
ObjectNode combinedNode = objectMapper.createObjectNode();
|
||||
combinedNode.put("state", circuitBreaker.getState().toString());
|
||||
combinedNode.set("metrics", objectMapper.valueToTree(circuitBreaker.getMetrics()));
|
||||
// 서킷 브레이커의 메트릭 정보와 상태 정보를 직접 Node로 변환
|
||||
ObjectNode combinedNode = objectMapper.createObjectNode();
|
||||
combinedNode.put("state", circuitBreaker.getState().toString());
|
||||
combinedNode.set("metrics", objectMapper.valueToTree(circuitBreaker.getMetrics()));
|
||||
|
||||
logger.info("CircuitBreaker state " + combinedNode.toString());
|
||||
this.resObject = circuitBreaker.executeCallable(() -> HttpSender
|
||||
.callService(this.adapterGroupName, this.outboundProp, this.reqObject, this.tempProp));
|
||||
|
||||
circuitBreaker.getEventPublisher().onStateTransition(event -> {
|
||||
CircuitBreaker.State from = event.getStateTransition().getFromState();
|
||||
CircuitBreaker.State to = event.getStateTransition().getToState();
|
||||
|
||||
AlarmEvent alarmEvent = AlarmEvent.builder().key(CoreAlarmKey.CircuitBreaker)
|
||||
.condition(AlarmCondition.builder().build())
|
||||
.message(String.format("CircuitBreaker state changed. apiId=%s, %s -> %s", apiId, from, to))
|
||||
.build();
|
||||
|
||||
AlarmStateManager.getAlarmStateManager().onEvnet(alarmEvent);
|
||||
|
||||
logger.warn("CircuitBreaker state changed. apiId={}, {} -> {}", apiId, from, to);
|
||||
});
|
||||
|
||||
logger.info("CircuitBreaker state "+combinedNode.toString());
|
||||
this.resObject = circuitBreaker.executeCallable(() -> HttpSender.callService(this.adapterGroupName, this.outboundProp, this.reqObject, this.tempProp));
|
||||
}else{
|
||||
this.resObject = HttpSender.callService(this.adapterGroupName, this.outboundProp, this.reqObject, this.tempProp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user