-
API명별 요약 통계
+
API별 요약 통계
diff --git a/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp b/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp
index 9f99261..dd8c252 100644
--- a/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp
+++ b/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp
@@ -26,6 +26,18 @@
border: 1px solid #ddd;
background: #fff;
}
+ .cssbtn.small {
+ height: 24px;
+ border-radius: 2px;
+ min-width: 24px;
+ box-shadow: none;
+ border-color: #ebebec;
+ font-size: 11px;
+ }
+ /* 달력 팝업이 파이차트 가운데 숫자(z-index:10) 위로 오도록 */
+ #ui-datepicker-div {
+ z-index: 9999 !important;
+ }
">
@@ -203,7 +215,6 @@
function validateAndAdjustDateRange() {
var startDate = $("input[name=searchStartDate]").val().replace(/-/g, "");
var startTime = $("input[name=searchStartTime]").val().replace(/:/g, "");
- var endDate = $("input[name=searchEndDate]").val().replace(/-/g, "");
var endTime = $("input[name=searchEndTime]").val().replace(/:/g, "");
if (!startDate || !startTime) return null;
@@ -219,35 +230,43 @@
);
}
- // UI 업데이트 헬퍼
- function updateEndDateTime(dt) {
- var d = dt.getFullYear() +
+ // 종료일시(yyyyMMddHHmm) 포맷 헬퍼
+ function formatDateTime(dt) {
+ return dt.getFullYear() +
String(dt.getMonth() + 1).padStart(2, '0') +
- String(dt.getDate()).padStart(2, '0');
- var t = String(dt.getHours()).padStart(2, '0') +
+ String(dt.getDate()).padStart(2, '0') +
+ String(dt.getHours()).padStart(2, '0') +
String(dt.getMinutes()).padStart(2, '0');
- $("input[name=searchEndDate]").val(d.substring(0, 4) + '-' + d.substring(4, 6) + '-' + d.substring(6, 8));
- $("input[name=searchEndTime]").val(t.substring(0, 2) + ':' + t.substring(2, 4));
- return d + t;
+ }
+
+ // 종료시각 UI 업데이트 헬퍼
+ function updateEndTime(dt) {
+ $("input[name=searchEndTime]").val(
+ String(dt.getHours()).padStart(2, '0') + ':' + String(dt.getMinutes()).padStart(2, '0'));
+ return formatDateTime(dt);
}
var start = parseDateTime(startDate, startTime);
var startDateTime = startDate + startTime;
var endDateTime;
- if (endDate && endTime) {
- var end = parseDateTime(endDate, endTime);
+ if (endTime) {
+ // 종료일은 시작일 기준. 종료시각이 시작시각보다 이르면 자정을 넘긴 것으로 보고 +1일
+ var end = parseDateTime(startDate, endTime);
+ if (end < start) {
+ end = new Date(end.getTime() + 24 * 60 * 60 * 1000);
+ }
var diffMinutes = (end - start) / (1000 * 60);
if (diffMinutes > 60) {
// 1시간 초과 시 시작 + 1시간으로 조정
- endDateTime = updateEndDateTime(new Date(start.getTime() + 60 * 60 * 1000));
+ endDateTime = updateEndTime(new Date(start.getTime() + 60 * 60 * 1000));
} else {
- endDateTime = endDate + endTime;
+ endDateTime = formatDateTime(end);
}
} else {
// 종료시간 미입력 시 시작 + 1시간으로 설정
- endDateTime = updateEndDateTime(new Date(start.getTime() + 60 * 60 * 1000));
+ endDateTime = updateEndTime(new Date(start.getTime() + 60 * 60 * 1000));
}
return { start: startDateTime, end: endDateTime };
@@ -302,6 +321,44 @@
fetchChartData(range);
}
+ // 조회기간을 정시 단위 1시간 구간으로 이동 (direction: -1 이전, 1 이후)
+ // ex) 시작 08:35, 이전 클릭 -> 08:00~09:00, 다시 -> 07:00~08:00
+ // ex) 시작 08:35, 이후 클릭 -> 09:00~10:00, 다시 -> 10:00~11:00
+ function shiftTimeRange(direction) {
+ var startDate = $("input[name=searchStartDate]").val().replace(/-/g, "");
+ var startTime = $("input[name=searchStartTime]").val().replace(/:/g, "");
+ if (!startDate || !startTime) return;
+
+ var start = new Date(
+ parseInt(startDate.substring(0, 4)),
+ parseInt(startDate.substring(4, 6)) - 1,
+ parseInt(startDate.substring(6, 8)),
+ parseInt(startTime.substring(0, 2)),
+ parseInt(startTime.substring(2, 4))
+ );
+
+ if (direction < 0) {
+ // 분 단위가 있으면 정시로 내림, 이미 정시면 1시간 전
+ if (start.getMinutes() === 0) start.setHours(start.getHours() - 1);
+ else start.setMinutes(0);
+ } else {
+ // 분 단위가 있으면 다음 정시로 올림, 이미 정시면 1시간 후
+ start.setMinutes(0);
+ start.setHours(start.getHours() + 1);
+ }
+
+ var end = new Date(start.getTime() + 60 * 60 * 1000);
+
+ function pad(n) { return String(n).padStart(2, '0'); }
+
+ $("input[name=searchStartDate]").val(
+ start.getFullYear() + '-' + pad(start.getMonth() + 1) + '-' + pad(start.getDate()));
+ $("input[name=searchStartTime]").val(pad(start.getHours()) + ':' + pad(start.getMinutes()));
+ $("input[name=searchEndTime]").val(pad(end.getHours()) + ':' + pad(end.getMinutes()));
+
+ search();
+ }
+
function exportToExcel(isSummary) {
var cmdType = isSummary ? 'EXCEL_EXPORT_SUMMARY' : 'EXCEL_EXPORT';
console.log('[Excel Export] Starting... (type: ' + cmdType + ')');
@@ -317,13 +374,10 @@
serviceType: '${param.serviceType}'
};
- var startDate = $("input[name=searchStartDate]").val().replace(/-/g, "");
- var startTime = $("input[name=searchStartTime]").val().replace(/:/g, "");
- var endDate = $("input[name=searchEndDate]").val().replace(/-/g, "");
- var endTime = $("input[name=searchEndTime]").val().replace(/:/g, "");
- if (startDate && startTime) {
- postData.searchStartDateTime = startDate + startTime;
- postData.searchEndDateTime = endDate + endTime;
+ var range = validateAndAdjustDateRange();
+ if (range) {
+ postData.searchStartDateTime = range.start;
+ postData.searchEndDateTime = range.end;
}
console.log('[Excel Export] Request data:', postData);
@@ -431,12 +485,13 @@
mtype: 'POST',
postData: gridPostData,
colNames: [
- 'API명',
- '총건수', '성공', 'Timeout', '시스템오류',
+ 'API ID', 'API 명',
+ '총건수', '성공', 'Timeout', '시스템오류',
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
],
colModel: [
- { name: 'apiName', align: 'left', width: '250', sortable: false },
+ { name: 'apiName', align: 'left', width: '150', sortable: false },
+ { name: 'apiDesc', align: 'left', width: '250', sortable: false },
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
@@ -473,7 +528,7 @@
mtype: 'POST',
postData: gridPostData,
colNames: [
- '통계시간', 'API명', '인스턴스', '업무구분', '클라이언트ID',
+ '통계시간', 'API ID', '인스턴스', '업무구분', '클라이언트ID',
'Inbound Adapter', 'Outbound Adapter',
'총건수', '성공', 'Timeout', '시스템오류',
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
@@ -517,9 +572,11 @@
$(document).ready(function() {
// 날짜/시간 입력 마스크
- $("input[name=searchStartDate], input[name=searchEndDate]").inputmask("9999-99-99", { 'autoUnmask': true });
+ $("input[name=searchStartDate]").inputmask("9999-99-99", { 'autoUnmask': true });
$("input[name=searchStartTime], input[name=searchEndTime]").inputmask("99:99", { 'autoUnmask': true });
+ $("input[name=searchStartDate]").datepicker();
+
// 기본값 설정 (현재 시간(분) 기준 1시간 전 ~ 현재 시간(분))
var now = new Date();
var oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
@@ -537,8 +594,7 @@
$("input[name=searchStartDate]").val(formatDate(oneHourAgo));
$("input[name=searchStartTime]").val(formatTime(oneHourAgo));
}
- if (!$("input[name=searchEndDate]").val()) {
- $("input[name=searchEndDate]").val(formatDate(now));
+ if (!$("input[name=searchEndTime]").val()) {
$("input[name=searchEndTime]").val(formatTime(now));
}
@@ -554,6 +610,14 @@
search();
});
+ $("#btnPrevTime").click(function() {
+ shiftTimeRange(-1);
+ });
+
+ $("#btnNextTime").click(function() {
+ shiftTimeRange(1);
+ });
+
$("#btn_excel_export_summary").click(function() {
exportToExcel(true);
});
@@ -568,8 +632,8 @@
}
});
- // 종료일/시간 변경 시 1시간 초과 검증
- $("input[name=searchEndDate], input[name=searchEndTime]").on('change blur', function() {
+ // 종료시각 변경 시 1시간 초과 검증
+ $("input[name=searchEndTime]").on('change blur', function() {
validateAndAdjustDateRange();
});
@@ -602,14 +666,15 @@
| 조회기간 |
-
-
+
+
~
-
-
+
+
+
(최대 1시간, 초과시 자동 조정)
|
- API명 |
+ API ID |
|
diff --git a/WebContent/jsp/onl/kjb/statistics/apiStatsMonthMan.jsp b/WebContent/jsp/onl/kjb/statistics/apiStatsMonthMan.jsp
index 9b5a8ed..8501ecd 100644
--- a/WebContent/jsp/onl/kjb/statistics/apiStatsMonthMan.jsp
+++ b/WebContent/jsp/onl/kjb/statistics/apiStatsMonthMan.jsp
@@ -421,12 +421,13 @@
mtype: 'POST',
postData: gridPostData,
colNames: [
- 'API명',
+ 'API ID', 'API 명',
'총건수', '성공', 'Timeout', '시스템오류',
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
],
colModel: [
- { name: 'apiName', align: 'left', width: '250', sortable: false },
+ { name: 'apiName', align: 'left', width: '150', sortable: false },
+ { name: 'apiDesc', align: 'left', width: '250', sortable: false },
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
@@ -463,7 +464,7 @@
mtype: 'POST',
postData: gridPostData,
colNames: [
- '통계시간', 'API명', '인스턴스', '업무구분', '클라이언트ID',
+ '통계시간', 'API ID', '인스턴스', '업무구분', '클라이언트ID',
'Inbound Adapter', 'Outbound Adapter',
'총건수', '성공', 'Timeout', '시스템오류',
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
@@ -510,11 +511,21 @@
$("input[name=searchStartDateTime]").inputmask("9999-99", { 'autoUnmask': true });
$("input[name=searchEndDateTime]").inputmask("9999-99", { 'autoUnmask': true });
- // 기본값 설정 (최근 12개월)
+ // 기본값 설정: 올해 1월 ~ 지난달 (현재가 1월이면 작년 1월 ~ 작년 12월)
var today = new Date();
- var endMonth = today.getFullYear() + '-' + (today.getMonth() + 1 < 10 ? '0' : '') + (today.getMonth() + 1);
- var startDate = new Date(today.getFullYear(), today.getMonth() - 11, 1);
- var startMonth = startDate.getFullYear() + '-' + (startDate.getMonth() + 1 < 10 ? '0' : '') + (startDate.getMonth() + 1);
+ var startDate, endDate;
+ if (today.getMonth() === 0) { // 1월
+ startDate = new Date(today.getFullYear() - 1, 0, 1);
+ endDate = new Date(today.getFullYear() - 1, 11, 1);
+ } else {
+ startDate = new Date(today.getFullYear(), 0, 1);
+ endDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);
+ }
+ function toMonthStr(d) {
+ return d.getFullYear() + '-' + (d.getMonth() + 1 < 10 ? '0' : '') + (d.getMonth() + 1);
+ }
+ var startMonth = toMonthStr(startDate);
+ var endMonth = toMonthStr(endDate);
if (!$("input[name=searchStartDateTime]").val()) {
$("input[name=searchStartDateTime]").val(startMonth);
@@ -593,7 +604,7 @@
- | API명 |
+ API ID |
|
@@ -632,10 +643,10 @@
-
+
-
API명별 요약 통계
+
API별 요약 통계
diff --git a/WebContent/jsp/onl/kjb/statistics/apiStatsYearMan.jsp b/WebContent/jsp/onl/kjb/statistics/apiStatsYearMan.jsp
index ad17a8c..a4d27b6 100644
--- a/WebContent/jsp/onl/kjb/statistics/apiStatsYearMan.jsp
+++ b/WebContent/jsp/onl/kjb/statistics/apiStatsYearMan.jsp
@@ -397,12 +397,13 @@
mtype: 'POST',
postData: gridPostData,
colNames: [
- 'API명',
- '총건수', '성공', 'Timeout', '시스템오류',
+ 'API ID', 'API 명',
+ '총건수', '성공', 'Timeout', '시스템오류',
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
],
colModel: [
- { name: 'apiName', align: 'left', width: '250', sortable: false },
+ { name: 'apiName', align: 'left', width: '150', sortable: false },
+ { name: 'apiDesc', align: 'left', width: '250', sortable: false },
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
@@ -439,7 +440,7 @@
mtype: 'POST',
postData: gridPostData,
colNames: [
- '통계시간', 'API명', '인스턴스', '업무구분', '클라이언트ID',
+ '통계시간', 'API ID', '인스턴스', '업무구분', '클라이언트ID',
'Inbound Adapter', 'Outbound Adapter',
'총건수', '성공', 'Timeout', '시스템오류',
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
@@ -563,7 +564,7 @@
- | API명 |
+ API ID |
|
@@ -604,7 +605,7 @@
-
API명별 요약 통계
+
API별 요약 통계
diff --git a/WebContent/jsp/onl/kjb/statistics/apiUseStatsMan.jsp b/WebContent/jsp/onl/kjb/statistics/apiUseStatsMan.jsp
index e6cdf7a..7f90184 100644
--- a/WebContent/jsp/onl/kjb/statistics/apiUseStatsMan.jsp
+++ b/WebContent/jsp/onl/kjb/statistics/apiUseStatsMan.jsp
@@ -19,6 +19,14 @@
#gbox_grid .ui-jqgrid-ftable tr.footrow td {
height: 26px;
}
+ .cssbtn.small {
+ height: 24px;
+ border-radius: 2px;
+ min-width: 24px;
+ box-shadow: none;
+ border-color: #ebebec;
+ font-size: 11px;
+ }