signal-batch/frontend/src/i18n/en.ts
htlee 7852f840e4 feat: 쿼리 메트릭 수집 확장 + 대시보드 성능 차트 추가
- client IP 수집 (REST: X-Forwarded-For 체인, WS: 세션 속성)
- 응답 크기 추정 (uniqueVessels*200 + points*40)
- timeseries API (/api/monitoring/query-metrics/timeseries)
- Dashboard 쿼리 성능 차트 5종 (응답시간, 볼륨, 캐시경로, 응답크기, Top 클라이언트)
2026-03-10 11:15:00 +09:00

211 lines
7.0 KiB
TypeScript

const en = {
// Navigation
'nav.dashboard': 'Dashboard',
'nav.jobs': 'Job Monitor',
'nav.pipeline': 'Pipeline',
'nav.apiExplorer': 'API Explorer',
'nav.abnormal': 'Abnormal',
'nav.areaStats': 'Area Stats',
'nav.metrics': 'Metrics',
// Common
'common.loading': 'Loading...',
'common.noData': 'No data available',
'common.close': 'Close',
'common.prev': 'Prev',
'common.next': 'Next',
'common.items': '',
'common.of': 'of',
'common.day': 'd',
'common.min': 'min',
'common.sec': 'sec',
'common.themeToggle': 'Toggle theme',
'common.langToggle': 'Switch language',
// Dashboard
'dashboard.title': 'Dashboard',
'dashboard.totalExec': 'Total Executions',
'dashboard.successRate': 'Success Rate',
'dashboard.avgDuration': 'Avg Duration',
'dashboard.totalProcessed': 'Total Processed',
'dashboard.periodBasis': 'd basis',
'dashboard.avgPerJob': '/job avg',
'dashboard.runningJobs': 'Running Jobs',
'dashboard.noRunningJobs': 'No running jobs',
'dashboard.delay': 'Processing Delay',
'dashboard.delayMin': 'min delay',
'dashboard.aisLatest': 'AIS Latest',
'dashboard.processLatest': 'Process Latest',
'dashboard.aisReceived': 'AIS Received',
'dashboard.vesselsProcessed': 'Vessels Processed',
'dashboard.systemMetrics': 'System Metrics',
'dashboard.memory': 'Memory',
'dashboard.threads': 'Threads',
'dashboard.dbConn': 'DB Connections',
'dashboard.recordsSec': 'Records/sec',
'dashboard.cacheStatus': 'Cache Status',
'dashboard.hitRate': 'Hit Rate',
'dashboard.size': 'Size',
'dashboard.hits': 'Hits',
'dashboard.misses': 'Misses',
'dashboard.dailyVolume': 'Daily Processing Volume',
'dashboard.queryPerformance': 'Query Performance',
'dashboard.responseTimeTrend': 'Response Time Trend',
'dashboard.queryVolume': 'Query Volume',
'dashboard.cachePathRatio': 'Cache Path Ratio',
'dashboard.responseSizeTrend': 'Response Size Trend',
'dashboard.topClients': 'Top Clients',
'dashboard.avgElapsed': 'Avg',
'dashboard.maxElapsed': 'Max',
'dashboard.queries': 'queries',
'dashboard.noChartData': 'No chart data available',
// Job Monitor
'jobs.title': 'Job Monitor',
'jobs.all': 'All',
'jobs.track5min': 'Track (5min)',
'jobs.hourly': 'Hourly',
'jobs.daily': 'Daily',
'jobs.status': 'Status',
'jobs.job': 'Job',
'jobs.id': 'ID',
'jobs.start': 'Start',
'jobs.duration': 'Duration',
'jobs.read': 'Read',
'jobs.write': 'Write',
'jobs.skip': 'Skip',
'jobs.stepDetails': 'Step Details',
'jobs.step': 'Step',
'jobs.commits': 'Commits',
'jobs.errors': 'Errors',
// Pipeline
'pipeline.title': 'Data Pipeline',
'pipeline.flowTitle': 'Processing Flow',
'pipeline.collect1min': '1min Collect',
'pipeline.aggregate5min': '5min Aggregate',
'pipeline.mergeHourly': 'Hourly Merge',
'pipeline.mergeDaily': 'Daily Merge',
'pipeline.executions': ' executions',
'pipeline.totalTime': 'total time',
'pipeline.processingDelay': 'Processing Delay',
'pipeline.delayMin': 'min delay',
'pipeline.aisLatest': 'AIS Latest',
'pipeline.processLatest': 'Process Latest',
'pipeline.cacheOverview': 'Cache Overview',
'pipeline.cachedDays': ' days cached',
'pipeline.totalHitRate': 'Total Hit Rate',
'pipeline.writeByJob': 'Write Count by Job',
'pipeline.durationByJob': 'Avg Duration by Job',
'pipeline.recentJobs': 'Recent Executions',
'pipeline.totalExec': 'Total Executions',
'pipeline.totalRecords': 'Total Records',
'pipeline.avgDuration': 'Avg Duration',
'pipeline.successRate': 'success rate',
// Area Stats
'area.title': 'Area Statistics',
'area.activeHaegu': 'Active Areas',
'area.activeHaeguDesc': 'Areas with vessels',
'area.totalVessels': 'Total Vessels',
'area.dataQuality': 'Data Quality',
'area.avgDensity': 'Avg Density',
'area.haeguStats': 'Area Status',
'area.haeguNo': 'Area No.',
'area.haeguName': 'Area Name',
'area.currentVessels': 'Vessels',
'area.avgSpeed': 'Avg Speed',
'area.avgDensityCol': 'Avg Density',
'area.lastUpdate': 'Last Update',
'area.throughput': 'Throughput',
'area.vesselsPerMin': 'vessels/min',
'area.vesselsPerHour': 'vessels/hour',
'area.tableSizes': 'Table Sizes',
'area.dataQualityTitle': 'Data Quality Check',
'area.duplicates': 'Duplicate Tracks',
'area.stalePositions': 'Stale Positions',
'area.checkedAt': 'Checked at',
'area.haeguMap': 'Vessel Distribution by Area',
'area.mapLegend': 'Vessels',
'area.vessels': ' vessels',
// API Explorer
'explorer.title': 'API Explorer',
'explorer.apiType': 'API Type',
'explorer.recentPositions': 'Recent Positions',
'explorer.vesselTracks': 'Vessel Tracks',
'explorer.viewportReplay': 'Viewport Replay',
'explorer.areaSearch': 'Area Track Analysis',
'explorer.stsAnalysis': 'STS Contact Analysis',
'explorer.parameters': 'Parameters',
'explorer.positionsDesc': 'Fetches vessels with position updates within 10 minutes.',
'explorer.vesselDesc': 'Fetches tracks for specific vessels by MMSI list.',
// Abnormal Tracks
'abnormal.title': 'Abnormal Tracks',
'abnormal.totalDetected': 'Total Detected',
'abnormal.last7days': 'Last 7 days',
'abnormal.affectedVessels': 'Affected Vessels',
'abnormal.typeCount': 'Type Count',
'abnormal.maxSpeed': 'Max Speed',
'abnormal.byType': 'By Type',
'abnormal.allTypes': 'All',
'abnormal.vessels': ' vessels',
'abnormal.dailyTrend': 'Daily Trend',
'abnormal.recentList': 'Recent Detections',
'abnormal.type': 'Type',
'abnormal.time': 'Time',
'abnormal.distance': 'Distance',
'abnormal.avgSpeedCol': 'Avg Speed',
'abnormal.maxSpeedCol': 'Max Speed',
'abnormal.points': 'Points',
// Metrics
'metrics.title': 'System Metrics',
'metrics.heapMemory': 'Heap Memory',
'metrics.threads': 'Threads',
'metrics.dbActive': 'DB Active Conn.',
'metrics.recordsPerSec': 'Records/sec',
'metrics.cacheDetail': 'Cache Details',
'metrics.cacheLayer': 'Cache Layer',
'metrics.size': 'Size',
'metrics.maxSize': 'Max',
'metrics.utilization': 'Utilization',
'metrics.hitRate': 'Hit Rate',
'metrics.processingDelay': 'Processing Delay',
'metrics.delayMinutes': 'Delay',
'metrics.aisCount': 'AIS Received',
'metrics.processedVessels': 'Processed',
'metrics.status': 'Status',
'metrics.cacheHitSummary': 'Cache Hit Summary',
'metrics.hits': 'Hits',
'metrics.misses': 'Misses',
'metrics.queryHistory': 'Query History',
'metrics.totalQueries': 'Total Queries',
'metrics.avgElapsed': 'Avg Response',
'metrics.p95Elapsed': 'P95 Response',
'metrics.cacheHitRate': 'Cache Hit Rate',
'metrics.queryType': 'Type',
'metrics.dataPath': 'Path',
'metrics.queryStatus': 'Status',
'metrics.queryTime': 'Time',
'metrics.vessels': 'Vessels',
'metrics.pointsBefore': 'Points(Before)',
'metrics.pointsAfter': 'Points(After)',
'metrics.simplification': 'Reduction',
'metrics.chunks': 'Chunks',
'metrics.elapsed': 'Elapsed',
'metrics.allTypes': 'All',
'metrics.allPaths': 'All',
'metrics.resetFilters': 'Reset Filters',
// Time Range
'range.1d': '1D',
'range.3d': '3D',
'range.7d': '7D',
'range.14d': '14D',
'range.30d': '30D',
} as const
export default en