import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import type { RequestLog } from '../../types/monitoring'; import { getLogDetail } from '../../services/monitoringService'; const METHOD_COLOR: Record = { GET: 'bg-green-100 text-green-800', POST: 'bg-blue-100 text-blue-800', PUT: 'bg-orange-100 text-orange-800', DELETE: 'bg-red-100 text-red-800', }; const STATUS_BADGE: Record = { SUCCESS: 'bg-green-100 text-green-800', DENIED: 'bg-red-100 text-red-800', EXPIRED: 'bg-orange-100 text-orange-800', INVALID_KEY: 'bg-red-100 text-red-800', FAILED: 'bg-gray-100 text-gray-800', }; const formatDateTime = (dateStr: string): string => { const d = new Date(dateStr); const year = d.getFullYear(); const month = String(d.getMonth() + 1).padStart(2, '0'); const day = String(d.getDate()).padStart(2, '0'); const hours = String(d.getHours()).padStart(2, '0'); const minutes = String(d.getMinutes()).padStart(2, '0'); const seconds = String(d.getSeconds()).padStart(2, '0'); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; }; const formatJson = (str: string | null): string | null => { if (!str) return null; try { return JSON.stringify(JSON.parse(str), null, 2); } catch { return str; } }; const RequestLogDetailPage = () => { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const [log, setLog] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { if (!id) return; const fetchDetail = async () => { setLoading(true); setError(null); try { const res = await getLogDetail(Number(id)); if (res.success && res.data) { setLog(res.data); } else { setError(res.message || '로그 상세 조회에 실패했습니다.'); } } catch { setError('로그 상세 조회에 실패했습니다.'); } finally { setLoading(false); } }; fetchDetail(); }, [id]); if (loading) { return
로딩 중...
; } if (error) { return (
{error}
); } if (!log) return null; const formattedHeaders = formatJson(log.requestHeaders); const formattedParams = formatJson(log.requestParams); return (
{/* 기본 정보 */}

기본 정보

요청 시간 {formatDateTime(log.requestedAt)}
요청 {log.requestMethod} {log.requestUrl}
응답 코드 {log.responseStatus != null ? log.responseStatus : '-'}
응답시간(ms) {log.responseTime != null ? log.responseTime : '-'}
응답크기(bytes) {log.responseSize != null ? log.responseSize : '-'}
상태 {log.requestStatus}
서비스 {log.serviceName || '-'}
API Key {log.apiKeyPrefix || '-'}
사용자 {log.userName || '-'}
IP {log.requestIp}
{/* 요청 정보 */} {(formattedHeaders || formattedParams) && (

요청 정보

{formattedHeaders && (
Request Headers
                {formattedHeaders}
              
)} {formattedParams && (
Request Params
                {formattedParams}
              
)}
)} {/* 에러 정보 */} {log.errorMessage && (

에러 정보

{log.errorMessage}

)}
); }; export default RequestLogDetailPage;