상태 JSON 파일의 API 요청 통계를 업데이트하고, 평균 응답 시간 및 가동 시간을 수정하였습니다. 에러 응답에 메타 정보를 추가하고, 대시보드에서 최근 API 에러 목록을 조회할 수 있는 기능을 추가하였습니다.
This commit is contained in:
parent
7b64e74f2e
commit
16acd6b04a
|
|
@ -302,7 +302,11 @@ async def inpaint_image(
|
|||
endpoint="/api/v1/inpaint",
|
||||
success=False,
|
||||
response_time=processing_time * 1000,
|
||||
error=str(e)
|
||||
error=str(e),
|
||||
meta={
|
||||
"model": model_name if 'model_name' in locals() else None,
|
||||
"details": "inpaint exception",
|
||||
}
|
||||
)
|
||||
|
||||
# 응답 형식에 따라 적절한 에러 응답 생성
|
||||
|
|
@ -406,7 +410,11 @@ async def remove_background(
|
|||
endpoint="/api/v1/remove_bg",
|
||||
success=False,
|
||||
response_time=processing_time * 1000,
|
||||
error=str(e)
|
||||
error=str(e),
|
||||
meta={
|
||||
"model": model_name if 'model_name' in locals() else None,
|
||||
"details": "remove_bg exception",
|
||||
}
|
||||
)
|
||||
|
||||
# 응답 형식에 따라 적절한 에러 응답 생성
|
||||
|
|
|
|||
|
|
@ -112,21 +112,21 @@ class MonitoringData:
|
|||
logger.info("워커 상태가 비어있어 기본값 사용")
|
||||
worker_status = self._get_default_worker_status()
|
||||
|
||||
# 항상 실제 세션 풀 상태 사용 (동적 데이터)
|
||||
# 메인 서버와 프로세스가 분리되어 있으므로, status.json 값을 우선 사용
|
||||
# 단, 같은 프로세스에서 실행되어 session_pool 이 초기화되어 있다면 실시간 값을 사용
|
||||
try:
|
||||
real_session_status = session_pool.get_status()
|
||||
session_status = real_session_status
|
||||
logger.debug(f"실시간 세션 풀 상태 사용: {real_session_status}")
|
||||
if getattr(session_pool, "_initialized", False):
|
||||
real_session_status = session_pool.get_status()
|
||||
if real_session_status:
|
||||
session_status = real_session_status
|
||||
logger.debug(f"실시간 세션 풀 상태 사용: {real_session_status}")
|
||||
|
||||
if not session_status:
|
||||
logger.info("세션 상태가 비어있어 기본값 사용")
|
||||
session_status = self._get_default_session_status()
|
||||
logger.info("세션 상태가 비어 status.json 값 또는 기본값 사용")
|
||||
session_status = status.get("session_status", {}) or self._get_default_session_status()
|
||||
except Exception as e:
|
||||
logger.warning(f"실제 세션 풀 상태 조회 실패: {e}")
|
||||
session_status = status.get("session_status", {})
|
||||
if not session_status:
|
||||
logger.info("status.json 세션 상태도 비어있어 기본값 사용")
|
||||
session_status = self._get_default_session_status()
|
||||
logger.warning(f"세션 풀 상태 조회 실패: {e}")
|
||||
session_status = status.get("session_status", {}) or self._get_default_session_status()
|
||||
|
||||
# GPU 정보 (안전하게 가져오기)
|
||||
gpu_info = {}
|
||||
|
|
@ -385,7 +385,7 @@ class MonitoringData:
|
|||
|
||||
return alerts
|
||||
|
||||
def update_api_stats(self, endpoint: str, success: bool, response_time: float, error: str = None):
|
||||
def update_api_stats(self, endpoint: str, success: bool, response_time: float, error: str = None, meta: dict | None = None):
|
||||
"""API 통계를 업데이트합니다."""
|
||||
self.api_stats["total_requests"] += 1
|
||||
|
||||
|
|
@ -397,7 +397,8 @@ class MonitoringData:
|
|||
self.api_stats["errors"].append({
|
||||
"timestamp": datetime.now().isoformat(),
|
||||
"endpoint": endpoint,
|
||||
"error": error
|
||||
"error": error,
|
||||
"meta": meta or {}
|
||||
})
|
||||
|
||||
# 엔드포인트별 사용량
|
||||
|
|
@ -769,22 +770,16 @@ HTML_TEMPLATE = """
|
|||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>📊 API 통계</h3>
|
||||
<div class="metric">
|
||||
<span class="metric-label">총 요청:</span>
|
||||
<span class="metric-value" id="total-requests">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">성공률:</span>
|
||||
<span class="metric-value" id="success-rate">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">평균 응답시간:</span>
|
||||
<span class="metric-value" id="avg-response-time">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">에러 수:</span>
|
||||
<span class="metric-value" id="error-count">-</span>
|
||||
<div class="card-header">📊 API 통계</div>
|
||||
<div class="metrics-grid">
|
||||
<div class="metric"><span class="metric-label">총 요청:</span><span class="metric-value" id="total-requests">-</span></div>
|
||||
<div class="metric"><span class="metric-label">성공률:</span><span class="metric-value" id="success-rate">-</span></div>
|
||||
<div class="metric"><span class="metric-label">평균 응답시간:</span><span class="metric-value" id="avg-response-time">-</span></div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">에러 수:</span>
|
||||
<span class="metric-value" id="error-count">-</span>
|
||||
<button id="btn-view-errors" style="margin-left:8px;padding:4px 8px;">에러 상세</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1610,8 +1605,65 @@ HTML_TEMPLATE = """
|
|||
setInterval(refreshPerformanceStats, 30000);
|
||||
setInterval(refreshModelUsageStats, 15000); // 15초마다
|
||||
setInterval(refreshSystemAlerts, 10000); // 10초마다
|
||||
|
||||
const btnViewErrors = document.getElementById('btn-view-errors');
|
||||
const errorModal = document.getElementById('error-modal');
|
||||
const errorModalClose = document.getElementById('error-modal-close');
|
||||
const errorList = document.getElementById('error-list');
|
||||
|
||||
function renderErrors(errors) {
|
||||
if (!errors || errors.length === 0) {
|
||||
errorList.innerHTML = '<div style="color:#666;">최근 에러가 없습니다.</div>';
|
||||
return;
|
||||
}
|
||||
const html = errors.map((e, idx) => {
|
||||
const meta = e.meta || {};
|
||||
const endpoint = e.endpoint || '-';
|
||||
const ts = e.timestamp || '-';
|
||||
const errMsg = e.error || '-';
|
||||
const model = meta.model || '-';
|
||||
const detail = meta.details || '-';
|
||||
return `
|
||||
<div style="padding:10px; border-bottom:1px solid #e5e7eb;">
|
||||
<div><strong>#${idx+1}</strong> <span style="color:#555;">${ts}</span></div>
|
||||
<div><strong>Endpoint:</strong> ${endpoint}</div>
|
||||
<div><strong>Model:</strong> ${model}</div>
|
||||
<div><strong>Reason:</strong> ${detail}</div>
|
||||
<div><strong>Error:</strong> <code>${escapeHtml(errMsg)}</code></div>
|
||||
</div>`;
|
||||
}).join('');
|
||||
errorList.innerHTML = html;
|
||||
}
|
||||
|
||||
function escapeHtml(str) {
|
||||
return (str || '').replace(/[&<>"']/g, function(m) {
|
||||
return ({'&':'&','<':'<','>':'>','"':'"','\'':'''}[m]);
|
||||
});
|
||||
}
|
||||
|
||||
function openErrorModal() {
|
||||
fetch('/api/errors')
|
||||
.then(r => r.json())
|
||||
.then(data => renderErrors(data.errors || []))
|
||||
.catch(() => { errorList.innerHTML = '<div style="color:#dc3545;">에러 목록을 불러오지 못했습니다.</div>'; })
|
||||
.finally(() => { errorModal.style.display = 'block'; });
|
||||
}
|
||||
|
||||
btnViewErrors?.addEventListener('click', openErrorModal);
|
||||
errorModalClose?.addEventListener('click', () => errorModal.style.display = 'none');
|
||||
errorModal.addEventListener('click', (e) => { if (e.target === errorModal) errorModal.style.display = 'none'; });
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="error-modal" style="display:none; position:fixed; left:0; top:0; width:100%; height:100%; background: rgba(0,0,0,0.4); z-index:9999;">
|
||||
<div style="background:#fff; width:80%; max-width:900px; margin:60px auto; padding:20px; border-radius:8px;">
|
||||
<div style="display:flex; justify-content:space-between; align-items:center;">
|
||||
<h3 style="margin:0;">최근 API 에러</h3>
|
||||
<button id="error-modal-close">닫기</button>
|
||||
</div>
|
||||
<div id="error-list" style="margin-top:12px; max-height:60vh; overflow:auto; font-family:monospace; font-size:13px; background:#f8f9fa; padding:10px; border-radius:6px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
|
@ -1826,6 +1878,15 @@ async def get_performance_stats():
|
|||
logger.error(f"성능 통계 조회 실패: {e}")
|
||||
return {"stats": {}, "error": str(e)}
|
||||
|
||||
@api_router.get("/errors", summary="최근 API 에러 목록")
|
||||
def get_recent_errors(limit: int = 20):
|
||||
try:
|
||||
errors = monitoring_data.api_stats.get("errors", [])
|
||||
return {"errors": errors[-limit:]}
|
||||
except Exception as e:
|
||||
logger.error(f"에러 목록 조회 실패: {e}")
|
||||
return {"errors": [], "error": str(e)}
|
||||
|
||||
# 테스트용 엔드포인트
|
||||
@api_router.get("/system-alerts")
|
||||
async def get_system_alerts():
|
||||
|
|
|
|||
1028
logs/main.log
1028
logs/main.log
File diff suppressed because it is too large
Load Diff
3514
logs/main_server.log
3514
logs/main_server.log
File diff suppressed because it is too large
Load Diff
|
|
@ -95,3 +95,246 @@ INFO: 122.35.47.45:53756 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
|||
INFO: 122.35.47.45:53755 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53754 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53772 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53772 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53772 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53806 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53805 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53807 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53804 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53816 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53816 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53816 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53838 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53839 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53840 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53837 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53842 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53842 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53842 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53871 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53873 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53872 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53874 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53885 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53885 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53885 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53893 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53892 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53895 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53894 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53905 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53905 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53905 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53948 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53949 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53950 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53947 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53993 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53994 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53995 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:53996 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54064 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54065 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54063 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54066 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54063 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54066 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54065 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54077 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54094 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54094 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54094 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54120 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54118 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54121 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54119 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54124 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54124 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54124 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54159 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54158 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54160 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54161 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54182 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54182 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54182 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54243 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54244 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54241 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54242 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54267 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54267 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54267 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54297 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54298 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54296 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54299 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54322 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54322 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54322 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54368 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54366 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54365 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54367 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54385 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54385 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54400 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54420 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54421 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54419 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54422 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54441 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54441 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54441 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54468 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54467 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54470 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54469 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54487 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54522 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54520 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54517 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54521 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54611 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54612 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54613 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54614 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54684 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54681 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54683 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54682 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54709 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54710 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54737 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54736 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54738 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54735 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54745 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54745 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54745 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54772 - "GET / HTTP/1.1" 200 OK
|
||||
INFO: connection closed
|
||||
INFO: 122.35.47.45:54785 - "WebSocket /ws" [accepted]
|
||||
INFO: connection open
|
||||
INFO: 122.35.47.45:54772 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54745 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
ERROR:app.monitoring.dashboard:데이터 전송 오류:
|
||||
INFO: 122.35.47.45:54787 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54786 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54819 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54819 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54841 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54852 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54851 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54850 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54853 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54861 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54861 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54861 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54886 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54885 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54884 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54883 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54890 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54890 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54890 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54935 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54937 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54934 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54936 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54959 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54959 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:54959 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55018 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55016 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55017 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55019 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55033 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55033 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55033 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55074 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55075 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55152 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55151 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55167 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55166 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55150 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55261 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55263 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55262 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55375 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55370 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55372 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55371 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55468 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55471 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55472 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55467 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55585 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55587 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55586 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55588 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55646 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55647 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55645 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55648 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55648 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55688 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55691 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55689 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55690 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55696 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55696 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55696 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55746 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55745 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55744 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55743 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55757 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55757 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55757 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55800 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55801 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55799 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55802 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55802 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55802 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55802 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55877 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55878 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55879 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55876 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55901 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55901 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55901 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55956 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55958 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55955 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55957 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:55974 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56080 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56081 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56079 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56078 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56154 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56156 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56155 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56157 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56251 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56250 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56249 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56248 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56349 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56350 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56351 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56348 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56435 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56434 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56438 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56433 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56522 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56520 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56521 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56519 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56519 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||
INFO: 122.35.47.45:56519 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||
|
|
|
|||
62
status.json
62
status.json
|
|
@ -50,16 +50,16 @@
|
|||
}
|
||||
},
|
||||
"api_stats": {
|
||||
"total_requests": 66,
|
||||
"successful_requests": 65,
|
||||
"failed_requests": 1,
|
||||
"success_rate": 98.48484848484848,
|
||||
"total_requests": 414,
|
||||
"successful_requests": 412,
|
||||
"failed_requests": 2,
|
||||
"success_rate": 99.51690821256038,
|
||||
"endpoint_usage": {
|
||||
"POST /api/v1/remove_bg": 10,
|
||||
"GET /health": 1,
|
||||
"GET /api/v1/model": 28,
|
||||
"POST /api/v1/inpaint": 25,
|
||||
"POST /api/v1/run_plugin_gen_image": 2
|
||||
"GET /health": 2,
|
||||
"GET /api/v1/model": 201,
|
||||
"POST /api/v1/inpaint": 189,
|
||||
"POST /api/v1/run_plugin_gen_image": 12
|
||||
},
|
||||
"endpoint_stats": {
|
||||
"POST /api/v1/remove_bg": {
|
||||
|
|
@ -70,42 +70,42 @@
|
|||
"current_concurrent": 0
|
||||
},
|
||||
"GET /health": {
|
||||
"count": 1,
|
||||
"avg_time": 0.001049041748046875,
|
||||
"min_time": 0.001049041748046875,
|
||||
"count": 2,
|
||||
"avg_time": 0.0009462833404541016,
|
||||
"min_time": 0.0008435249328613281,
|
||||
"max_time": 0.001049041748046875,
|
||||
"current_concurrent": 0
|
||||
},
|
||||
"GET /api/v1/model": {
|
||||
"count": 28,
|
||||
"avg_time": 0.0010251828602382115,
|
||||
"min_time": 0.0008790493011474609,
|
||||
"max_time": 0.0013933181762695312,
|
||||
"count": 201,
|
||||
"avg_time": 0.0010408210754394532,
|
||||
"min_time": 0.0008566379547119141,
|
||||
"max_time": 0.0019936561584472656,
|
||||
"current_concurrent": 0
|
||||
},
|
||||
"POST /api/v1/inpaint": {
|
||||
"count": 25,
|
||||
"avg_time": 0.9369040489196777,
|
||||
"min_time": 0.40611815452575684,
|
||||
"max_time": 7.1920835971832275,
|
||||
"current_concurrent": 1
|
||||
"count": 189,
|
||||
"avg_time": 0.8963525748252869,
|
||||
"min_time": 0.39063143730163574,
|
||||
"max_time": 13.827012777328491,
|
||||
"current_concurrent": 0
|
||||
},
|
||||
"POST /api/v1/run_plugin_gen_image": {
|
||||
"count": 2,
|
||||
"avg_time": 0.28528332710266113,
|
||||
"min_time": 0.26673054695129395,
|
||||
"max_time": 0.3038361072540283,
|
||||
"count": 12,
|
||||
"avg_time": 0.4003242651621501,
|
||||
"min_time": 0.21323299407958984,
|
||||
"max_time": 0.8447999954223633,
|
||||
"current_concurrent": 0
|
||||
}
|
||||
},
|
||||
"average_response_time": 0.5290507945147428,
|
||||
"min_response_time": 0.0008790493011474609,
|
||||
"max_response_time": 8.455913782119751,
|
||||
"current_concurrent": 1,
|
||||
"average_response_time": 0.4502467936363773,
|
||||
"min_response_time": 0.0007734298706054688,
|
||||
"max_response_time": 13.827012777328491,
|
||||
"current_concurrent": 0,
|
||||
"max_concurrent": 1,
|
||||
"requests_per_second": 0.13702728923148325,
|
||||
"uptime": 481.65588307380676,
|
||||
"requests_per_second": 0.19409876233925683,
|
||||
"uptime": 2132.9347751140594,
|
||||
"recent_errors": []
|
||||
},
|
||||
"timestamp": 1759241936.8845046
|
||||
"timestamp": 1759243588.16345
|
||||
}
|
||||
Loading…
Reference in New Issue