From c3e1dca4c271497a85faf75511a64eba95e216d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=A7=80=EC=9D=B8?= Date: Fri, 10 Oct 2025 14:19:25 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20API=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=ED=99=94=EB=A9=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiManagementController.java | 77 +++ .../webapp/WEB-INF/views/admins/frame/top.jsp | 1 + .../WEB-INF/views/admins/main/index.jsp | 1 + .../webapp/WEB-INF/views/admins/main/main.jsp | 1 + .../mgmtApi/api-request-statistics-index.jsp | 589 ++++++++++++++++++ .../WEB-INF/views/admins/mgmtApi/left.jsp | 92 +++ .../webapp/images/admins/mgmtApi/1_tit_01.gif | Bin 0 -> 6403 bytes 7 files changed, 761 insertions(+) create mode 100644 src/main/java/geoinfo/admins/apiManagement/ApiManagementController.java create mode 100644 src/main/webapp/WEB-INF/views/admins/mgmtApi/api-request-statistics-index.jsp create mode 100644 src/main/webapp/WEB-INF/views/admins/mgmtApi/left.jsp create mode 100644 src/main/webapp/images/admins/mgmtApi/1_tit_01.gif diff --git a/src/main/java/geoinfo/admins/apiManagement/ApiManagementController.java b/src/main/java/geoinfo/admins/apiManagement/ApiManagementController.java new file mode 100644 index 0000000..95a43d8 --- /dev/null +++ b/src/main/java/geoinfo/admins/apiManagement/ApiManagementController.java @@ -0,0 +1,77 @@ +package geoinfo.admins.apiManagement; + +import java.net.URLEncoder; +import java.security.SecureRandom; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.log4j.Logger; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Sheet; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import egovframework.com.cmm.service.EgovProperties; +import egovframework.rte.psl.dataaccess.util.EgovMap; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import geoinfo.admins.board.RefrncRoomController; +import geoinfo.admins.user.service.GeneralUserMngService; +import geoinfo.admins.user.service.HomeTrainingService; +import geoinfo.com.EgovExcel; +import geoinfo.com.GeoinfoCommon; +import geoinfo.comm.util.ScriptUtil; +import geoinfo.session.UserInfo; +import geoinfo.util.MyUtil; +import whois.whoisSMS; + + + +@Controller +public class ApiManagementController { + @Resource(name = "generalUserMngService") + private GeneralUserMngService masterService; + + @Resource(name = "homeTrainingService") + private HomeTrainingService homeTrainingService; + + /** + * 집합교육 화면 + * @param params + * @param model + * @param response + * @param request + * @return + * @throws Exception + */ + @RequestMapping(value = "admins/mgmtApi/mgmt-api-index.do") + public String goMgmtApiIndex(@RequestParam HashMap params, ModelMap model, HttpServletResponse response, HttpServletRequest request) throws Exception { + + if (!UserInfo.isValidSession(request, response, "admin")) { + return ""; + } + + model.addAttribute("params", params); + return "admins/mgmtApi/api-request-statistics-index"; + } +} diff --git a/src/main/webapp/WEB-INF/views/admins/frame/top.jsp b/src/main/webapp/WEB-INF/views/admins/frame/top.jsp index 85afeba..ccffdc7 100644 --- a/src/main/webapp/WEB-INF/views/admins/frame/top.jsp +++ b/src/main/webapp/WEB-INF/views/admins/frame/top.jsp @@ -17,6 +17,7 @@ Ǽ + API diff --git a/src/main/webapp/WEB-INF/views/admins/main/index.jsp b/src/main/webapp/WEB-INF/views/admins/main/index.jsp index 7de36a7..86ff2a5 100644 --- a/src/main/webapp/WEB-INF/views/admins/main/index.jsp +++ b/src/main/webapp/WEB-INF/views/admins/main/index.jsp @@ -142,6 +142,7 @@ document.addEventListener('keyup', function(e) { 건설현장 관리 + API 관리 diff --git a/src/main/webapp/WEB-INF/views/admins/main/main.jsp b/src/main/webapp/WEB-INF/views/admins/main/main.jsp index afbcc91..921ed64 100644 --- a/src/main/webapp/WEB-INF/views/admins/main/main.jsp +++ b/src/main/webapp/WEB-INF/views/admins/main/main.jsp @@ -113,6 +113,7 @@ document.addEventListener('keyup', function(e) { 건설현장 관리 + API 관리 diff --git a/src/main/webapp/WEB-INF/views/admins/mgmtApi/api-request-statistics-index.jsp b/src/main/webapp/WEB-INF/views/admins/mgmtApi/api-request-statistics-index.jsp new file mode 100644 index 0000000..82c3ba7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/admins/mgmtApi/api-request-statistics-index.jsp @@ -0,0 +1,589 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + + + + + + + + + + + + +
+

📈 일일 접속량

+ +
+ +
+ +
+
+

API 호출 현황

+ +
+ +
+
+
+
+
호출 성공
+ 3초 이내 응답 +
+
+
0%
+
+ +
+
+
+
+
호출 실패
+ API 실패 +
+
+
0%
+
+ +
+
+
🕓
+
+
호출 지연
+ 3초 초과 지연 +
+
+
0%
+
+ +
+
+
⚠️
+
+
호출 오류
+ 오류 응답 +
+
+
0%
+
+
+ + +
+
+

API 호출 통제

+ +
+ +
+
+
+
프로젝트 관련 데이터 갯수(전체 합)
+
사용자 작업용 API
+
+ +
+ +
+
+
프로젝트 관련 데이터 갯수 (시추 개별)
+
사용자 작업용 API
+
+ +
+ +
+
+
시추정보 관련 데이터 갯수
+
사용자 작업용 API
+
+ +
+ + + +
+
+
사업(프로젝트)정보
+
사용자 작업용 API
+
+ +
+ +
+
+
지질정보
+
사용자 작업용 API
+
+ +
+ +
+
+
전기비저항탐사시험
+
사용자 작업용 API
+
+ +
+ +
+
+
굴절법탄성파
+
사용자 작업용 API
+
+ +
+ +
+
+
시추정보
+
사용자 작업용 API
+
+ +
+ +
+
+
지층정보
+
사용자 작업용 API
+
+ +
+ +
+
+
표준관입시험
+
사용자 작업용 API
+
+ +
+ +
+
+
절리정보
+
사용자 작업용 API
+
+ +
+ +
+
+
TCR RQD 시험정보
+
사용자 작업용 API
+
+ +
+ +
+
+
DSF 시험정보
+
사용자 작업용 API
+
+ +
+ +
+
+
RMR정보
+
사용자 작업용 API
+
+ +
+ +
+
+
Q시험정보
+
사용자 작업용 API
+
+ +
+ + +
+
+
+ + +
+

API 호출 로그

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
API요청방식요청파라미터응답상태처리시간(ms)응답결과
/API_CHA_085/requestPOSTsubCode=deowtj&prvcCode=j43o45k200 OK124 성공
/API_BH_020/dc332GETuser=beta43500 INTERNAL ERROR980⚠️ 오류
/API_BH_020/dc332GETuser=beta43500 INTERNAL ERROR980🕓 지연
/API_BH_020/dc332GETuser=beta43403 Unauthorized980 실패
/API_CHA_085/requestPOSTsubCode=deowtj&prvcCode=j43o45k200 OK124 성공
/API_BH_020/dc332GETuser=beta43500 INTERNAL ERROR980⚠️ 오류
/API_BH_020/dc332GETuser=beta43500 INTERNAL ERROR980🕓 지연
/API_BH_020/dc332GETuser=beta43403 Unauthorized980 실패
+ + + +
+ + + + + diff --git a/src/main/webapp/WEB-INF/views/admins/mgmtApi/left.jsp b/src/main/webapp/WEB-INF/views/admins/mgmtApi/left.jsp new file mode 100644 index 0000000..ab45b18 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/admins/mgmtApi/left.jsp @@ -0,0 +1,92 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fn" uri = "http://java.sun.com/jsp/jstl/functions" %> + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+ + diff --git a/src/main/webapp/images/admins/mgmtApi/1_tit_01.gif b/src/main/webapp/images/admins/mgmtApi/1_tit_01.gif new file mode 100644 index 0000000000000000000000000000000000000000..f88f7ba23a5a031898e2fe359bcf390b15540106 GIT binary patch literal 6403 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 beHvxjMC)mcvz0$4)98Ex#%P4YK|22g1dkN5 literal 0 HcmV?d00001