feat(debug): add fetch requests-in-flight tracker with age percentiles
Adds a 'Requests' tab to the debug panel (Ctrl/Cmd+Shift+D) that wraps window.fetch while the panel is open to track every request as in-flight from call to promise settle, sampled once per second over a 5-minute rolling window. Charts: - in-flight request count over time (current + peak) - p50/p90/p99/max age distribution of currently in-flight requests, with the legend below the chart and a y-axis max label for scale Tracking is fully gated behind the panel: closing it stops the sampling interval, unwraps window.fetch, and drops all state (zero overhead when not debugging). i18n keys added to all 9 locales.
This commit is contained in:
@@ -2537,6 +2537,7 @@ export const dict = {
|
||||
'memoryDebugPanel.title': 'Debug Panel',
|
||||
'memoryDebugPanel.tabs.memory': 'Memory',
|
||||
'memoryDebugPanel.tabs.streaming': 'Streaming',
|
||||
'memoryDebugPanel.tabs.requests': 'Requests',
|
||||
'memoryDebugPanel.section.sessionsInMemory': 'Sessions in Memory',
|
||||
'memoryDebugPanel.section.uiStreamingMetrics': 'UI Streaming Metrics',
|
||||
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code Bridge Metrics',
|
||||
@@ -2574,6 +2575,16 @@ export const dict = {
|
||||
'memoryDebugPanel.streaming.copy.copied': 'Streaming debug JSON copied',
|
||||
'memoryDebugPanel.streaming.copy.failed': 'Failed to copy JSON',
|
||||
'memoryDebugPanel.streaming.copy.hint': 'Copy exports both UI and VS Code streaming metrics as JSON',
|
||||
'memoryDebugPanel.requests.inFlight': 'In flight',
|
||||
'memoryDebugPanel.requests.peak': 'Peak',
|
||||
'memoryDebugPanel.requests.duration': 'Duration',
|
||||
'memoryDebugPanel.requests.totalRequests': 'Total Requests',
|
||||
'memoryDebugPanel.requests.tracking': 'Tracking',
|
||||
'memoryDebugPanel.requests.now': 'now',
|
||||
'memoryDebugPanel.requests.noSamples': 'No requests tracked yet. Keep this panel open to record fetch activity.',
|
||||
'memoryDebugPanel.requests.chartLabel': 'Fetch requests in flight over time, peak {peak}',
|
||||
'memoryDebugPanel.requests.windowHint': 'last {seconds}s',
|
||||
'memoryDebugPanel.requests.percentileChartLabel': 'In-flight request age percentiles (p50, p90, p99, max) over time',
|
||||
'memoryDebugPanel.common.idle': 'idle',
|
||||
'memoryDebugPanel.common.live': 'live',
|
||||
'memoryDebugPanel.common.notAvailable': 'n/a',
|
||||
|
||||
@@ -2503,6 +2503,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"memoryDebugPanel.title": "Panel de depuración",
|
||||
"memoryDebugPanel.tabs.memory": "Memoria",
|
||||
"memoryDebugPanel.tabs.streaming": "Transmisión",
|
||||
"memoryDebugPanel.tabs.requests": "Solicitudes",
|
||||
"memoryDebugPanel.section.sessionsInMemory": "Sesiones en memoria",
|
||||
"memoryDebugPanel.section.uiStreamingMetrics": "Métricas de streaming de UI",
|
||||
"memoryDebugPanel.section.vscodeBridgeMetrics": "Métricas del puente de VS Code",
|
||||
@@ -2540,6 +2541,16 @@ export const dict: Record<I18nKey, string> = {
|
||||
"memoryDebugPanel.streaming.copy.copied": "JSON de depuración en streaming copiado",
|
||||
"memoryDebugPanel.streaming.copy.failed": "No se pudo copiar JSON",
|
||||
"memoryDebugPanel.streaming.copy.hint": "Copia exportaciones de métricas de UI como de métricas de VS Code en formato JSON",
|
||||
"memoryDebugPanel.requests.inFlight": "En curso",
|
||||
"memoryDebugPanel.requests.peak": "Pico",
|
||||
"memoryDebugPanel.requests.duration": "Duración",
|
||||
"memoryDebugPanel.requests.totalRequests": "Solicitudes totales",
|
||||
"memoryDebugPanel.requests.tracking": "Seguimiento",
|
||||
"memoryDebugPanel.requests.now": "ahora",
|
||||
"memoryDebugPanel.requests.noSamples": "Aún no se han registrado solicitudes. Mantén este panel abierto para registrar la actividad de fetch.",
|
||||
"memoryDebugPanel.requests.chartLabel": "Solicitudes fetch en curso a lo largo del tiempo, pico {peak}",
|
||||
"memoryDebugPanel.requests.windowHint": "últimos {seconds}s",
|
||||
"memoryDebugPanel.requests.percentileChartLabel": "Percentiles de antigüedad de solicitudes en curso (p50, p90, p99, máx) a lo largo del tiempo",
|
||||
"memoryDebugPanel.common.idle": "inactivo",
|
||||
"memoryDebugPanel.common.live": "en vivo",
|
||||
"memoryDebugPanel.common.notAvailable": "n/a",
|
||||
|
||||
@@ -2346,6 +2346,7 @@ export const dict = {
|
||||
'memoryDebugPanel.title': 'Panneau de débogage',
|
||||
'memoryDebugPanel.tabs.memory': 'Mémoire',
|
||||
'memoryDebugPanel.tabs.streaming': 'Streaming',
|
||||
'memoryDebugPanel.tabs.requests': 'Requêtes',
|
||||
'memoryDebugPanel.section.sessionsInMemory': 'Sessions en mémoire',
|
||||
'memoryDebugPanel.section.uiStreamingMetrics': 'Métriques de streaming de l\'interface utilisateur',
|
||||
'memoryDebugPanel.section.vscodeBridgeMetrics': 'Métriques du pont VS Code',
|
||||
@@ -2383,6 +2384,16 @@ export const dict = {
|
||||
'memoryDebugPanel.streaming.copy.copied': 'Débogage en streaming JSON copié',
|
||||
'memoryDebugPanel.streaming.copy.failed': 'Échec de la copie de JSON',
|
||||
'memoryDebugPanel.streaming.copy.hint': 'La copie exporte les métriques de streaming de l\'interface utilisateur et de VS Code en tant que JSON.',
|
||||
'memoryDebugPanel.requests.inFlight': 'En cours',
|
||||
'memoryDebugPanel.requests.peak': 'Pic',
|
||||
'memoryDebugPanel.requests.duration': 'Durée',
|
||||
'memoryDebugPanel.requests.totalRequests': 'Requêtes totales',
|
||||
'memoryDebugPanel.requests.tracking': 'Suivi',
|
||||
'memoryDebugPanel.requests.now': 'maintenant',
|
||||
'memoryDebugPanel.requests.noSamples': 'Aucune requête enregistrée. Gardez ce panneau ouvert pour enregistrer l\'activité fetch.',
|
||||
'memoryDebugPanel.requests.chartLabel': 'Requêtes fetch en cours dans le temps, pic {peak}',
|
||||
'memoryDebugPanel.requests.windowHint': '{seconds}s dernières',
|
||||
'memoryDebugPanel.requests.percentileChartLabel': 'Percentiles d\'âge des requêtes en cours (p50, p90, p99, max) dans le temps',
|
||||
'memoryDebugPanel.common.idle': 'inactif',
|
||||
'memoryDebugPanel.common.live': 'en direct',
|
||||
'memoryDebugPanel.common.notAvailable': 'n / A',
|
||||
|
||||
@@ -2537,6 +2537,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'memoryDebugPanel.title': '디버그 패널',
|
||||
'memoryDebugPanel.tabs.memory': '메모리',
|
||||
'memoryDebugPanel.tabs.streaming': '스트리밍',
|
||||
'memoryDebugPanel.tabs.requests': '요청',
|
||||
'memoryDebugPanel.section.sessionsInMemory': '메모리 내 세션',
|
||||
'memoryDebugPanel.section.uiStreamingMetrics': 'UI 스트리밍 지표',
|
||||
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code 브리지 지표',
|
||||
@@ -2574,6 +2575,16 @@ export const dict: Record<I18nKey, string> = {
|
||||
'memoryDebugPanel.streaming.copy.copied': '스트리밍 디버그 JSON 복사 완료',
|
||||
'memoryDebugPanel.streaming.copy.failed': 'JSON 복사 실패',
|
||||
'memoryDebugPanel.streaming.copy.hint': 'UI와 VS Code 스트리밍 메트릭을 JSON으로 복사합니다',
|
||||
'memoryDebugPanel.requests.inFlight': '진행 중',
|
||||
'memoryDebugPanel.requests.peak': '최대',
|
||||
'memoryDebugPanel.requests.duration': '지속 시간',
|
||||
'memoryDebugPanel.requests.totalRequests': '전체 요청',
|
||||
'memoryDebugPanel.requests.tracking': '추적 중',
|
||||
'memoryDebugPanel.requests.now': '현재',
|
||||
'memoryDebugPanel.requests.noSamples': '아직 기록된 요청이 없습니다. fetch 활동을 기록하려면 이 패널을 열어 두세요.',
|
||||
'memoryDebugPanel.requests.chartLabel': '시간에 따른 진행 중인 fetch 요청, 최대 {peak}',
|
||||
'memoryDebugPanel.requests.windowHint': '최근 {seconds}초',
|
||||
'memoryDebugPanel.requests.percentileChartLabel': '진행 중 요청 수명 백분위수(p50, p90, p99, max)의 시간별 변화',
|
||||
'memoryDebugPanel.common.idle': '유휴',
|
||||
'memoryDebugPanel.common.live': '실시간',
|
||||
'memoryDebugPanel.common.notAvailable': 'n/a',
|
||||
|
||||
@@ -2135,8 +2135,19 @@ export const dict: Record<I18nKey, string> = {
|
||||
'memoryDebugPanel.streaming.copy.copied': 'Skopiowano JSON debugowania streamingu',
|
||||
'memoryDebugPanel.streaming.copy.failed': 'Nie udało się skopiować JSON',
|
||||
'memoryDebugPanel.streaming.copy.hint': 'Kopiowanie eksportuje metryki streamingu zarówno UI, jak i VS Code w formacie JSON',
|
||||
'memoryDebugPanel.requests.inFlight': 'W trakcie',
|
||||
'memoryDebugPanel.requests.peak': 'Szczyt',
|
||||
'memoryDebugPanel.requests.duration': 'Czas trwania',
|
||||
'memoryDebugPanel.requests.totalRequests': 'Łączne żądania',
|
||||
'memoryDebugPanel.requests.tracking': 'Śledzenie',
|
||||
'memoryDebugPanel.requests.now': 'teraz',
|
||||
'memoryDebugPanel.requests.noSamples': 'Brak żądań. Utrzymuj ten panel otwarty, aby rejestrować aktywność fetch.',
|
||||
'memoryDebugPanel.requests.chartLabel': 'Żądania fetch w trakcie w czasie, szczyt {peak}',
|
||||
'memoryDebugPanel.requests.windowHint': 'ostatnie {seconds}s',
|
||||
'memoryDebugPanel.requests.percentileChartLabel': 'Percentyle wieku żądań w trakcie (p50, p90, p99, max) w czasie',
|
||||
'memoryDebugPanel.tabs.memory': 'Pamięć',
|
||||
'memoryDebugPanel.tabs.streaming': 'Streaming',
|
||||
'memoryDebugPanel.tabs.requests': 'Żądania',
|
||||
'memoryDebugPanel.title': 'Panel debugowania',
|
||||
'memoryDebugPanel.tooltip.logCurrentState': 'Zaloguj bieżący stan pamięci do konsoli przeglądarki',
|
||||
'openChamberLogo.aria.logo': 'Logo OpenChamber',
|
||||
|
||||
@@ -2503,6 +2503,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"memoryDebugPanel.title": "Painel de depuração",
|
||||
"memoryDebugPanel.tabs.memory": "Memória",
|
||||
"memoryDebugPanel.tabs.streaming": "Transmissão",
|
||||
"memoryDebugPanel.tabs.requests": "Solicitações",
|
||||
"memoryDebugPanel.section.sessionsInMemory": "Sessões em memória",
|
||||
"memoryDebugPanel.section.uiStreamingMetrics": "Métricas de streaming de UI",
|
||||
"memoryDebugPanel.section.vscodeBridgeMetrics": "Métricas da ponte do VS Code",
|
||||
@@ -2540,6 +2541,16 @@ export const dict: Record<I18nKey, string> = {
|
||||
"memoryDebugPanel.streaming.copy.copied": "JSON de depuração em streaming copiado",
|
||||
"memoryDebugPanel.streaming.copy.failed": "Não foi possível copiar JSON",
|
||||
"memoryDebugPanel.streaming.copy.hint": "Copia exportações de métricas da UI e do VS Code em formato JSON",
|
||||
"memoryDebugPanel.requests.inFlight": "Em curso",
|
||||
"memoryDebugPanel.requests.peak": "Pico",
|
||||
"memoryDebugPanel.requests.duration": "Duração",
|
||||
"memoryDebugPanel.requests.totalRequests": "Solicitações totais",
|
||||
"memoryDebugPanel.requests.tracking": "Rastreamento",
|
||||
"memoryDebugPanel.requests.now": "agora",
|
||||
"memoryDebugPanel.requests.noSamples": "Nenhuma solicitação registrada. Mantenha este painel aberto para registrar a atividade de fetch.",
|
||||
"memoryDebugPanel.requests.chartLabel": "Solicitações fetch em curso ao longo do tempo, pico {peak}",
|
||||
"memoryDebugPanel.requests.windowHint": "últimos {seconds}s",
|
||||
"memoryDebugPanel.requests.percentileChartLabel": "Percentis de idade das solicitações em curso (p50, p90, p99, máx) ao longo do tempo",
|
||||
"memoryDebugPanel.common.idle": "inativo",
|
||||
"memoryDebugPanel.common.live": "ao vivo",
|
||||
"memoryDebugPanel.common.notAvailable": "n/a",
|
||||
|
||||
@@ -2503,6 +2503,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"memoryDebugPanel.title": "Панель налагодження",
|
||||
"memoryDebugPanel.tabs.memory": "Пам'ять",
|
||||
"memoryDebugPanel.tabs.streaming": "Потокове передавання",
|
||||
"memoryDebugPanel.tabs.requests": "Запити",
|
||||
"memoryDebugPanel.section.sessionsInMemory": "Сесії в пам'яті",
|
||||
"memoryDebugPanel.section.uiStreamingMetrics": "Потокові показники інтерфейсу користувача",
|
||||
"memoryDebugPanel.section.vscodeBridgeMetrics": "Метрики мосту VS Code",
|
||||
@@ -2540,6 +2541,16 @@ export const dict: Record<I18nKey, string> = {
|
||||
"memoryDebugPanel.streaming.copy.copied": "Потокове налагодження JSON скопійовано",
|
||||
"memoryDebugPanel.streaming.copy.failed": "Не вдалося скопіювати JSON",
|
||||
"memoryDebugPanel.streaming.copy.hint": "Копіювання експортує метрики потокового інтерфейсу користувача та VS Code як JSON",
|
||||
"memoryDebugPanel.requests.inFlight": "Виконуються",
|
||||
"memoryDebugPanel.requests.peak": "Пік",
|
||||
"memoryDebugPanel.requests.duration": "Тривалість",
|
||||
"memoryDebugPanel.requests.totalRequests": "Усього запитів",
|
||||
"memoryDebugPanel.requests.tracking": "Відстеження",
|
||||
"memoryDebugPanel.requests.now": "зараз",
|
||||
"memoryDebugPanel.requests.noSamples": "Запитів ще немає. Тримайте цю панель відкритою, щоб фіксувати активність fetch.",
|
||||
"memoryDebugPanel.requests.chartLabel": "Запити fetch у виконанні з часом, пік {peak}",
|
||||
"memoryDebugPanel.requests.windowHint": "останні {seconds}s",
|
||||
"memoryDebugPanel.requests.percentileChartLabel": "Перцентилі віку запитів у виконанні (p50, p90, p99, max) з часом",
|
||||
"memoryDebugPanel.common.idle": "очікування",
|
||||
"memoryDebugPanel.common.live": "live",
|
||||
"memoryDebugPanel.common.notAvailable": "n/a",
|
||||
|
||||
@@ -2503,6 +2503,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'memoryDebugPanel.title': '调试面板',
|
||||
'memoryDebugPanel.tabs.memory': '内存',
|
||||
'memoryDebugPanel.tabs.streaming': '流式',
|
||||
'memoryDebugPanel.tabs.requests': '请求',
|
||||
'memoryDebugPanel.section.sessionsInMemory': '内存中的会话',
|
||||
'memoryDebugPanel.section.uiStreamingMetrics': 'UI 流式指标',
|
||||
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code 桥接指标',
|
||||
@@ -2540,6 +2541,16 @@ export const dict: Record<I18nKey, string> = {
|
||||
'memoryDebugPanel.streaming.copy.copied': '流式调试 JSON 已复制',
|
||||
'memoryDebugPanel.streaming.copy.failed': '复制 JSON 失败',
|
||||
'memoryDebugPanel.streaming.copy.hint': '复制会导出 UI 与 VS Code 的流式指标 JSON',
|
||||
'memoryDebugPanel.requests.inFlight': '进行中',
|
||||
'memoryDebugPanel.requests.peak': '峰值',
|
||||
'memoryDebugPanel.requests.duration': '时长',
|
||||
'memoryDebugPanel.requests.totalRequests': '请求总数',
|
||||
'memoryDebugPanel.requests.tracking': '跟踪',
|
||||
'memoryDebugPanel.requests.now': '当前',
|
||||
'memoryDebugPanel.requests.noSamples': '尚未记录请求。保持此面板打开以记录 fetch 活动。',
|
||||
'memoryDebugPanel.requests.chartLabel': '随时间变化的进行中 fetch 请求,峰值 {peak}',
|
||||
'memoryDebugPanel.requests.windowHint': '最近 {seconds}秒',
|
||||
'memoryDebugPanel.requests.percentileChartLabel': '进行中请求年龄百分位(p50、p90、p99、最大值)随时间的变化',
|
||||
'memoryDebugPanel.common.idle': '空闲',
|
||||
'memoryDebugPanel.common.live': '实时',
|
||||
'memoryDebugPanel.common.notAvailable': '无',
|
||||
|
||||
@@ -2500,6 +2500,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'memoryDebugPanel.title': '偵錯面板',
|
||||
'memoryDebugPanel.tabs.memory': '記憶體',
|
||||
'memoryDebugPanel.tabs.streaming': '串流',
|
||||
'memoryDebugPanel.tabs.requests': '請求',
|
||||
'memoryDebugPanel.section.sessionsInMemory': '記憶體中的會話',
|
||||
'memoryDebugPanel.section.uiStreamingMetrics': 'UI 串流指標',
|
||||
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code 橋接指標',
|
||||
@@ -2537,6 +2538,16 @@ export const dict: Record<I18nKey, string> = {
|
||||
'memoryDebugPanel.streaming.copy.copied': '串流偵錯 JSON 已複製',
|
||||
'memoryDebugPanel.streaming.copy.failed': '複製 JSON 失敗',
|
||||
'memoryDebugPanel.streaming.copy.hint': '複製會匯出 UI 與 VS Code 的串流指標 JSON',
|
||||
'memoryDebugPanel.requests.inFlight': '進行中',
|
||||
'memoryDebugPanel.requests.peak': '峰值',
|
||||
'memoryDebugPanel.requests.duration': '時長',
|
||||
'memoryDebugPanel.requests.totalRequests': '請求總數',
|
||||
'memoryDebugPanel.requests.tracking': '追蹤',
|
||||
'memoryDebugPanel.requests.now': '目前',
|
||||
'memoryDebugPanel.requests.noSamples': '尚未記錄請求。保持此面板開啟以記錄 fetch 活動。',
|
||||
'memoryDebugPanel.requests.chartLabel': '隨時間變化的進行中 fetch 請求,峰值 {peak}',
|
||||
'memoryDebugPanel.requests.windowHint': '最近 {seconds}秒',
|
||||
'memoryDebugPanel.requests.percentileChartLabel': '進行中請求年齡百分位(p50、p90、p99、最大值)隨時間的變化',
|
||||
'memoryDebugPanel.common.idle': '閒置',
|
||||
'memoryDebugPanel.common.live': '即時',
|
||||
'memoryDebugPanel.common.notAvailable': '無',
|
||||
|
||||
Reference in New Issue
Block a user