상태 JSON 파일의 API 요청 통계를 업데이트하고, 평균 응답 시간 및 가동 시간을 수정하였습니다. 에러 응답에 메타 정보를 추가하고, 대시보드에서 최근 API 에러 목록을 조회할 수 있는 기능을 추가하였습니다.

This commit is contained in:
vast 2025-09-30 14:46:29 +00:00
parent 7b64e74f2e
commit 16acd6b04a
6 changed files with 4916 additions and 62 deletions

View File

@ -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",
}
)
# 응답 형식에 따라 적절한 에러 응답 생성

View File

@ -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 ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;','\'':'&#39;'}[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():

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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
}