From bb3c5e61e33f941afb87af2488fac5cc2e05abb5 Mon Sep 17 00:00:00 2001 From: AGX Date: Fri, 29 Aug 2025 02:19:45 +0900 Subject: [PATCH] =?UTF-8?q?=EC=83=81=ED=83=9C=20JSON=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=9D=98=20=EC=9B=8C=EC=BB=A4=20=EC=88=98=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=ED=86=B5=EA=B3=84=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8,=20=EB=AA=A8=EB=8D=B8=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20API=EC=97=90=20=EC=B2=98=EB=A6=AC=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EB=AA=A8=EB=8B=88=ED=84=B0=EB=A7=81=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EC=84=B8=EC=85=98=20=ED=92=80=20=EC=83=81=ED=83=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=EC=97=90=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=ED=95=98=EB=8F=84=EB=A1=9D=20=EA=B0=9C=EC=84=A0?= =?UTF-8?q?=ED=95=98=EC=98=80=EC=8A=B5=EB=8B=88=EB=8B=A4.=20Jetson=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20GPU=20=EC=A0=95=EB=B3=B4=20=EC=88=98?= =?UTF-8?q?=EC=A7=91=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=98=EC=98=80=EC=9C=BC=EB=A9=B0,=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=EC=97=90=20=EC=84=9C=EB=B2=84=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=84=B8=EC=8A=A4=20ID=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=82=AC=ED=95=AD=EC=9D=84=20=EB=B0=98=EC=98=81=ED=95=98?= =?UTF-8?q?=EC=98=80=EC=8A=B5=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints.py | 21 +++ app/core/config.py | 10 +- app/monitoring/dashboard.py | 115 ++++++++++++- logs/main_server.log | 317 +++++++++++------------------------- logs/main_server.pid | 2 +- logs/monitoring.log | 4 +- logs/monitoring.pid | 2 +- status.json | 47 ++++-- 8 files changed, 262 insertions(+), 256 deletions(-) diff --git a/app/api/endpoints.py b/app/api/endpoints.py index e623104..6466c3e 100644 --- a/app/api/endpoints.py +++ b/app/api/endpoints.py @@ -355,6 +355,8 @@ async def remove_background( @router.get("/api/v1/model") async def get_model_info(): """모델 정보 반환 (클라이언트 헬스체크 호환)""" + start_time = time.time() + try: # 현재 사용 가능한 모델 목록 models = [ @@ -378,6 +380,15 @@ async def get_model_info(): } ] + processing_time = time.time() - start_time + + # 모니터링 통계 업데이트 + monitoring_data.update_api_stats( + endpoint="/api/v1/model", + success=True, + response_time=processing_time * 1000 # ms로 변환 + ) + return { "success": True, "models": models, @@ -390,6 +401,16 @@ async def get_model_info(): except Exception as e: logger.error(f"모델 정보 조회 실패: {e}") + + # 모니터링 통계 업데이트 + processing_time = time.time() - start_time + monitoring_data.update_api_stats( + endpoint="/api/v1/model", + success=False, + response_time=processing_time * 1000, + error=str(e) + ) + raise HTTPException(status_code=500, detail=f"모델 정보 조회 실패: {str(e)}") diff --git a/app/core/config.py b/app/core/config.py index 909a8f6..9982020 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -28,14 +28,14 @@ class Settings(BaseSettings): JETSON_TEMP_THRESHOLD: int = 75 # Celsius # Session pool settings - SIMPLE_LAMA_SESSIONS: int = 2 if IS_JETSON else 4 - MIGAN_SESSIONS: int = 2 if IS_JETSON else 4 + SIMPLE_LAMA_SESSIONS: int = 2 if IS_JETSON else 3 + MIGAN_SESSIONS: int = 2 if IS_JETSON else 3 REMBG_SESSIONS: int = 1 if IS_JETSON else 2 # Worker settings (Jetson은 더 적은 워커 사용) - MAX_WORKERS: int = 4 if IS_JETSON else 12 - MIN_WORKERS: int = 1 if IS_JETSON else 4 - WORKER_TIMEOUT: int = 300 # 5 minutes + MAX_WORKERS: int = 6 if IS_JETSON else 16 + MIN_WORKERS: int = 2 if IS_JETSON else 8 + WORKER_TIMEOUT: int = 120 # 2 minutes # VRAM management (Jetson은 더 보수적인 설정) VRAM_THRESHOLD_HIGH: float = 0.7 if IS_JETSON else 0.85 # 70% for Jetson, 85% for x86 diff --git a/app/monitoring/dashboard.py b/app/monitoring/dashboard.py index 600bff7..e3338d3 100644 --- a/app/monitoring/dashboard.py +++ b/app/monitoring/dashboard.py @@ -120,10 +120,43 @@ class MonitoringData: **gpu_monitor.get_gpu_memory_info(), "utilization": gpu_monitor.get_gpu_utilization() } + + # Jetson의 경우 추가 GPU 정보 + if settings.IS_JETSON: + jetson_gpu_info = gpu_monitor.get_jetson_specific_info() + if jetson_gpu_info: + # GPU 온도 정보 + if jetson_gpu_info.get("temperature"): + temps = jetson_gpu_info["temperature"] + # 가장 높은 온도를 GPU 온도로 사용 + if temps: + gpu_temp = max(temps.values()) if temps else 0 + gpu_info["temperature"] = gpu_temp + else: + gpu_info["temperature"] = "미지원" + else: + gpu_info["temperature"] = "미지원" + + # GPU 클럭 정보 + gpu_freq = jetson_gpu_info.get("gpu_frequency") + if gpu_freq is not None: + gpu_info["clock_speed"] = gpu_freq + else: + gpu_info["clock_speed"] = "미지원" + else: + # x86 시스템의 경우 NVML을 통해 온도/클럭 정보 시도 + try: + # 여기에 x86 GPU 정보 추가 로직을 구현할 수 있음 + gpu_info["temperature"] = "미지원" + gpu_info["clock_speed"] = "미지원" + except: + gpu_info["temperature"] = "미지원" + gpu_info["clock_speed"] = "미지원" + logger.info("GPU 정보 수집 완료") except Exception as e: logger.warning(f"GPU 정보 조회 실패: {e}") - gpu_info = {"total": 0, "used": 0, "free": 0, "usage_percent": 0, "utilization": 0} + gpu_info = {"total": 0, "used": 0, "free": 0, "usage_percent": 0, "utilization": 0, "temperature": "오류", "clock_speed": "오류"} # 시스템 메모리 정보 (안전하게 가져오기) system_memory = {} @@ -673,10 +706,6 @@ HTML_TEMPLATE = """ 활성 워커: - -
- 세션 풀: - - -
대기열: - @@ -687,6 +716,26 @@ HTML_TEMPLATE = """
+
+

🔄 세션 풀 상태

+
+ Simple LAMA: + - +
+
+ MIGAN: + - +
+
+ RemBG: + - +
+
+ 총 세션: + - +
+
+

📊 API 통계

@@ -1005,13 +1054,26 @@ HTML_TEMPLATE = """ // GPU 정보 업데이트 document.getElementById('gpu-memory').textContent = (data.gpu?.usage_percent || 0).toFixed(1) + '%'; document.getElementById('gpu-util').textContent = (data.gpu?.utilization || 0).toFixed(1) + '%'; - document.getElementById('gpu-temp').textContent = (data.jetson?.temperature?.gpu || 0).toFixed(1) + '°C'; - document.getElementById('gpu-clock').textContent = (data.jetson?.gpu_frequency || 0).toFixed(0) + 'MHz'; + + // GPU 온도 표시 (지원 여부에 따라) + const gpuTemp = data.gpu?.temperature; + if (typeof gpuTemp === 'number') { + document.getElementById('gpu-temp').textContent = gpuTemp.toFixed(1) + '°C'; + } else { + document.getElementById('gpu-temp').textContent = gpuTemp || '미지원'; + } + + // GPU 클럭 표시 (지원 여부에 따라) + const gpuClock = data.gpu?.clock_speed; + if (typeof gpuClock === 'number') { + document.getElementById('gpu-clock').textContent = gpuClock.toFixed(0) + 'MHz'; + } else { + document.getElementById('gpu-clock').textContent = gpuClock || '미지원'; + } // 워커 정보 업데이트 if (data.workers) { document.getElementById('worker-count').textContent = data.workers.total_workers || 0; - document.getElementById('session-pool').textContent = Object.keys(data.sessions || {}).length; document.getElementById('queue-size').textContent = data.workers.queue_size || 0; document.getElementById('worker-status').textContent = data.workers.running ? '실행 중' : '중지됨'; @@ -1024,6 +1086,43 @@ HTML_TEMPLATE = """ } } + // 세션 풀 상세 정보 업데이트 + if (data.sessions) { + // Simple LAMA 세션 + const lamaSession = data.sessions['simple-lama'] || data.sessions['simple_lama'] || {}; + const lamaTotalSessions = lamaSession.total || 0; + const lamaInUse = lamaSession.in_use || 0; + const lamaAvailable = lamaSession.available || (lamaTotalSessions - lamaInUse); + document.getElementById('session-lama').textContent = `${lamaInUse}/${lamaTotalSessions} 사용중`; + + // MIGAN 세션 + const miganSession = data.sessions['migan'] || {}; + const miganTotalSessions = miganSession.total || 0; + const miganInUse = miganSession.in_use || 0; + const miganAvailable = miganSession.available || (miganTotalSessions - miganInUse); + document.getElementById('session-migan').textContent = `${miganInUse}/${miganTotalSessions} 사용중`; + + // RemBG 세션 + const rembgSession = data.sessions['rembg'] || {}; + const rembgTotalSessions = rembgSession.total || 0; + const rembgInUse = rembgSession.in_use || 0; + const rembgAvailable = rembgSession.available || (rembgTotalSessions - rembgInUse); + document.getElementById('session-rembg').textContent = `${rembgInUse}/${rembgTotalSessions} 사용중`; + + // 총 세션 수 + const totalSessions = lamaTotalSessions + miganTotalSessions + rembgTotalSessions; + const totalInUse = lamaInUse + miganInUse + rembgInUse; + document.getElementById('session-total').textContent = `${totalInUse}/${totalSessions} 사용중`; + + console.log("세션 풀 상태:", data.sessions); + } else { + // 세션 데이터가 없는 경우 기본값 표시 + document.getElementById('session-lama').textContent = '0/0 사용중'; + document.getElementById('session-migan').textContent = '0/0 사용중'; + document.getElementById('session-rembg').textContent = '0/0 사용중'; + document.getElementById('session-total').textContent = '0/0 사용중'; + } + // API 통계 업데이트 if (data.api_stats) { document.getElementById('total-requests').textContent = data.api_stats.total_requests || 0; diff --git a/logs/main_server.log b/logs/main_server.log index 1963a94..08ad1ba 100644 --- a/logs/main_server.log +++ b/logs/main_server.log @@ -1,226 +1,97 @@ -INFO: Started server process [1328887] -2025-08-29 01:38:38,985 - uvicorn.error - INFO - Started server process [1328887] +INFO: Started server process [1333986] +2025-08-29 02:18:38,188 - uvicorn.error - INFO - Started server process [1333986] INFO: Waiting for application startup. -2025-08-29 01:38:38,986 - uvicorn.error - INFO - Waiting for application startup. -2025-08-29 01:38:38,987 - main - INFO - 🚀 인페인팅 서버 시작 중... -2025-08-29 01:38:38,987 - main - INFO - ✅ 공유 객체를 app.state에 저장 완료 -2025-08-29 01:38:38,987 - main - INFO - 🔄 상태 저장 백그라운드 작업 생성 중... -2025-08-29 01:38:38,987 - main - INFO - ✅ 상태 저장 백그라운드 작업 생성 완료 -2025-08-29 01:38:38,987 - app.core.session_pool - INFO - Initializing session pools... -2025-08-29 01:38:38,987 - app.core.session_pool - INFO - Initializing 2 sessions for simple_lama -2025-08-29 01:38:38,988 - main - INFO - 🔄 상태 저장 백그라운드 작업 시작됨 -2025-08-29 01:38:38,989 - main - INFO - 상태 저장 완료 #1: 01:38:38 -2025-08-29 01:38:39,089 - app.core.session_pool - INFO - Created session simple_lama_0 -2025-08-29 01:38:39,190 - app.core.session_pool - INFO - Created session simple_lama_1 -2025-08-29 01:38:39,191 - app.core.session_pool - INFO - Initializing 2 sessions for migan -2025-08-29 01:38:39,292 - app.core.session_pool - INFO - Created session migan_0 -2025-08-29 01:38:39,393 - app.core.session_pool - INFO - Created session migan_1 -2025-08-29 01:38:39,394 - app.core.session_pool - INFO - Initializing 1 sessions for rembg -2025-08-29 01:38:39,495 - app.core.session_pool - INFO - Created session rembg_0 -2025-08-29 01:38:39,495 - app.core.session_pool - INFO - Session pools initialized successfully -2025-08-29 01:38:39,496 - main - INFO - ✅ 세션 풀 초기화 완료 -2025-08-29 01:38:39,496 - app.core.worker_manager - INFO - Starting worker manager... -2025-08-29 01:38:39,497 - app.core.worker_manager - INFO - Worker manager started with 1 workers -2025-08-29 01:38:39,497 - main - INFO - ✅ 워커 매니저 시작 완료 -2025-08-29 01:38:39,497 - main - INFO - 🎉 인페인팅 서버 시작 완료! +2025-08-29 02:18:38,189 - uvicorn.error - INFO - Waiting for application startup. +2025-08-29 02:18:38,190 - main - INFO - 🚀 인페인팅 서버 시작 중... +2025-08-29 02:18:38,190 - main - INFO - ✅ 공유 객체를 app.state에 저장 완료 +2025-08-29 02:18:38,190 - main - INFO - 🔄 상태 저장 백그라운드 작업 생성 중... +2025-08-29 02:18:38,190 - main - INFO - ✅ 상태 저장 백그라운드 작업 생성 완료 +2025-08-29 02:18:38,190 - app.core.session_pool - INFO - Initializing session pools... +2025-08-29 02:18:38,190 - app.core.session_pool - INFO - Initializing 2 sessions for simple_lama +2025-08-29 02:18:38,191 - main - INFO - 🔄 상태 저장 백그라운드 작업 시작됨 +2025-08-29 02:18:38,192 - main - INFO - 상태 저장 완료 #1: 02:18:38 +2025-08-29 02:18:38,292 - app.core.session_pool - INFO - Created session simple_lama_0 +2025-08-29 02:18:38,393 - app.core.session_pool - INFO - Created session simple_lama_1 +2025-08-29 02:18:38,394 - app.core.session_pool - INFO - Initializing 2 sessions for migan +2025-08-29 02:18:38,495 - app.core.session_pool - INFO - Created session migan_0 +2025-08-29 02:18:38,597 - app.core.session_pool - INFO - Created session migan_1 +2025-08-29 02:18:38,597 - app.core.session_pool - INFO - Initializing 1 sessions for rembg +2025-08-29 02:18:38,698 - app.core.session_pool - INFO - Created session rembg_0 +2025-08-29 02:18:38,699 - app.core.session_pool - INFO - Session pools initialized successfully +2025-08-29 02:18:38,699 - main - INFO - ✅ 세션 풀 초기화 완료 +2025-08-29 02:18:38,699 - app.core.worker_manager - INFO - Starting worker manager... +2025-08-29 02:18:38,700 - app.core.worker_manager - INFO - Worker manager started with 2 workers +2025-08-29 02:18:38,700 - main - INFO - ✅ 워커 매니저 시작 완료 +2025-08-29 02:18:38,700 - main - INFO - 🎉 인페인팅 서버 시작 완료! INFO: Application startup complete. -2025-08-29 01:38:39,498 - uvicorn.error - INFO - Application startup complete. +2025-08-29 02:18:38,701 - uvicorn.error - INFO - Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8008 (Press CTRL+C to quit) -2025-08-29 01:38:39,500 - uvicorn.error - INFO - Uvicorn running on http://0.0.0.0:8008 (Press CTRL+C to quit) -2025-08-29 01:38:39,993 - main - INFO - 상태 저장 완료 #2: 01:38:39 -INFO: 127.0.0.1:57950 - "GET /health HTTP/1.1" 200 OK -2025-08-29 01:38:40,997 - main - INFO - 상태 저장 완료 #3: 01:38:40 -2025-08-29 01:38:42,001 - main - INFO - 상태 저장 완료 #4: 01:38:41 -2025-08-29 01:38:43,005 - main - INFO - 상태 저장 완료 #5: 01:38:43 -2025-08-29 01:38:44,009 - main - INFO - 상태 저장 완료 #6: 01:38:44 -2025-08-29 01:38:45,013 - main - INFO - 상태 저장 완료 #7: 01:38:45 -2025-08-29 01:38:46,016 - main - INFO - 상태 저장 완료 #8: 01:38:46 -2025-08-29 01:38:47,020 - main - INFO - 상태 저장 완료 #9: 01:38:47 -2025-08-29 01:38:48,024 - main - INFO - 상태 저장 완료 #10: 01:38:48 -2025-08-29 01:38:49,028 - main - INFO - 상태 저장 완료 #11: 01:38:49 -2025-08-29 01:38:50,031 - main - INFO - 상태 저장 완료 #12: 01:38:50 -2025-08-29 01:38:51,034 - main - INFO - 상태 저장 완료 #13: 01:38:51 -2025-08-29 01:38:52,037 - main - INFO - 상태 저장 완료 #14: 01:38:52 -2025-08-29 01:38:53,040 - main - INFO - 상태 저장 완료 #15: 01:38:53 -INFO: 127.0.0.1:46584 - "GET /api/v1/model HTTP/1.1" 200 OK -2025-08-29 01:38:54,043 - main - INFO - 상태 저장 완료 #16: 01:38:54 -2025-08-29 01:38:55,046 - main - INFO - 상태 저장 완료 #17: 01:38:55 -2025-08-29 01:38:56,050 - main - INFO - 상태 저장 완료 #18: 01:38:56 -2025-08-29 01:38:57,055 - main - INFO - 상태 저장 완료 #19: 01:38:57 -2025-08-29 01:38:58,059 - main - INFO - 상태 저장 완료 #20: 01:38:58 -2025-08-29 01:38:59,063 - main - INFO - 상태 저장 완료 #21: 01:38:59 -2025-08-29 01:39:00,068 - main - INFO - 상태 저장 완료 #22: 01:39:00 -2025-08-29 01:39:01,071 - main - INFO - 상태 저장 완료 #23: 01:39:01 -2025-08-29 01:39:02,076 - main - INFO - 상태 저장 완료 #24: 01:39:02 -2025-08-29 01:39:03,078 - main - INFO - 상태 저장 완료 #25: 01:39:03 -2025-08-29 01:39:04,083 - main - INFO - 상태 저장 완료 #26: 01:39:04 -INFO: 127.0.0.1:38784 - "GET /api/v1/model HTTP/1.1" 200 OK -2025-08-29 01:39:05,087 - main - INFO - 상태 저장 완료 #27: 01:39:05 -2025-08-29 01:39:06,092 - main - INFO - 상태 저장 완료 #28: 01:39:06 -2025-08-29 01:39:07,098 - main - INFO - 상태 저장 완료 #29: 01:39:07 -2025-08-29 01:39:08,102 - main - INFO - 상태 저장 완료 #30: 01:39:08 -2025-08-29 01:39:09,105 - main - INFO - 상태 저장 완료 #31: 01:39:09 -2025-08-29 01:39:10,109 - main - INFO - 상태 저장 완료 #32: 01:39:10 -2025-08-29 01:39:11,113 - main - INFO - 상태 저장 완료 #33: 01:39:11 -2025-08-29 01:39:12,117 - main - INFO - 상태 저장 완료 #34: 01:39:12 -INFO: 127.0.0.1:49464 - "GET /health HTTP/1.1" 200 OK -2025-08-29 01:39:13,121 - main - INFO - 상태 저장 완료 #35: 01:39:13 -2025-08-29 01:39:14,125 - main - INFO - 상태 저장 완료 #36: 01:39:14 -2025-08-29 01:39:15,129 - main - INFO - 상태 저장 완료 #37: 01:39:15 -2025-08-29 01:39:16,133 - main - INFO - 상태 저장 완료 #38: 01:39:16 -2025-08-29 01:39:17,138 - main - INFO - 상태 저장 완료 #39: 01:39:17 -2025-08-29 01:39:18,142 - main - INFO - 상태 저장 완료 #40: 01:39:18 -2025-08-29 01:39:19,148 - main - INFO - 상태 저장 완료 #41: 01:39:19 -2025-08-29 01:39:20,151 - main - INFO - 상태 저장 완료 #42: 01:39:20 -2025-08-29 01:39:21,156 - main - INFO - 상태 저장 완료 #43: 01:39:21 -2025-08-29 01:39:22,161 - main - INFO - 상태 저장 완료 #44: 01:39:22 -2025-08-29 01:39:23,165 - main - INFO - 상태 저장 완료 #45: 01:39:23 -2025-08-29 01:39:24,170 - main - INFO - 상태 저장 완료 #46: 01:39:24 -2025-08-29 01:39:25,175 - main - INFO - 상태 저장 완료 #47: 01:39:25 -2025-08-29 01:39:26,185 - main - INFO - 상태 저장 완료 #48: 01:39:26 -2025-08-29 01:39:27,189 - main - INFO - 상태 저장 완료 #49: 01:39:27 -2025-08-29 01:39:28,193 - main - INFO - 상태 저장 완료 #50: 01:39:28 -2025-08-29 01:39:29,197 - main - INFO - 상태 저장 완료 #51: 01:39:29 -2025-08-29 01:39:30,201 - main - INFO - 상태 저장 완료 #52: 01:39:30 -2025-08-29 01:39:31,206 - main - INFO - 상태 저장 완료 #53: 01:39:31 -2025-08-29 01:39:32,211 - main - INFO - 상태 저장 완료 #54: 01:39:32 -2025-08-29 01:39:33,215 - main - INFO - 상태 저장 완료 #55: 01:39:33 -2025-08-29 01:39:34,220 - main - INFO - 상태 저장 완료 #56: 01:39:34 -2025-08-29 01:39:35,224 - main - INFO - 상태 저장 완료 #57: 01:39:35 -2025-08-29 01:39:36,230 - main - INFO - 상태 저장 완료 #58: 01:39:36 -2025-08-29 01:39:37,235 - main - INFO - 상태 저장 완료 #59: 01:39:37 -2025-08-29 01:39:38,240 - main - INFO - 상태 저장 완료 #60: 01:39:38 -2025-08-29 01:39:39,245 - main - INFO - 상태 저장 완료 #61: 01:39:39 -2025-08-29 01:39:42,539 - main - INFO - 상태 저장 완료 #62: 01:39:42 -2025-08-29 01:39:43,544 - main - INFO - 상태 저장 완료 #63: 01:39:43 -2025-08-29 01:39:44,548 - main - INFO - 상태 저장 완료 #64: 01:39:44 -2025-08-29 01:39:45,553 - main - INFO - 상태 저장 완료 #65: 01:39:45 -2025-08-29 01:39:46,557 - main - INFO - 상태 저장 완료 #66: 01:39:46 -2025-08-29 01:39:47,560 - main - INFO - 상태 저장 완료 #67: 01:39:47 -2025-08-29 01:39:48,565 - main - INFO - 상태 저장 완료 #68: 01:39:48 -2025-08-29 01:39:49,569 - main - INFO - 상태 저장 완료 #69: 01:39:49 -2025-08-29 01:39:50,575 - main - INFO - 상태 저장 완료 #70: 01:39:50 -2025-08-29 01:39:51,580 - main - INFO - 상태 저장 완료 #71: 01:39:51 -2025-08-29 01:39:52,584 - main - INFO - 상태 저장 완료 #72: 01:39:52 -2025-08-29 01:39:53,589 - main - INFO - 상태 저장 완료 #73: 01:39:53 -2025-08-29 01:39:54,593 - main - INFO - 상태 저장 완료 #74: 01:39:54 -2025-08-29 01:39:55,597 - main - INFO - 상태 저장 완료 #75: 01:39:55 -2025-08-29 01:39:56,601 - main - INFO - 상태 저장 완료 #76: 01:39:56 -2025-08-29 01:39:57,605 - main - INFO - 상태 저장 완료 #77: 01:39:57 -2025-08-29 01:39:58,609 - main - INFO - 상태 저장 완료 #78: 01:39:58 -2025-08-29 01:39:59,613 - main - INFO - 상태 저장 완료 #79: 01:39:59 -2025-08-29 01:40:00,617 - main - INFO - 상태 저장 완료 #80: 01:40:00 -2025-08-29 01:40:01,621 - main - INFO - 상태 저장 완료 #81: 01:40:01 -2025-08-29 01:40:05,576 - main - INFO - 상태 저장 완료 #82: 01:40:05 -2025-08-29 01:40:06,580 - main - INFO - 상태 저장 완료 #83: 01:40:06 -2025-08-29 01:40:07,585 - main - INFO - 상태 저장 완료 #84: 01:40:07 -2025-08-29 01:40:08,589 - main - INFO - 상태 저장 완료 #85: 01:40:08 -2025-08-29 01:40:09,593 - main - INFO - 상태 저장 완료 #86: 01:40:09 -2025-08-29 01:40:10,597 - main - INFO - 상태 저장 완료 #87: 01:40:10 -2025-08-29 01:40:11,602 - main - INFO - 상태 저장 완료 #88: 01:40:11 -2025-08-29 01:40:12,606 - main - INFO - 상태 저장 완료 #89: 01:40:12 -2025-08-29 01:40:13,610 - main - INFO - 상태 저장 완료 #90: 01:40:13 -2025-08-29 01:40:14,613 - main - INFO - 상태 저장 완료 #91: 01:40:14 -2025-08-29 01:40:15,617 - main - INFO - 상태 저장 완료 #92: 01:40:15 -2025-08-29 01:40:16,622 - main - INFO - 상태 저장 완료 #93: 01:40:16 -2025-08-29 01:40:17,627 - main - INFO - 상태 저장 완료 #94: 01:40:17 -2025-08-29 01:40:18,632 - main - INFO - 상태 저장 완료 #95: 01:40:18 -2025-08-29 01:40:19,636 - main - INFO - 상태 저장 완료 #96: 01:40:19 -2025-08-29 01:40:20,640 - main - INFO - 상태 저장 완료 #97: 01:40:20 -2025-08-29 01:40:21,644 - main - INFO - 상태 저장 완료 #98: 01:40:21 -2025-08-29 01:40:22,648 - main - INFO - 상태 저장 완료 #99: 01:40:22 -2025-08-29 01:40:23,652 - main - INFO - 상태 저장 완료 #100: 01:40:23 -2025-08-29 01:40:24,656 - main - INFO - 상태 저장 완료 #101: 01:40:24 -2025-08-29 01:40:28,611 - main - INFO - 상태 저장 완료 #102: 01:40:28 -2025-08-29 01:40:29,615 - main - INFO - 상태 저장 완료 #103: 01:40:29 -2025-08-29 01:40:30,619 - main - INFO - 상태 저장 완료 #104: 01:40:30 -2025-08-29 01:40:31,624 - main - INFO - 상태 저장 완료 #105: 01:40:31 -2025-08-29 01:40:32,628 - main - INFO - 상태 저장 완료 #106: 01:40:32 -2025-08-29 01:40:33,632 - main - INFO - 상태 저장 완료 #107: 01:40:33 -2025-08-29 01:40:34,636 - main - INFO - 상태 저장 완료 #108: 01:40:34 -2025-08-29 01:40:35,641 - main - INFO - 상태 저장 완료 #109: 01:40:35 -2025-08-29 01:40:36,646 - main - INFO - 상태 저장 완료 #110: 01:40:36 -2025-08-29 01:40:37,649 - main - INFO - 상태 저장 완료 #111: 01:40:37 -2025-08-29 01:40:38,653 - main - INFO - 상태 저장 완료 #112: 01:40:38 -2025-08-29 01:40:39,657 - main - INFO - 상태 저장 완료 #113: 01:40:39 -2025-08-29 01:40:40,661 - main - INFO - 상태 저장 완료 #114: 01:40:40 -2025-08-29 01:40:41,665 - main - INFO - 상태 저장 완료 #115: 01:40:41 -2025-08-29 01:40:42,669 - main - INFO - 상태 저장 완료 #116: 01:40:42 -2025-08-29 01:40:43,673 - main - INFO - 상태 저장 완료 #117: 01:40:43 -2025-08-29 01:40:44,678 - main - INFO - 상태 저장 완료 #118: 01:40:44 -2025-08-29 01:40:45,682 - main - INFO - 상태 저장 완료 #119: 01:40:45 -2025-08-29 01:40:46,686 - main - INFO - 상태 저장 완료 #120: 01:40:46 -2025-08-29 01:40:47,691 - main - INFO - 상태 저장 완료 #121: 01:40:47 -2025-08-29 01:40:51,646 - main - INFO - 상태 저장 완료 #122: 01:40:51 -2025-08-29 01:40:52,652 - main - INFO - 상태 저장 완료 #123: 01:40:52 -2025-08-29 01:40:53,656 - main - INFO - 상태 저장 완료 #124: 01:40:53 -2025-08-29 01:40:54,661 - main - INFO - 상태 저장 완료 #125: 01:40:54 -2025-08-29 01:40:55,665 - main - INFO - 상태 저장 완료 #126: 01:40:55 -2025-08-29 01:40:56,670 - main - INFO - 상태 저장 완료 #127: 01:40:56 -2025-08-29 01:40:57,675 - main - INFO - 상태 저장 완료 #128: 01:40:57 -2025-08-29 01:40:58,680 - main - INFO - 상태 저장 완료 #129: 01:40:58 -2025-08-29 01:40:59,684 - main - INFO - 상태 저장 완료 #130: 01:40:59 -2025-08-29 01:41:00,689 - main - INFO - 상태 저장 완료 #131: 01:41:00 -2025-08-29 01:41:01,694 - main - INFO - 상태 저장 완료 #132: 01:41:01 -2025-08-29 01:41:02,698 - main - INFO - 상태 저장 완료 #133: 01:41:02 -2025-08-29 01:41:03,703 - main - INFO - 상태 저장 완료 #134: 01:41:03 -2025-08-29 01:41:04,707 - main - INFO - 상태 저장 완료 #135: 01:41:04 -2025-08-29 01:41:05,712 - main - INFO - 상태 저장 완료 #136: 01:41:05 -2025-08-29 01:41:06,716 - main - INFO - 상태 저장 완료 #137: 01:41:06 -2025-08-29 01:41:07,720 - main - INFO - 상태 저장 완료 #138: 01:41:07 -2025-08-29 01:41:08,724 - main - INFO - 상태 저장 완료 #139: 01:41:08 -2025-08-29 01:41:09,728 - main - INFO - 상태 저장 완료 #140: 01:41:09 -2025-08-29 01:41:10,733 - main - INFO - 상태 저장 완료 #141: 01:41:10 -2025-08-29 01:41:14,678 - main - INFO - 상태 저장 완료 #142: 01:41:14 -2025-08-29 01:41:15,683 - main - INFO - 상태 저장 완료 #143: 01:41:15 -2025-08-29 01:41:16,687 - main - INFO - 상태 저장 완료 #144: 01:41:16 -2025-08-29 01:41:17,691 - main - INFO - 상태 저장 완료 #145: 01:41:17 -2025-08-29 01:41:18,695 - main - INFO - 상태 저장 완료 #146: 01:41:18 -2025-08-29 01:41:19,700 - main - INFO - 상태 저장 완료 #147: 01:41:19 -2025-08-29 01:41:20,705 - main - INFO - 상태 저장 완료 #148: 01:41:20 -2025-08-29 01:41:21,709 - main - INFO - 상태 저장 완료 #149: 01:41:21 -2025-08-29 01:41:22,713 - main - INFO - 상태 저장 완료 #150: 01:41:22 -2025-08-29 01:41:23,717 - main - INFO - 상태 저장 완료 #151: 01:41:23 -2025-08-29 01:41:24,721 - main - INFO - 상태 저장 완료 #152: 01:41:24 -2025-08-29 01:41:25,726 - main - INFO - 상태 저장 완료 #153: 01:41:25 -2025-08-29 01:41:26,730 - main - INFO - 상태 저장 완료 #154: 01:41:26 -2025-08-29 01:41:27,735 - main - INFO - 상태 저장 완료 #155: 01:41:27 -2025-08-29 01:41:28,740 - main - INFO - 상태 저장 완료 #156: 01:41:28 -2025-08-29 01:41:29,743 - main - INFO - 상태 저장 완료 #157: 01:41:29 -2025-08-29 01:41:30,745 - main - INFO - 상태 저장 완료 #158: 01:41:30 -2025-08-29 01:41:31,750 - main - INFO - 상태 저장 완료 #159: 01:41:31 -2025-08-29 01:41:32,755 - main - INFO - 상태 저장 완료 #160: 01:41:32 -2025-08-29 01:41:33,759 - main - INFO - 상태 저장 완료 #161: 01:41:33 -2025-08-29 01:41:37,714 - main - INFO - 상태 저장 완료 #162: 01:41:37 -2025-08-29 01:41:38,719 - main - INFO - 상태 저장 완료 #163: 01:41:38 -2025-08-29 01:41:39,723 - main - INFO - 상태 저장 완료 #164: 01:41:39 -2025-08-29 01:41:40,727 - main - INFO - 상태 저장 완료 #165: 01:41:40 -2025-08-29 01:41:41,733 - main - INFO - 상태 저장 완료 #166: 01:41:41 -2025-08-29 01:41:42,737 - main - INFO - 상태 저장 완료 #167: 01:41:42 -2025-08-29 01:41:43,741 - main - INFO - 상태 저장 완료 #168: 01:41:43 -2025-08-29 01:41:44,745 - main - INFO - 상태 저장 완료 #169: 01:41:44 -2025-08-29 01:41:45,750 - main - INFO - 상태 저장 완료 #170: 01:41:45 -2025-08-29 01:41:46,754 - main - INFO - 상태 저장 완료 #171: 01:41:46 -2025-08-29 01:41:47,758 - main - INFO - 상태 저장 완료 #172: 01:41:47 -2025-08-29 01:41:48,764 - main - INFO - 상태 저장 완료 #173: 01:41:48 -2025-08-29 01:41:49,768 - main - INFO - 상태 저장 완료 #174: 01:41:49 -2025-08-29 01:41:50,772 - main - INFO - 상태 저장 완료 #175: 01:41:50 -2025-08-29 01:41:51,776 - main - INFO - 상태 저장 완료 #176: 01:41:51 -2025-08-29 01:41:52,780 - main - INFO - 상태 저장 완료 #177: 01:41:52 -2025-08-29 01:41:53,785 - main - INFO - 상태 저장 완료 #178: 01:41:53 -2025-08-29 01:41:54,790 - main - INFO - 상태 저장 완료 #179: 01:41:54 -2025-08-29 01:41:55,794 - main - INFO - 상태 저장 완료 #180: 01:41:55 -2025-08-29 01:41:56,799 - main - INFO - 상태 저장 완료 #181: 01:41:56 -2025-08-29 01:42:00,749 - main - INFO - 상태 저장 완료 #182: 01:42:00 -2025-08-29 01:42:01,754 - main - INFO - 상태 저장 완료 #183: 01:42:01 -2025-08-29 01:42:02,758 - main - INFO - 상태 저장 완료 #184: 01:42:02 -2025-08-29 01:42:03,763 - main - INFO - 상태 저장 완료 #185: 01:42:03 -2025-08-29 01:42:04,766 - main - INFO - 상태 저장 완료 #186: 01:42:04 -2025-08-29 01:42:05,769 - main - INFO - 상태 저장 완료 #187: 01:42:05 -2025-08-29 01:42:06,772 - main - INFO - 상태 저장 완료 #188: 01:42:06 -2025-08-29 01:42:07,774 - main - INFO - 상태 저장 완료 #189: 01:42:07 -2025-08-29 01:42:08,781 - main - INFO - 상태 저장 완료 #190: 01:42:08 -2025-08-29 01:42:09,786 - main - INFO - 상태 저장 완료 #191: 01:42:09 -2025-08-29 01:42:10,791 - main - INFO - 상태 저장 완료 #192: 01:42:10 -2025-08-29 01:42:11,795 - main - INFO - 상태 저장 완료 #193: 01:42:11 -2025-08-29 01:42:12,799 - main - INFO - 상태 저장 완료 #194: 01:42:12 +2025-08-29 02:18:38,703 - uvicorn.error - INFO - Uvicorn running on http://0.0.0.0:8008 (Press CTRL+C to quit) +2025-08-29 02:18:39,196 - main - INFO - 상태 저장 완료 #2: 02:18:39 +INFO: 127.0.0.1:33390 - "GET /health HTTP/1.1" 200 OK +2025-08-29 02:18:40,199 - main - INFO - 상태 저장 완료 #3: 02:18:40 +2025-08-29 02:18:41,202 - main - INFO - 상태 저장 완료 #4: 02:18:41 +2025-08-29 02:18:42,206 - main - INFO - 상태 저장 완료 #5: 02:18:42 +2025-08-29 02:18:43,210 - main - INFO - 상태 저장 완료 #6: 02:18:43 +2025-08-29 02:18:44,215 - main - INFO - 상태 저장 완료 #7: 02:18:44 +2025-08-29 02:18:45,220 - main - INFO - 상태 저장 완료 #8: 02:18:45 +2025-08-29 02:18:46,224 - main - INFO - 상태 저장 완료 #9: 02:18:46 +2025-08-29 02:18:47,228 - main - INFO - 상태 저장 완료 #10: 02:18:47 +2025-08-29 02:18:48,232 - main - INFO - 상태 저장 완료 #11: 02:18:48 +2025-08-29 02:18:49,236 - main - INFO - 상태 저장 완료 #12: 02:18:49 +2025-08-29 02:18:50,240 - main - INFO - 상태 저장 완료 #13: 02:18:50 +2025-08-29 02:18:51,245 - main - INFO - 상태 저장 완료 #14: 02:18:51 +2025-08-29 02:18:52,249 - main - INFO - 상태 저장 완료 #15: 02:18:52 +2025-08-29 02:18:53,254 - main - INFO - 상태 저장 완료 #16: 02:18:53 +2025-08-29 02:18:54,258 - main - INFO - 상태 저장 완료 #17: 02:18:54 +2025-08-29 02:18:55,262 - main - INFO - 상태 저장 완료 #18: 02:18:55 +INFO: 127.0.0.1:40968 - "GET /api/v1/model HTTP/1.1" 200 OK +INFO: 127.0.0.1:40980 - "GET /api/v1/server-config HTTP/1.1" 200 OK +INFO: 127.0.0.1:40994 - "GET /health HTTP/1.1" 200 OK +2025-08-29 02:18:56,267 - main - INFO - 상태 저장 완료 #19: 02:18:56 +2025-08-29 02:18:57,272 - main - INFO - 상태 저장 완료 #20: 02:18:57 +2025-08-29 02:18:58,276 - main - INFO - 상태 저장 완료 #21: 02:18:58 +2025-08-29 02:18:59,280 - main - INFO - 상태 저장 완료 #22: 02:18:59 +2025-08-29 02:19:00,285 - main - INFO - 상태 저장 완료 #23: 02:19:00 +2025-08-29 02:19:01,289 - main - INFO - 상태 저장 완료 #24: 02:19:01 +2025-08-29 02:19:02,294 - main - INFO - 상태 저장 완료 #25: 02:19:02 +2025-08-29 02:19:03,299 - main - INFO - 상태 저장 완료 #26: 02:19:03 +2025-08-29 02:19:04,303 - main - INFO - 상태 저장 완료 #27: 02:19:04 +2025-08-29 02:19:05,308 - main - INFO - 상태 저장 완료 #28: 02:19:05 +2025-08-29 02:19:06,313 - main - INFO - 상태 저장 완료 #29: 02:19:06 +2025-08-29 02:19:07,317 - main - INFO - 상태 저장 완료 #30: 02:19:07 +2025-08-29 02:19:08,321 - main - INFO - 상태 저장 완료 #31: 02:19:08 +2025-08-29 02:19:09,326 - main - INFO - 상태 저장 완료 #32: 02:19:09 +2025-08-29 02:19:10,330 - main - INFO - 상태 저장 완료 #33: 02:19:10 +2025-08-29 02:19:11,335 - main - INFO - 상태 저장 완료 #34: 02:19:11 +2025-08-29 02:19:12,340 - main - INFO - 상태 저장 완료 #35: 02:19:12 +2025-08-29 02:19:13,345 - main - INFO - 상태 저장 완료 #36: 02:19:13 +2025-08-29 02:19:14,349 - main - INFO - 상태 저장 완료 #37: 02:19:14 +2025-08-29 02:19:15,353 - main - INFO - 상태 저장 완료 #38: 02:19:15 +2025-08-29 02:19:16,358 - main - INFO - 상태 저장 완료 #39: 02:19:16 +2025-08-29 02:19:17,363 - main - INFO - 상태 저장 완료 #40: 02:19:17 +2025-08-29 02:19:18,368 - main - INFO - 상태 저장 완료 #41: 02:19:18 +2025-08-29 02:19:19,372 - main - INFO - 상태 저장 완료 #42: 02:19:19 +2025-08-29 02:19:20,376 - main - INFO - 상태 저장 완료 #43: 02:19:20 +2025-08-29 02:19:21,382 - main - INFO - 상태 저장 완료 #44: 02:19:21 +2025-08-29 02:19:22,386 - main - INFO - 상태 저장 완료 #45: 02:19:22 +2025-08-29 02:19:23,390 - main - INFO - 상태 저장 완료 #46: 02:19:23 +2025-08-29 02:19:24,395 - main - INFO - 상태 저장 완료 #47: 02:19:24 +2025-08-29 02:19:25,404 - main - INFO - 상태 저장 완료 #48: 02:19:25 +2025-08-29 02:19:26,408 - main - INFO - 상태 저장 완료 #49: 02:19:26 +2025-08-29 02:19:27,413 - main - INFO - 상태 저장 완료 #50: 02:19:27 +2025-08-29 02:19:28,417 - main - INFO - 상태 저장 완료 #51: 02:19:28 +2025-08-29 02:19:29,422 - main - INFO - 상태 저장 완료 #52: 02:19:29 +2025-08-29 02:19:30,429 - main - INFO - 상태 저장 완료 #53: 02:19:30 +2025-08-29 02:19:31,433 - main - INFO - 상태 저장 완료 #54: 02:19:31 +2025-08-29 02:19:32,438 - main - INFO - 상태 저장 완료 #55: 02:19:32 +2025-08-29 02:19:33,443 - main - INFO - 상태 저장 완료 #56: 02:19:33 +2025-08-29 02:19:34,447 - main - INFO - 상태 저장 완료 #57: 02:19:34 +2025-08-29 02:19:35,455 - main - INFO - 상태 저장 완료 #58: 02:19:35 +2025-08-29 02:19:36,459 - main - INFO - 상태 저장 완료 #59: 02:19:36 +2025-08-29 02:19:37,464 - main - INFO - 상태 저장 완료 #60: 02:19:37 +2025-08-29 02:19:38,467 - main - INFO - 상태 저장 완료 #61: 02:19:38 +2025-08-29 02:19:41,734 - main - INFO - 상태 저장 완료 #62: 02:19:41 +2025-08-29 02:19:42,740 - main - INFO - 상태 저장 완료 #63: 02:19:42 +2025-08-29 02:19:43,745 - main - INFO - 상태 저장 완료 #64: 02:19:43 +2025-08-29 02:19:44,749 - main - INFO - 상태 저장 완료 #65: 02:19:44 diff --git a/logs/main_server.pid b/logs/main_server.pid index 72bc448..bad1abc 100644 --- a/logs/main_server.pid +++ b/logs/main_server.pid @@ -1 +1 @@ -1328887 +1333986 diff --git a/logs/monitoring.log b/logs/monitoring.log index 532c8b9..9317c74 100644 --- a/logs/monitoring.log +++ b/logs/monitoring.log @@ -1,6 +1,6 @@ -INFO: Started server process [1328918] +INFO: Started server process [1334030] INFO: Waiting for application startup. Fan control not available INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8888 (Press CTRL+C to quit) -INFO: 127.0.0.1:42340 - "GET /api/simple HTTP/1.1" 200 OK +INFO: 127.0.0.1:46548 - "GET /api/simple HTTP/1.1" 200 OK diff --git a/logs/monitoring.pid b/logs/monitoring.pid index 5e153e1..e548941 100644 --- a/logs/monitoring.pid +++ b/logs/monitoring.pid @@ -1 +1 @@ -1328918 +1334030 diff --git a/status.json b/status.json index ee3efcb..71cad5d 100644 --- a/status.json +++ b/status.json @@ -1,12 +1,19 @@ { "worker_status": { "running": true, - "total_workers": 1, + "total_workers": 2, "queue_size": 0, "workers_by_status": { "idle": [ { - "id": "worker_f42e10e1", + "id": "worker_9c36a239", + "status": "idle", + "task_count": 0, + "error_count": 0, + "last_task_at": null + }, + { + "id": "worker_fc828cfc", "status": "idle", "task_count": 0, "error_count": 0, @@ -43,32 +50,40 @@ "success_rate": 100.0, "endpoint_usage": { "GET /health": 2, - "GET /api/v1/model": 2 + "GET /api/v1/model": 1, + "GET /api/v1/server-config": 1 }, "endpoint_stats": { "GET /health": { "count": 2, - "avg_time": 0.001588582992553711, - "min_time": 0.0013887882232666016, - "max_time": 0.0017883777618408203, + "avg_time": 0.0015218257904052734, + "min_time": 0.0012848377227783203, + "max_time": 0.0017588138580322266, "current_concurrent": 0 }, "GET /api/v1/model": { - "count": 2, - "avg_time": 0.0014955997467041016, - "min_time": 0.0014739036560058594, - "max_time": 0.0015172958374023438, + "count": 1, + "avg_time": 0.0016770362854003906, + "min_time": 0.0016770362854003906, + "max_time": 0.0016770362854003906, + "current_concurrent": 0 + }, + "GET /api/v1/server-config": { + "count": 1, + "avg_time": 0.001375436782836914, + "min_time": 0.001375436782836914, + "max_time": 0.001375436782836914, "current_concurrent": 0 } }, - "average_response_time": 0.0015420913696289062, - "min_response_time": 0.0013887882232666016, - "max_response_time": 0.0017883777618408203, + "average_response_time": 0.0015240311622619629, + "min_response_time": 0.0012848377227783203, + "max_response_time": 0.0017588138580322266, "current_concurrent": 0, "max_concurrent": 1, - "requests_per_second": 0.018707118250962246, - "uptime": 213.82235074043274, + "requests_per_second": 0.06008683953274193, + "uptime": 66.57031774520874, "recent_errors": [] }, - "timestamp": 1756399332.7971911 + "timestamp": 1756401584.7473466 } \ No newline at end of file