972819b492
- ApexCharts 기반 실시간 모니터링 대시보드 - 어댑터/배치/서버/소켓/트랜잭션 모니터링 컴포넌트 - 처리량 계산 및 데이터 매핑 서비스
243 lines
6.7 KiB
Plaintext
243 lines
6.7 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=utf-8"%>
|
|
|
|
<div class="dashboard-peak">
|
|
<h2 class="section-title">피크 처리 성능
|
|
<button class="peak-filter-btn active" id="peakTps">tps</button>
|
|
<button class="peak-filter-btn" id="peakTrade">trade</button>
|
|
</h2>
|
|
|
|
<div class="card">
|
|
<div class="card-title">
|
|
|
|
</div>
|
|
<div class="peak-grid" id="peak-tps-container">
|
|
<!-- 피크 성능 데이터가 동적으로 추가됩니다 -->
|
|
</div>
|
|
|
|
<div class="peak-grid" id="peak-trade-container" style="display:none">
|
|
<!-- 피크 성능 데이터가 동적으로 추가됩니다 -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 피크 성능 카드 템플릿 -->
|
|
<template id="peak-card-template">
|
|
<div class="peak-card">
|
|
<div class="peak-header">
|
|
<div class="peak-header-content">
|
|
<h4 class="peak-service-type">서비스 유형</h4>
|
|
<span class="peak-tps">tps</span>
|
|
<span class="peak-date">날짜</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style>
|
|
.dashboard-peak {
|
|
position: relative;
|
|
}
|
|
|
|
/* FEP와 BAP를 상하로 배치하기 위한 스타일 */
|
|
.peak-grid {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.3rem;
|
|
height: 263px; /* 배치 처리 성능 높이와 일관되게 설정 */
|
|
overflow-y: auto; /* 내용이 많을 경우 스크롤 가능하도록 */
|
|
}
|
|
|
|
.peak-card {
|
|
margin-bottom: 0.3rem;
|
|
height: auto; /* 자동 높이 설정 */
|
|
background-color: white;
|
|
border-radius: var(--rounded-md);
|
|
border: 1px solid var(--color-gray-200);
|
|
overflow: hidden;
|
|
box-shadow: var(--shadow-sm);
|
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
}
|
|
|
|
.peak-card:hover {
|
|
transform: translateY(-3px);
|
|
box-shadow: var(--shadow-md);
|
|
}
|
|
|
|
/* 좁은 공간에 맞게 조정 */
|
|
.peak-header {
|
|
margin-bottom: 0.1rem;
|
|
padding: 0.3rem 0.5rem; /* 패딩 더 축소 */
|
|
border-bottom: 1px solid var(--color-gray-200);
|
|
}
|
|
|
|
.peak-header-content {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
|
|
.peak-service-type {
|
|
font-size: 0.85rem;
|
|
margin: 0;
|
|
font-weight: 600;
|
|
color: var(--color-gray-800);
|
|
}
|
|
|
|
.peak-date {
|
|
font-size: 0.75rem;
|
|
color: var(--color-gray-500);
|
|
}
|
|
|
|
.peak-content {
|
|
padding: 0.3rem 0.5rem; /* 패딩 더 축소 */
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.peak-value-container {
|
|
flex: 1;
|
|
}
|
|
|
|
.peak-value {
|
|
font-size: 1.1rem;
|
|
font-weight: 600;
|
|
color: var(--color-gray-900);
|
|
}
|
|
|
|
.peak-label {
|
|
font-size: 0.75rem;
|
|
color: var(--color-gray-500);
|
|
}
|
|
|
|
/* 차트 높이 조정 */
|
|
.peak-chart {
|
|
height: 40px; /* 차트 높이 더 축소 */
|
|
flex: 1;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: flex-end;
|
|
}
|
|
|
|
.peak-bar-container {
|
|
height: 100%;
|
|
width: 40px;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: flex-end;
|
|
}
|
|
|
|
.peak-bar {
|
|
width: 30px;
|
|
background-color: var(--color-primary);
|
|
border-radius: 3px 3px 0 0;
|
|
}
|
|
|
|
/* 피크 섹션 스타일 조정 */
|
|
.peak-container .card {
|
|
height: 100%;
|
|
}
|
|
|
|
.peak-tps {
|
|
font-size: 1rem;
|
|
margin-left: auto;
|
|
margin-right: 8px;
|
|
font-weight: 600;
|
|
color: var(--color-gray-900);
|
|
display: flex;
|
|
align-items: end;
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
<script>
|
|
// 숫자 형식화 함수 (천 단위 콤마 추가)
|
|
function formatNumber(num) {
|
|
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
}
|
|
|
|
// 피크 성능 데이터 업데이트 함수
|
|
function updatePeakPerformance(data) {
|
|
if (!data || !data.peakTps || !data.peakTrade) return;
|
|
|
|
var container = document.getElementById('peak-tps-container');
|
|
container.innerHTML = '';
|
|
|
|
// 최대값 찾기 (스케일링을 위해)
|
|
var maxValue = 0;
|
|
data.peakTps.forEach(function(peak) {
|
|
var value = peak.tps;
|
|
if (value > maxValue) maxValue = value;
|
|
});
|
|
|
|
// 피크 카드 생성
|
|
data.peakTps.forEach(function(peak) {
|
|
var template = document.getElementById('peak-card-template');
|
|
var clone = document.importNode(template.content, true);
|
|
|
|
// 서비스 유형 설정
|
|
clone.querySelector('.peak-service-type').textContent = peak.serviceType;
|
|
|
|
// tps 설정
|
|
clone.querySelector('.peak-tps').textContent = (0 || peak.tps);
|
|
|
|
// 날짜 설정
|
|
clone.querySelector('.peak-date').textContent = peak.formattedDate || peak.date;
|
|
|
|
container.appendChild(clone);
|
|
});
|
|
|
|
var tradeContainer = document.getElementById('peak-trade-container');
|
|
tradeContainer.innerHTML = '';
|
|
|
|
// 피크 카드 생성
|
|
data.peakTrade.forEach(function(peak) {
|
|
var template = document.getElementById('peak-card-template');
|
|
var clone = document.importNode(template.content, true);
|
|
|
|
// 서비스 유형 설정
|
|
clone.querySelector('.peak-service-type').textContent = peak.serviceType;
|
|
|
|
// tps 설정
|
|
clone.querySelector('.peak-tps').textContent = (0 || peak.tps);
|
|
|
|
// 날짜 설정
|
|
clone.querySelector('.peak-date').textContent = peak.formattedDate || peak.date;
|
|
|
|
tradeContainer.appendChild(clone);
|
|
});
|
|
}
|
|
|
|
// 피크 성능 데이터 로드 함수
|
|
function loadPeakPerformanceData() {
|
|
// 항상 TPS 데이터 로드 (선택 버튼 제거)
|
|
ModernDashboardApi.getPeakPerformance('tps', function(data) {
|
|
updatePeakPerformance(data);
|
|
});
|
|
}
|
|
|
|
// 서버 필터 버튼 클릭 이벤트
|
|
$('.peak-filter-btn').click(function() {
|
|
var type = $(this).prop("id");
|
|
|
|
if (type === 'peakTps') {
|
|
// 전체 표시
|
|
$("#peakTrade").removeClass('active');
|
|
$("#peakTps").addClass('active');
|
|
$("#peak-tps-container").show();
|
|
$("#peak-trade-container").hide();
|
|
|
|
} else if( type === 'peakTrade' ){
|
|
// 필터링
|
|
$("#peakTps").removeClass('active');
|
|
$("#peakTrade").addClass('active');
|
|
$("#peak-tps-container").hide();
|
|
$("#peak-trade-container").show();
|
|
}
|
|
});
|
|
|
|
// 초기 로드
|
|
$(document).ready(function() {
|
|
loadPeakPerformanceData();
|
|
});
|
|
</script> |