package kr.gmtc.filter.controller; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.UnknownHostException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import javax.annotation.Resource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import gmt.common.type.LogLevelType; import gmt.common.util.GmtUtils; import gmt.common.vo.MonitorInfoVO; import gmt.common.vo.MsgObjVO; import gmt.common.vo.SystemInfoVO; import gmt.controller.GmtController; import gmt.io.client.event.GmtClientEventListener; import gmt.io.client.vo.ClientInfoVO; import gmt.io.server.event.GmtServerEventListener; import gmt.io.server.vo.ServerInfoVO; import gmt.io.server.vo.ServiceClientVO; import gmt.logger.GmtLogManager; import gmt.logger.event.IGmtLogSendHandler; import gmt.proj.gw_filter.analysis.TargetAnalysis; import gmt.proj.gw_filter.analysis.point.PointInPolygon.Point; import gmt.proj.gw_filter.rest.vo.InOutVO; import gmt.proj.gw_filter.thread.ThreadManager; import gmt.proj.gw_filter.vo.OptionVO; import gmt.status.GmtSTAManager; import gmt.status.event.IGmtHeartBeatHandler; import gmt.status.event.IGmtServicesStatusHandler; import gmt.status.event.IGmtSysStatusHandler; import kr.gmtc.filter.controller.vo.AreaVO; import kr.gmtc.filter.fso.GeofenceFilter; import kr.gmtc.filter.rest.RestManager; import kr.gmtc.filter.scheduler.vo.CountVO; import kr.gmtc.filter.scheduler.vo.ResourceVO; @Component("controller") public class MainController extends GmtController{ private String startTime; private String delimiter; private SystemInfoVO systemInfo; private GmtSTAManager statusManager; private IGmtSysStatusHandler statusHandler; private IGmtHeartBeatHandler gmsHandler; private IGmtServicesStatusHandler serviceHandler; private IGmtLogSendHandler logHandler; private TargetAnalysis targetAnalysis = new TargetAnalysis(); private ThreadManager thrManager = new ThreadManager(); private boolean isRunning; private Thread SendPakcetThread; @Resource(name = "rvo") ResourceVO rvo; @Resource(name = "countVO") CountVO countVO; @Autowired private RestManager restManager; @Autowired private GeofenceFilter geofenceFilter; private String rootPath = ""; @Value("${dmfhf.port}") private int dmfhfPort; @Value("${fso.port}") private int fsoPort; @Value("${fso.relay.port}") private int fsoRelayPort; @Value("${tgw.ip}") private String tgwIp; @Value("${tgw.serverPort}") private int tgwPort; private LocalDateTime sosSendDT = LocalDateTime.now(); private LocalDateTime posSendDT = LocalDateTime.now(); public List AreaList = new ArrayList(); private List TGWConnectList = new ArrayList(); public List FsoRelayList = new ArrayList(); public List DmfhfList = new ArrayList(); public List FSOList = new ArrayList(); protected MainController(@Value("${root}") String path) { super(path); GmtLogManager.setpath(path); startTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); delimiter = ","; systemInfo = new SystemInfoVO(); rootPath = path; logger = GmtLogManager.getInstance(); logger.writeLevelLog("[GmtLogManager] PATH : " + path, LogLevelType.LOG_INFO, "AllLog"); logHandler = new IGmtLogSendHandler() { @Override public void sendlLog(String msg, String name, LogLevelType loglevel) { sendLog(msg, name, loglevel); } }; logger.setLogSendHandler(logHandler); statusHandler = new IGmtSysStatusHandler() { @Override public void sendStatus() { String systemMsg = getSystemStatus(); rvo.setSystem(systemMsg); sendSTA(systemMsg); // logger.writeLevelLog("[SEND STATUS] " + systemMsg, LogLevelType.LOG_INFO, "FileLog", false); String clientMsg = getClientStatus(); rvo.setClient(clientMsg); sendSTA(clientMsg); // logger.writeLevelLog("[SEND STATUS] " + clientMsg, LogLevelType.LOG_INFO, "FileLog", false); String serverMsg = getServerStatus(); rvo.setServer(serverMsg); sendSTA(serverMsg); // logger.writeLevelLog("[SEND STATUS] " + serverMsg, LogLevelType.LOG_INFO, "FileLog", false); if(!systemInfo.getStatSend()) { return; } } }; statusManager = new GmtSTAManager(statusHandler, gmsHandler, serviceHandler); initSystemFromXml(path); initAreaFromXml(path); SendPakcetThread = new Thread(new Runnable() { @Override public void run() { while (isRunning) { try { SendFsoRelayPacket(); SendFsoPacket(); SendDmfhfPacket(); } finally { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }); } public void start() { super.start(); thrManager.optionThread(rootPath); thrManager.xmlThread(rootPath); thrManager.start(); statusManager.start(); restManager.start(); isRunning = true; SendPakcetThread.start(); } private void SendFsoRelayPacket() { try { List tempList = new ArrayList(); tempList.addAll(FsoRelayList); FsoRelayList.clear(); for (int i=0;i tempList = new ArrayList(); tempList.addAll(FSOList); FSOList.clear(); for (int i=0;i tempList = new ArrayList(); tempList.addAll(DmfhfList); DmfhfList.clear(); for (int i=0;i 0) { sosSendDT = LocalDateTime.now(); } //D-MFHF -> FSO 연계 broadcastServer(fsoRelayPort, encVO); FsoRelayList.add(encVO); } else if (msgs.substring(3,4).equals("5")) { //D-MFHF -> FSO 연계 count = countVO.getFso(); countVO.setFso(++count); logger.writeLevelLog("[Send Packet (D-MFHF -> FSO)] " + msgs, LogLevelType.LOG_INFO, "SendLog", false); // broadcastServer(fsoRelayPort, encVO); FsoRelayList.add(encVO); //연계상태 갱신 if (TGWConnectList.size() > 0) { posSendDT = LocalDateTime.now(); } OptionVO option = thrManager.getOptions(); if (option == null) { logger.writeLevelLog("[Send Packet] Area is null" + msgs, LogLevelType.LOG_INFO, "AllLog", false); return; } if(!targetAnalysis.AreaAnalysis(msgs, option.getArea())) { MsgObjVO mvo = encVO.getClone(); byte[] header = "!1".getBytes(); count = countVO.getFilter1(); countVO.setFilter1(++count); mvo.setMsg(addArray(header, encVO.getMsg())); logger.writeLevelLog("[Send Packet] 위경도 입력범위 초과 : " + msgs, LogLevelType.LOG_INFO, "SendLog", false); DmfhfList.add(mvo); // broadcastServer(dmfhfPort, encVO); } else { ConcurrentHashMap> districtMap = restManager.getDistrictList(); if (districtMap == null) { logger.writeLevelLog("[Send Packet] DistrictMap is null" + msgs, LogLevelType.LOG_INFO, "AllLog", false); return; } if(!targetAnalysis.DistrictAnalysis(msgs, districtMap)) { MsgObjVO mvo = encVO.getClone(); byte[] header = "!2".getBytes(); count = countVO.getFilter2(); countVO.setFilter2(++count); mvo.setMsg(addArray(header, encVO.getMsg())); logger.writeLevelLog("[Send Packet] 조업자제구역 : " + msgs, LogLevelType.LOG_INFO, "SendLog", false); DmfhfList.add(mvo); // broadcastServer(dmfhfPort, mvo); } else { String slot = msgs.substring(4, 16); InOutVO inout = restManager.getInOutList().get(slot.trim()); if (inout == null) { logger.writeLevelLog("[Send Packet] InOut is null" + msgs, LogLevelType.LOG_INFO, "AllLog", false); return; } if(!targetAnalysis.InOutAnalysis(msgs, inout.getInout_part())) { MsgObjVO mvo = encVO.getClone(); byte[] header = "!3".getBytes(); count = countVO.getFilter3(); countVO.setFilter3(++count); mvo.setMsg(addArray(header, encVO.getMsg())); logger.writeLevelLog("[Send Packet] 입항상태 : " + msgs, LogLevelType.LOG_INFO, "SendLog", false); DmfhfList.add(mvo); // broadcastServer(dmfhfPort, encVO); } } } } } else if(msgs.substring(0,3).equals("$11")) { //AIS if ( (restManager.getShipVO_MMSI(msgs.substring(4,16).trim()) == null) ) { return; } FSOList.add(encVO); // broadcastServer(fsoPort, encVO); } else if(msgs.substring(0,3).equals("$90")) { //VPASS if ( (restManager.getShipVO_RFID(msgs.substring(4,16).trim()) == null) ) { return; } FSOList.add(encVO); // broadcastServer(fsoPort, encVO); } else if(msgs.substring(0,3).equals("$19")) { //VHF-DSC if ( (restManager.getShipVO_MMSI(msgs.substring(4,16).trim()) == null) ) { return; } FSOList.add(encVO); // broadcastServer(fsoPort, encVO); } else if(msgs.substring(0,4).equals("$FSO")) { //Geofence 알람 try { if (geofenceFilter.CheckGeofence(msgs) ) { FSOList.add(encVO); // broadcastServer(fsoPort, encVO); } } catch (Exception e) { logger.writeLevelLog("[Geofence 알람 패킷 분석 실패] " + msgs, LogLevelType.LOG_ERROR, "AllLog", false); } } } private byte[] addArray(byte[] tmp, byte[] tmp2) { byte[] resultArray = new byte[tmp.length + tmp2.length]; System.arraycopy(tmp, 0, resultArray, 0, tmp.length); System.arraycopy(tmp2, 0, resultArray, tmp.length, tmp2.length); return resultArray; } @Override protected GmtClientEventListener createClientEventListener() { GmtClientEventListener listener = new GmtClientEventListener() { @Override public void readyToSend() { } @Override public void error(String ip, int port, int errorCode, String description) { } @Override public void disconnected(String ip, int port, int statusCode, String description) { String msg = "[Client Disconnect : IP[" + ip + "] / PORT [" + String.valueOf(port) + "] "; logger.writeLevelLog(msg, LogLevelType.LOG_INFO, "AllLog"); } @Override public void dataIn() { } @Override public void connectionStatus(String ip, int port, String connEvent, int statusCode, String description) { } @Override public void connected(String ip, int port, int statusCode, String description) { String msg = "[Client Connect : IP[" + ip + "] / PORT [" + String.valueOf(port) + "] "; logger.writeLevelLog(msg, LogLevelType.LOG_INFO, "AllLog"); } @Override public void SSLStatus() { } @Override public void SSLServerAuthentication() { } }; return listener; } @Override protected GmtServerEventListener createServerEventListener() { GmtServerEventListener listener = new GmtServerEventListener() { @Override public void readyToSend(int port) { } @Override public void error(int serverPort, String remoteHost, int remotePort, int errorCode, String description) { } @Override public void disconnected(int serverPort, String remoteHost, int remotePort) { String msg = "[SERVER " + String.valueOf(serverPort) + "] SC Disconnected.. IP : " + remoteHost + " PORT : " + String.valueOf(remotePort); logger.writeLevelLog(msg, LogLevelType.LOG_INFO, "AllLog"); if ( (serverPort == tgwPort) && remoteHost.equals(tgwIp) ) { TGWConnectList.remove(remoteHost); } } @Override public void dataIn(int serverPort, String remoteHost, int remotePort, String msg) { } @Override public void connected(int serverPort, String remoteHost, int remotePort) { String msg = "[SERVER " + String.valueOf(serverPort) + "] SC Connected.. IP : " + remoteHost + " PORT : " + String.valueOf(remotePort); logger.writeLevelLog(msg, LogLevelType.LOG_INFO, "AllLog"); if ((serverPort == tgwPort) && remoteHost.equals(tgwIp) ) { TGWConnectList.add(remoteHost); } } @Override public void SSLClientAuthentication(int serverPort) { } }; return listener; } @Override protected void serialDataIn(MsgObjVO vo) { } @Override protected void serverDataIn(MsgObjVO vo) { } private void sendLog(String msg, String name, LogLevelType Loglevel) { LocalDateTime dt = LocalDateTime.now(); String currentTime = dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); MsgObjVO vo = new MsgObjVO(); switch (Loglevel.ordinal()) { case 0: msg = "[" + currentTime + "] " + ":" + " TRACE " + ": " + msg; break; case 1: msg = "[" + currentTime + "] " + ":" + " DEBUG " + ": " + msg; break; case 2: msg = "[" + currentTime + "] " + ":" + " INFO " + ": " + msg; break; case 3: msg = "[" + currentTime + "] " + ":" + " WARN " + ": " + msg; break; case 4: msg = "[" + currentTime + "] " + ":" + " ERROR " + ": " + msg; break; case 5: msg = "[" + currentTime + "] " + ":" + " FATAL " + ": " + msg; break; } try { vo.setMsg(msg.getBytes("EUC-KR")); } catch (UnsupportedEncodingException e) { logger.writeLevelLog(GmtUtils.getStatckTrace(e), LogLevelType.LOG_ERROR, "fileLog"); e.printStackTrace(); } broadcastServer(systemInfo.getLogPort(), vo); } @SuppressWarnings("unchecked") public String getSystemStatus() { JSONObject data = new JSONObject(); data.put("RecvBuffer", getRcvBuffer()); data.put("SendBuffer", getSndBuffer()); data.put("Start", startTime); return makeSTA(0, 1, data); } @SuppressWarnings("unchecked") public String getClientStatus() { JSONArray data = new JSONArray(); for (int i = 0; i < clientInfoList.size(); i++) { ClientInfoVO civo = clientInfoList.get(i); MonitorInfoVO cimvo = civo.getMonitorInfo(); if (!civo.isiSUse()) { continue; } JSONObject jo1 = new JSONObject(); jo1.put("ID", civo.getId()); jo1.put("ClientName", civo.getName()); switch (civo.getActive().getName()) { case "PRIMARY": jo1.put("Active", 0); jo1.put("IP", civo.getIp()); break; case "SECONDARY": jo1.put("Active", 1); jo1.put("IP", civo.getsIp()); break; } jo1.put("Port", civo.getPort()); jo1.put("SendBuffer", cimvo.getSendQCount()); jo1.put("Connect", cimvo.isConnected()); data.add(jo1); } return makeSTA(0, 4, data); } @SuppressWarnings("unchecked") public String getServerStatus() { JSONArray data = new JSONArray(); for (int i = 0; i < serverInfoList.size(); i++) { ServerInfoVO sivo = serverInfoList.get(i); MonitorInfoVO mvo = sivo.getMonitorInfo(); JSONObject jo2 = new JSONObject(); jo2.put("ID", sivo.getId()); jo2.put("ServerName", sivo.getName()); jo2.put("ServerPort", sivo.getPort()); jo2.put("SCCount", sivo.getServiceClientCount()); jo2.put("SendBuffer", mvo.getSendQCount()); jo2.put("Use", sivo.isUseFlag()); int sport = sivo.getPort(); JSONArray ja1 = new JSONArray(); if (sivo.getServiceClientCount() != 0) { Object[] keys = serverScInfoList.keySet().toArray(); for (int j = 0; j < keys.length; j++) { ServiceClientVO scvo = serverScInfoList.get(keys[j]); MonitorInfoVO mvo2 = scvo.getMonitorInfoVO(); JSONObject jo1 = new JSONObject(); int scport = scvo.getServerPort(); if (sport == scport) { jo1.put("ID", scvo.getId()); jo1.put("ServiceName", scvo.getName()); jo1.put("ServiceIP", scvo.getIp()); jo1.put("ServicePort", scvo.getServicePort()); jo1.put("SendBuffer", scvo.getReSendQ().size()); jo1.put("Connect", mvo2.isConnected()); ja1.add(jo1); } } } jo2.put("SC", ja1); data.add(jo2); } return makeSTA(0, 3, data); } @SuppressWarnings("unchecked") private String makeSTA(int msgGroup, int msgId, JSONObject data) { JSONObject header = new JSONObject(); String sendDT = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); header.put("SendDT", sendDT); header.put("MsgGroup", msgGroup); header.put("MsgID", msgId); JSONObject response = new JSONObject(); response.put("Header", header); response.put("Data", data); JSONArray array = new JSONArray(); array.add(response); JSONObject result = new JSONObject(); result.put("result", array); return result.toString(); } @SuppressWarnings("unchecked") private String makeSTA(int msgGroup, int msgId, JSONArray data) { JSONObject header = new JSONObject(); String sendDT = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); header.put("SendDT", sendDT); header.put("MsgGroup", msgGroup); header.put("MsgID", msgId); JSONObject response = new JSONObject(); response.put("Header", header); response.put("Data", data); JSONArray array = new JSONArray(); array.add(response); JSONObject result = new JSONObject(); result.put("result", array); return result.toString(); } public String makeHeader() { String headers = ""; String packetId = "$STA01"+delimiter; String sendTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+delimiter; String sourceProcessNm = "TGW"+delimiter; // 패킷생성 Process String sourceIp = ""; try { sourceIp = InetAddress.getLocalHost().getHostAddress()+delimiter;//출발지 IP (자기 IP) } catch (UnknownHostException e) { e.printStackTrace(); } String destProcessNm = ""+delimiter; //수신 Process 명 String destIP = ""+delimiter; //목적지 IP headers = packetId +sendTime +sourceProcessNm +sourceIp +destProcessNm +destIP; return headers; } /*gicoms add*/ private void sendSTA(String msg) { try { if (msg.equals("") || msg == null) { return; } MsgObjVO vo = new MsgObjVO(); vo.setMsg(msg.getBytes("EUC-KR")); int port = systemInfo.getStatPort(); broadcastServer(port, vo); } catch (Exception e) { logger.writeLevelLog("[SEND STATUS] " + GmtUtils.getStatckTrace(e), LogLevelType.LOG_INFO, "FileLog", false); } } private void initAreaFromXml(String dirpath) { try { String rpath = ""; if (dirpath.equals("")) { String root = System.getProperty("user.dir"); rpath = root + "/cfg/Area.xml"; } else { rpath = dirpath + "/cfg/Area.xml"; } File file = new File(rpath); boolean isExists = file.exists(); if (!isExists) { logger.writeLevelLog("The file does not exist in the directory. [" + rpath + "]", LogLevelType.LOG_ERROR, "AllLog"); return; } DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes = doc.getElementsByTagName("AREA"); for (int i = 0; i < nodes.getLength(); i++) { Node clientNode = nodes.item(i); for (Node child = clientNode.getFirstChild(); child != null; child = child.getNextSibling()) { if (child.getNodeType() != Node.ELEMENT_NODE) { continue; } AreaVO avo = new AreaVO(); Element childElement = (Element) child; if (childElement.getNodeName().equals("Zone")) { avo.setZone_id(childElement.getAttribute("Id")); avo.setZone_nm(childElement.getAttribute("Name")); avo.setZone_cd(childElement.getAttribute("Code")); } AreaList.add(avo); } } } catch (Exception e) { e.printStackTrace(); } } private void initSystemFromXml(String dirpath) { try { String rpath = ""; if (dirpath.equals("")) { String root = System.getProperty("user.dir"); rpath = root + "/cfg/system.xml"; } else { rpath = dirpath + "/cfg/system.xml"; } File file = new File(rpath); boolean isExists = file.exists(); if (!isExists) { logger.writeLevelLog("The file does not exist in the directory. [" + rpath + "]", LogLevelType.LOG_ERROR, "AllLog"); return; } DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes = doc.getElementsByTagName("System"); for (int i = 0; i < nodes.getLength(); i++) { Node clientNode = nodes.item(i); for (Node child = clientNode.getFirstChild(); child != null; child = child.getNextSibling()) { if (child.getNodeType() != Node.ELEMENT_NODE) { continue; } Element childElement = (Element) child; if (childElement.getNodeName().equals("Info")) { systemInfo.setName(childElement.getAttribute("Name")); systemInfo.setIp(childElement.getAttribute("IP")); systemInfo.setHa(GmtUtils.strToIntDef(childElement.getAttribute("HA"), -1)); } else if (child.getNodeName().equals("Option")) { systemInfo.setBufSize(GmtUtils.strToIntDef(childElement.getAttribute("BufSize"), -1)); } else if (child.getNodeName().equals("Log")) { systemInfo.setLogLevel(GmtUtils.strToIntDef(childElement.getAttribute("Level"), -1)); systemInfo.setLogPort(GmtUtils.strToIntDef(childElement.getAttribute("Port"), -1)); } else if (child.getNodeName().equals("Stat")) { systemInfo.setStatChktime(GmtUtils.strToIntDef(childElement.getAttribute("CheckTime"), -1)); systemInfo.setUpdateTime(GmtUtils.strToIntDef(childElement.getAttribute("UpdateTime"), -1)); systemInfo.setStatSendTime(GmtUtils.strToIntDef(childElement.getAttribute("SndTime"), -1)); systemInfo.setStatSend(Boolean.parseBoolean(childElement.getAttribute("IsSend"))); systemInfo.setStatPort(GmtUtils.strToIntDef(childElement.getAttribute("Port"), -1)); } } } } catch (Exception e) { e.printStackTrace(); } } public SystemInfoVO getSystemInfo() { return systemInfo; } public void setSystemInfo(SystemInfoVO systemInfo) { this.systemInfo = systemInfo; } //Monitoring @SuppressWarnings("unchecked") @GetMapping(value = "/rest/serverStatus") public JSONArray loadServerStatusInfo() throws Exception{ JSONArray data = new JSONArray(); for (int i = 0; i < serverInfoList.size(); i++) { ServerInfoVO sivo = serverInfoList.get(i); MonitorInfoVO mvo = sivo.getMonitorInfo(); JSONObject jo2 = new JSONObject(); jo2.put("ID", sivo.getId()); jo2.put("ServerName", sivo.getName()); jo2.put("ServerPort", sivo.getPort()); jo2.put("SCCount", sivo.getServiceClientCount()); jo2.put("SendBuffer", mvo.getSendQCount()); jo2.put("Use", sivo.isUseFlag()); int sport = sivo.getPort(); JSONArray ja1 = new JSONArray(); if (sivo.getServiceClientCount() != 0) { Object[] keys = serverScInfoList.keySet().toArray(); for (int j = 0; j < keys.length; j++) { ServiceClientVO scvo = serverScInfoList.get(keys[j]); MonitorInfoVO mvo2 = scvo.getMonitorInfoVO(); JSONObject jo1 = new JSONObject(); int scport = scvo.getServerPort(); if (sport == scport) { jo1.put("ID", scvo.getId()); jo1.put("ServiceName", scvo.getName()); jo1.put("ServiceIP", scvo.getIp()); jo1.put("ServicePort", scvo.getServicePort()); jo1.put("SendBuffer", scvo.getReSendQ().size()); jo1.put("Connect", mvo2.isConnected()); ja1.add(jo1); } } } jo2.put("SC", ja1); data.add(jo2); } return data; } @SuppressWarnings("unchecked") @GetMapping(value = "/rest/clientStatus") public JSONArray loadClientStatusInfo() throws Exception{ JSONArray data = new JSONArray(); for (int i = 0; i < clientInfoList.size(); i++) { ClientInfoVO civo = clientInfoList.get(i); MonitorInfoVO cimvo = civo.getMonitorInfo(); if (!civo.isiSUse()) { continue; } JSONObject jo1 = new JSONObject(); jo1.put("ID", civo.getId()); jo1.put("ClientName", civo.getName()); switch (civo.getActive().getName()) { case "PRIMARY": jo1.put("Active", 0); jo1.put("IP", civo.getIp()); break; case "SECONDARY": jo1.put("Active", 1); jo1.put("IP", civo.getsIp()); break; } jo1.put("Port", civo.getPort()); jo1.put("SendBuffer", cimvo.getSendQCount()); jo1.put("RecvBuffer", cimvo.getRecvQCount()); jo1.put("Connect", cimvo.isConnected()); data.add(jo1); } return data; } @SuppressWarnings("unchecked") @GetMapping(value = "/rest/systemStatus") public JSONObject loadSystemStatusInfo() throws Exception{ JSONObject data = new JSONObject(); data.put("RecvBuffer", getRcvBuffer()); data.put("SendBuffer", getSndBuffer()); data.put("Start", startTime); return data; } public LocalDateTime getSosSendDT() { return this.sosSendDT; } public LocalDateTime getPosSendDT() { return this.posSendDT; } }