Jelajahi Sumber

add dbms-pool-status api

HANTE 3 bulan lalu
induk
melakukan
16b4d542d3

+ 10 - 10
utic-incident-common/src/main/java/com/utic/incident/common/aspect/SqlOperationAspect.java

@@ -41,17 +41,17 @@ public class SqlOperationAspect extends AbstractLoggingAspect {
         String paramValue = null;
         String paramValue2 = null;
 
-        // 실행된 메서드의 파라미터 이름과 어노테이션의 param 값 비교
+        // 실행된 메서드의 파라미터 이름과 어노테이션의 param 값 비교
         String[] paramNames = signature.getParameterNames();
         for (int ii = 0; ii < paramNames.length; ii++) {
             if (!Objects.equals(param, "")) {
                 if (paramNames[ii].equalsIgnoreCase(param)) {
-                    paramValue = String.valueOf(args[ii]);  // 해당 값 추출
+                    paramValue = String.valueOf(args[ii]);  // 해당 값 추출
                 }
             }
             if (!Objects.equals(param, "") && !Objects.equals(param2, "")) {
                 if (paramNames[ii].equalsIgnoreCase(param2)) {
-                    paramValue2 = String.valueOf(args[ii]);  // 해당 값 추출
+                    paramValue2 = String.valueOf(args[ii]);  // 해당 값 추출
                 }
             }
         }
@@ -60,27 +60,27 @@ public class SqlOperationAspect extends AbstractLoggingAspect {
         long executionTime;
         Object result;
         try {
-            result = joinPoint.proceed();  // SQL 실행
+            result = joinPoint.proceed();  // SQL 실행
         } catch (Exception e) {
             executionTime = System.currentTimeMillis() - start;
             log.error("[{}] {}: Exception: {}", type, LogUtils.elapsedLog(tableName, executionTime), e.getMessage());
             if (signature.getReturnType().equals(int.class)) {
-                return -1;  // int 반환 타입 예외 발생 시 -1 반환
+                return -1;  // int 반환 타입 예외 발생 시 -1 반환
             }
 
             if (Objects.requireNonNull(sqlOperation.type()) == SqlOperation.SqlType.SELECT) {
-                return null;  // SELECT 예외 발생 시 null 반환
+                return null;  // SELECT 예외 발생 시 null 반환
             }
-            return -1;  // 예외 발생 시 -1 반환
+            return -1;  // 예외 발생 시 -1 반환
         }
         executionTime = System.currentTimeMillis() - start;
 
         int count = 1;
         if (signature.getReturnType().equals(int.class)) {
-            count = (int)result;  // int 반환 타입 처리
+            count = (int)result;  // int 반환 타입 처리
         } else if (signature.getReturnType().equals(List.class)) {
-            List<?> list = (List<?>)result;  // List 반환 타입 처리
-            count = list.size();  // List의 크기 계산
+            List<?> list = (List<?>)result;  // List 반환 타입 처리
+            count = list.size();  // List의 크기 계산
         }
 
         if (!Objects.equals(param, "") && paramValue == null) {

+ 45 - 0
utic-incident-molit/src/main/java/com/utic/incident/molit/server/controller/IncidentMolitRestController.java

@@ -0,0 +1,45 @@
+package com.utic.incident.molit.server.controller;
+
+import com.utic.incident.molit.server.dto.ConnectionPoolStatusDto;
+import com.zaxxer.hikari.HikariDataSource;
+import com.zaxxer.hikari.HikariPoolMXBean;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@RestController("/api")
+@RequiredArgsConstructor
+public class IncidentMolitRestController {
+
+    private final DataSource dataSource;
+
+    @GetMapping("/dbms-pool-status")
+    public ResponseEntity<?> getConnectionPoolStatus() {
+        if (dataSource instanceof HikariDataSource) {
+            HikariDataSource hikariDataSource = (HikariDataSource) dataSource;
+            HikariPoolMXBean poolMXBean = hikariDataSource.getHikariPoolMXBean();
+
+            ConnectionPoolStatusDto status = new ConnectionPoolStatusDto(
+                    poolMXBean.getActiveConnections(),
+                    poolMXBean.getIdleConnections(),
+                    poolMXBean.getTotalConnections(),
+                    poolMXBean.getThreadsAwaitingConnection()
+            );
+
+            return ResponseEntity.ok(status);
+        } else {
+            Map<String, String> error = new HashMap<>();
+            error.put("error", "DataSource is not HikariCP");
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
+        }
+    }
+
+}

+ 16 - 0
utic-incident-molit/src/main/java/com/utic/incident/molit/server/dto/ConnectionPoolStatusDto.java

@@ -0,0 +1,16 @@
+package com.utic.incident.molit.server.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ConnectionPoolStatusDto {
+    private int activeConnections;
+    private int idleConnections;
+    private int totalConnections;
+    private int threadsAwaitingConnection;
+
+}