diff --git a/runtime-analysis/INVENTORY.json b/runtime-analysis/INVENTORY.json new file mode 100644 index 0000000..0c6fbc3 --- /dev/null +++ b/runtime-analysis/INVENTORY.json @@ -0,0 +1,140 @@ +{ + "inventory_version": "1.0.0", + "last_updated": "2026-07-10", + "components": { + "MiniMaxConnector": { + "type": "connector", + "description": "MiniMax API와의 HTTP/WebSocket 연결 관리", + "dependencies": ["ConnectionPool", "RetryHandler"], + "observation_points": ["request.start", "request.duration"] + }, + "ConnectionPool": { + "type": "pool", + "description": "연결 풀링 및 리소스 관리", + "dependencies": [], + "observation_points": ["connection.acquired", "connection.wait_time", "connection.released"] + }, + "HealthChecker": { + "type": "monitor", + "description": "연결 상태 모니터링 및 헬스 체크", + "dependencies": ["MetricsCollector"], + "observation_points": ["health.status"] + }, + "ContractEmitter": { + "type": "validator", + "description": "출력 계약 검증 및 에미터", + "dependencies": [], + "observation_points": ["contract.validation"] + }, + "RetryHandler": { + "type": "handler", + "description": "재시도 정책 및 지연 관리", + "dependencies": [], + "observation_points": ["retry.attempt", "retry.success", "retry.exhausted"] + }, + "CircuitBreaker": { + "type": "protection", + "description": "서킷 브레이커 상태 관리", + "dependencies": ["MiniMaxConnector"], + "observation_points": ["circuit.state", "circuit.transitions", "circuit.rejected"] + } + }, + "metrics": [ + { + "name": "request.start", + "type": "Counter", + "labels": ["endpoint", "method"], + "description": "API 요청 시작 카운터" + }, + { + "name": "request.duration", + "type": "Histogram", + "labels": ["endpoint", "status"], + "description": "API 요청 소요 시간" + }, + { + "name": "connection.acquired", + "type": "Gauge", + "labels": ["pool_name"], + "description": "현재 획득된 연결 수" + }, + { + "name": "connection.wait_time", + "type": "Histogram", + "labels": ["pool_name"], + "description": "연결 대기 시간" + }, + { + "name": "connection.released", + "type": "Gauge", + "labels": ["pool_name"], + "description": "반환된 연결 수" + }, + { + "name": "retry.attempt", + "type": "Counter", + "labels": ["endpoint", "error_type"], + "description": "재시도 발생 횟수" + }, + { + "name": "retry.success", + "type": "Counter", + "labels": ["endpoint"], + "description": "재시도 후 성공 횟수" + }, + { + "name": "retry.exhausted", + "type": "Counter", + "labels": ["endpoint"], + "description": "재시도 횟수 소진 횟수" + }, + { + "name": "contract.validation", + "type": "Counter", + "labels": ["schema_version", "result"], + "description": "계약 검증 결과 카운터" + }, + { + "name": "circuit.state", + "type": "Gauge", + "labels": ["endpoint"], + "description": "서킷 브레이커 상태 (0=CLOSED, 1=OPEN, 2=HALF_OPEN)" + }, + { + "name": "circuit.transitions", + "type": "Counter", + "labels": ["from_state", "to_state"], + "description": "서킷 브레이커 상태 전이 횟수" + }, + { + "name": "circuit.rejected", + "type": "Counter", + "labels": ["endpoint"], + "description": "차단된 요청 수" + }, + { + "name": "health.status", + "type": "Gauge", + "labels": ["component"], + "description": "컴포넌트 헬스 상태" + } + ], + "observation_points": { + "Tracer": { + "description": "분산 추적 수집기", + "spans": ["request.start", "connection.acquired", "contract.validation"] + }, + "MetricsCollector": { + "description": "메트릭 수집 및 집계", + "metrics": ["request.*", "connection.*", "retry.*", "contract.*", "circuit.*", "health.*"] + }, + "LogEmitter": { + "description": "로그 출력", + "events": ["request.start", "retry.attempt", "contract.validation"] + }, + "AlertManager": { + "description": "알림 및 경고 관리", + "triggers": ["circuit.state", "retry.exhausted", "health.status"] + } + } +}