SessionManager 캐시 조회 관리 API 추가 (/manage/session)
SessionManagerForIgnite/SessionManagerForEhcache가 관리하는 login, http-login, evict-master, terminal, convert-user-id, socket, outbound-access-token 캐시를 조회할 수 있는 관리용 API를 추가한다. outbound-access-token 캐시는 Ignite 백엔드에서만 지원하며, Ehcache 백엔드에서는 success=false로 응답하고 500을 반환하지 않는다.
This commit is contained in:
@@ -246,6 +246,8 @@ public abstract class SessionManager implements Lifecycle {
|
||||
|
||||
public abstract CacheInfoVO getSocketCache();
|
||||
|
||||
public abstract CacheInfoVO getOutboundAccessTokenCache();
|
||||
|
||||
public abstract String getMasterInstId();
|
||||
|
||||
// Convert terminalId to userId
|
||||
|
||||
@@ -887,7 +887,12 @@ public class SessionManagerForEhcache extends SessionManager {
|
||||
public CacheInfoVO getSocketCache() {
|
||||
return convert(cacheSocket);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public CacheInfoVO getOutboundAccessTokenCache() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putWebSocketTimeout(String key, SessionVO value) {
|
||||
cacheWebSocketTimeout.put(new Element(key, value));
|
||||
|
||||
@@ -818,6 +818,11 @@ public class SessionManagerForIgnite extends SessionManager {
|
||||
public CacheInfoVO getSocketCache() {
|
||||
return convert(cacheSocket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CacheInfoVO getOutboundAccessTokenCache() {
|
||||
return convert(cacheOutBoundAccessToken);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putWebSocketTimeout(String key, SessionVO value) {
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.eactive.eai.manage.session;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.eactive.eai.common.session.CacheInfoVO;
|
||||
|
||||
/**
|
||||
* SessionManager(SessionManagerForIgnite/SessionManagerForEhcache) 캐시 상태 모니터링 API.
|
||||
*
|
||||
* GET /manage/session/cache/status → 전체 캐시 요약 (구현체별 XML 텍스트, Ignite/Ehcache)
|
||||
* GET /manage/session/cache/all → 개별 캐시(login/http-login/evict-master/terminal/convert-user-id/socket) 목록
|
||||
* GET /manage/session/cache/login → 로그인(WebSocket) 캐시
|
||||
* GET /manage/session/cache/http-login → HTTP 로그인 캐시
|
||||
* GET /manage/session/cache/evict-master → 싱글 어댑터 evict master 캐시
|
||||
* GET /manage/session/cache/terminal → 단말(ATM 등) 캐시
|
||||
* GET /manage/session/cache/convert-user-id → 단말ID → 사용자ID 변환 캐시
|
||||
* GET /manage/session/cache/socket → 소켓 세션 캐시
|
||||
* GET /manage/session/cache/outbound-access-token → 아웃바운드 AccessTokenVO 캐시 (Ignite 백엔드에서만 지원)
|
||||
* GET /manage/session/master-inst-id → 현재 evict master 인스턴스명
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/manage/session")
|
||||
public class SessionCacheManageController {
|
||||
|
||||
@Autowired
|
||||
private SessionCacheManageService sessionCacheManageService;
|
||||
|
||||
@GetMapping("/cache/status")
|
||||
public ResponseEntity<?> getCacheStatus() {
|
||||
return ok(sessionCacheManageService.getCacheStatus());
|
||||
}
|
||||
|
||||
@GetMapping("/master-inst-id")
|
||||
public ResponseEntity<?> getMasterInstId() {
|
||||
return ok(sessionCacheManageService.getMasterInstId());
|
||||
}
|
||||
|
||||
@GetMapping("/cache/all")
|
||||
public ResponseEntity<?> getAllCaches() {
|
||||
List<CacheInfoVO> list = sessionCacheManageService.getAllCaches();
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("success", true);
|
||||
result.put("data", list);
|
||||
result.put("count", list.size());
|
||||
return ResponseEntity.ok(result);
|
||||
}
|
||||
|
||||
@GetMapping("/cache/login")
|
||||
public ResponseEntity<?> getLoginCache() {
|
||||
return ok(sessionCacheManageService.getLoginCache());
|
||||
}
|
||||
|
||||
@GetMapping("/cache/http-login")
|
||||
public ResponseEntity<?> getHttpLoginCache() {
|
||||
return ok(sessionCacheManageService.getHttpLoginCache());
|
||||
}
|
||||
|
||||
@GetMapping("/cache/evict-master")
|
||||
public ResponseEntity<?> getEvictMasterCache() {
|
||||
return ok(sessionCacheManageService.getEvictMasterCache());
|
||||
}
|
||||
|
||||
@GetMapping("/cache/terminal")
|
||||
public ResponseEntity<?> getTerminalCache() {
|
||||
return ok(sessionCacheManageService.getTerminalCache());
|
||||
}
|
||||
|
||||
@GetMapping("/cache/convert-user-id")
|
||||
public ResponseEntity<?> getConvertUserIdCache() {
|
||||
return ok(sessionCacheManageService.getConvertUserIdCache());
|
||||
}
|
||||
|
||||
@GetMapping("/cache/socket")
|
||||
public ResponseEntity<?> getSocketCache() {
|
||||
return ok(sessionCacheManageService.getSocketCache());
|
||||
}
|
||||
|
||||
@GetMapping("/cache/outbound-access-token")
|
||||
public ResponseEntity<?> getOutboundAccessTokenCache() {
|
||||
try {
|
||||
return ok(sessionCacheManageService.getOutboundAccessTokenCache());
|
||||
} catch (UnsupportedOperationException e) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("success", false);
|
||||
result.put("message", "현재 SessionManager 백엔드는 OutboundAccessToken 캐시를 지원하지 않습니다.");
|
||||
return ResponseEntity.ok(result);
|
||||
}
|
||||
}
|
||||
|
||||
private ResponseEntity<?> ok(Object data) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("success", true);
|
||||
result.put("data", data);
|
||||
return ResponseEntity.ok(result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.eactive.eai.manage.session;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.eactive.eai.common.session.CacheInfoVO;
|
||||
import com.eactive.eai.common.session.SessionManager;
|
||||
|
||||
/**
|
||||
* SessionManager(SessionManagerForIgnite/SessionManagerForEhcache) 캐시 조회를 위임하는 서비스.
|
||||
*
|
||||
* SessionManager.getInstance() 는 설정(session_manager.cacheType)에 따라 Ignite/Ehcache
|
||||
* 구현체 중 하나의 싱글턴을 반환하며, 두 구현체 모두 아래 조회 메서드를 지원한다.
|
||||
*/
|
||||
@Service
|
||||
public class SessionCacheManageService {
|
||||
|
||||
public String getCacheStatus() {
|
||||
return SessionManager.getInstance().getCacheStatus();
|
||||
}
|
||||
|
||||
public String getMasterInstId() {
|
||||
return SessionManager.getInstance().getMasterInstId();
|
||||
}
|
||||
|
||||
public CacheInfoVO getLoginCache() {
|
||||
return SessionManager.getInstance().getLoginCache();
|
||||
}
|
||||
|
||||
public CacheInfoVO getHttpLoginCache() {
|
||||
return SessionManager.getInstance().getHttpLoginCache();
|
||||
}
|
||||
|
||||
public CacheInfoVO getEvictMasterCache() {
|
||||
return SessionManager.getInstance().getEvictMasterCache();
|
||||
}
|
||||
|
||||
public CacheInfoVO getTerminalCache() {
|
||||
return SessionManager.getInstance().getTerminalCache();
|
||||
}
|
||||
|
||||
public CacheInfoVO getConvertUserIdCache() {
|
||||
return SessionManager.getInstance().getConvertUserIdCache();
|
||||
}
|
||||
|
||||
public CacheInfoVO getSocketCache() {
|
||||
return SessionManager.getInstance().getSocketCache();
|
||||
}
|
||||
|
||||
public CacheInfoVO getOutboundAccessTokenCache() {
|
||||
return SessionManager.getInstance().getOutboundAccessTokenCache();
|
||||
}
|
||||
|
||||
public List<CacheInfoVO> getAllCaches() {
|
||||
List<CacheInfoVO> result = new ArrayList<>();
|
||||
result.add(getLoginCache());
|
||||
result.add(getHttpLoginCache());
|
||||
result.add(getEvictMasterCache());
|
||||
result.add(getTerminalCache());
|
||||
result.add(getConvertUserIdCache());
|
||||
result.add(getSocketCache());
|
||||
try {
|
||||
result.add(getOutboundAccessTokenCache());
|
||||
} catch (UnsupportedOperationException e) {
|
||||
// Ehcache 백엔드는 OutboundAccessToken 캐시를 지원하지 않는다.
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user