feat(dashboard): richer System History & Xray Metrics charts

- Collect disk read/write and network packet-rate metrics on the host sampler
- Sparkline: optional 2nd/3rd overlaid series with a colored legend
- System History: merge Bandwidth (up/down), Disk I/O (read/write) and Load (1m/5m/15m) into single multi-line tabs
- Add a descriptive per-chart title and mobile-only tab icons to both modals
- Localize every chart title and tab label across all 13 languages
This commit is contained in:
MHSanaei
2026-06-03 11:25:45 +02:00
parent a4dae566ce
commit 4b11c54206
21 changed files with 591 additions and 36 deletions
+1 -1
View File
@@ -137,7 +137,7 @@ var (
// status sample. Exposed for documentation/test purposes; the
// controller validates incoming names against an allow-list.
var SystemMetricKeys = []string{
"cpu", "mem", "netUp", "netDown", "online", "load1", "load5", "load15",
"cpu", "mem", "netUp", "netDown", "pktUp", "pktDown", "diskRead", "diskWrite", "online", "load1", "load5", "load15",
}
// NodeMetricKeys lists the per-node metric names NodeHeartbeatJob writes.
+55 -5
View File
@@ -67,6 +67,14 @@ type Status struct {
Current uint64 `json:"current"`
Total uint64 `json:"total"`
} `json:"disk"`
DiskIO struct {
Read uint64 `json:"read"`
Write uint64 `json:"write"`
} `json:"diskIO"`
DiskTraffic struct {
Read uint64 `json:"read"`
Write uint64 `json:"write"`
} `json:"diskTraffic"`
Xray struct {
State ProcessState `json:"state"`
ErrorMsg string `json:"errorMsg"`
@@ -78,12 +86,16 @@ type Status struct {
TcpCount int `json:"tcpCount"`
UdpCount int `json:"udpCount"`
NetIO struct {
Up uint64 `json:"up"`
Down uint64 `json:"down"`
Up uint64 `json:"up"`
Down uint64 `json:"down"`
PktUp uint64 `json:"pktUp"`
PktDown uint64 `json:"pktDown"`
} `json:"netIO"`
NetTraffic struct {
Sent uint64 `json:"sent"`
Recv uint64 `json:"recv"`
Sent uint64 `json:"sent"`
Recv uint64 `json:"recv"`
PktSent uint64 `json:"pktSent"`
PktRecv uint64 `json:"pktRecv"`
} `json:"netTraffic"`
PublicIP struct {
IPv4 string `json:"ipv4"`
@@ -383,6 +395,30 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status {
status.Disk.Total = diskInfo.Total
}
diskIOStats, err := disk.IOCounters()
if err != nil {
logger.Warning("get disk io counters failed:", err)
} else {
var totalRead, totalWrite uint64
for _, counter := range diskIOStats {
totalRead += counter.ReadBytes
totalWrite += counter.WriteBytes
}
status.DiskTraffic.Read = totalRead
status.DiskTraffic.Write = totalWrite
if lastStatus != nil {
duration := now.Sub(lastStatus.T)
seconds := float64(duration) / float64(time.Second)
if seconds > 0 && status.DiskTraffic.Read >= lastStatus.DiskTraffic.Read {
status.DiskIO.Read = uint64(float64(status.DiskTraffic.Read-lastStatus.DiskTraffic.Read) / seconds)
}
if seconds > 0 && status.DiskTraffic.Write >= lastStatus.DiskTraffic.Write {
status.DiskIO.Write = uint64(float64(status.DiskTraffic.Write-lastStatus.DiskTraffic.Write) / seconds)
}
}
}
// Load averages
avgState, err := load.Avg()
if err != nil {
@@ -396,7 +432,7 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status {
if err != nil {
logger.Warning("get io counters failed:", err)
} else {
var totalSent, totalRecv uint64
var totalSent, totalRecv, totalPktSent, totalPktRecv uint64
for _, iface := range ioStats {
name := strings.ToLower(iface.Name)
if isVirtualInterface(name) {
@@ -404,9 +440,13 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status {
}
totalSent += iface.BytesSent
totalRecv += iface.BytesRecv
totalPktSent += iface.PacketsSent
totalPktRecv += iface.PacketsRecv
}
status.NetTraffic.Sent = totalSent
status.NetTraffic.Recv = totalRecv
status.NetTraffic.PktSent = totalPktSent
status.NetTraffic.PktRecv = totalPktRecv
if lastStatus != nil {
duration := now.Sub(lastStatus.T)
@@ -415,6 +455,12 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status {
down := uint64(float64(status.NetTraffic.Recv-lastStatus.NetTraffic.Recv) / seconds)
status.NetIO.Up = up
status.NetIO.Down = down
if seconds > 0 && status.NetTraffic.PktSent >= lastStatus.NetTraffic.PktSent {
status.NetIO.PktUp = uint64(float64(status.NetTraffic.PktSent-lastStatus.NetTraffic.PktSent) / seconds)
}
if seconds > 0 && status.NetTraffic.PktRecv >= lastStatus.NetTraffic.PktRecv {
status.NetIO.PktDown = uint64(float64(status.NetTraffic.PktRecv-lastStatus.NetTraffic.PktRecv) / seconds)
}
}
}
@@ -521,6 +567,10 @@ func (s *ServerService) AppendStatusSample(t time.Time, status *Status) {
}
systemMetrics.append("netUp", t, float64(status.NetIO.Up))
systemMetrics.append("netDown", t, float64(status.NetIO.Down))
systemMetrics.append("diskRead", t, float64(status.DiskIO.Read))
systemMetrics.append("diskWrite", t, float64(status.DiskIO.Write))
systemMetrics.append("pktUp", t, float64(status.NetIO.PktUp))
systemMetrics.append("pktDown", t, float64(status.NetIO.PktDown))
online := 0
if p != nil && p.IsRunning() {
online = len(p.GetOnlineClients())
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "حصل خطأ أثناء تشغيل Xray",
"operationHours": "مدة التشغيل",
"systemHistoryTitle": "تاريخ النظام",
"historyTitleCpu": "استخدام المعالج",
"historyTitleMem": "استخدام الذاكرة",
"historyTitleNetwork": "عرض النطاق الترددي للشبكة",
"historyTitlePackets": "حزم الشبكة",
"historyTitleDisk": "إدخال/إخراج القرص",
"historyTitleOnline": "العملاء المتصلون",
"historyTitleLoad": "متوسط حمل النظام (1 / 5 / 15 دقيقة)",
"historyTabBandwidth": "عرض النطاق",
"historyTabPackets": "الحزم",
"historyTabDisk": "Disk I/O",
"historyTabOnline": "متصل",
"historyTabLoad": "الحِمل",
"charts": "الرسوم البيانية",
"xrayMetricsTitle": "مقاييس Xray",
"xrayTitleHeap": "ذاكرة الكومة المخصصة",
"xrayTitleSys": "الذاكرة المحجوزة من نظام التشغيل",
"xrayTitleObjects": "كائنات الكومة النشطة",
"xrayTitleGcCount": "دورات GC المكتملة",
"xrayTitleGcPause": "مدة توقف GC",
"xrayTitleObservatory": "صحة الاتصال الصادر",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "الكائنات",
"xrayTabGcCount": "عدد GC",
"xrayTabGcPause": "توقف GC",
"xrayTabObservatory": "المرصد",
"xrayMetricsDisabled": "نقطة نهاية مقاييس Xray غير مهيأة",
"xrayMetricsHint": "أضف كتلة metrics على المستوى الأعلى في إعدادات xray مع tag باسم metrics_out و listen على 127.0.0.1:11111، ثم أعد تشغيل xray.",
"xrayObservatoryEmpty": "لا توجد بيانات Observatory بعد",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "An error occurred while running Xray",
"operationHours": "Uptime",
"systemHistoryTitle": "System History",
"historyTitleCpu": "CPU Usage",
"historyTitleMem": "Memory Usage",
"historyTitleNetwork": "Network Bandwidth",
"historyTitlePackets": "Network Packets",
"historyTitleDisk": "Disk I/O",
"historyTitleOnline": "Online Clients",
"historyTitleLoad": "System Load Average (1m / 5m / 15m)",
"historyTabBandwidth": "Bandwidth",
"historyTabPackets": "Packets",
"historyTabDisk": "Disk I/O",
"historyTabOnline": "Online",
"historyTabLoad": "Load",
"charts": "Charts",
"xrayMetricsTitle": "Xray Metrics",
"xrayTitleHeap": "Allocated Heap Memory",
"xrayTitleSys": "Memory Reserved from OS",
"xrayTitleObjects": "Live Heap Objects",
"xrayTitleGcCount": "Completed GC Cycles",
"xrayTitleGcPause": "GC Pause Duration",
"xrayTitleObservatory": "Outbound Connection Health",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "Objects",
"xrayTabGcCount": "GC Count",
"xrayTabGcPause": "GC Pause",
"xrayTabObservatory": "Observatory",
"xrayMetricsDisabled": "Xray metrics endpoint not configured",
"xrayMetricsHint": "Add a top-level metrics block to the xray config with tag metrics_out and listen 127.0.0.1:11111, then restart xray.",
"xrayObservatoryEmpty": "No observatory data yet",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Se produjo un error al ejecutar Xray",
"operationHours": "Tiempo de Funcionamiento",
"systemHistoryTitle": "Historial del Sistema",
"historyTitleCpu": "Uso de CPU",
"historyTitleMem": "Uso de Memoria",
"historyTitleNetwork": "Ancho de Banda de Red",
"historyTitlePackets": "Paquetes de Red",
"historyTitleDisk": "E/S de Disco",
"historyTitleOnline": "Clientes en Línea",
"historyTitleLoad": "Carga Media del Sistema (1 / 5 / 15 min)",
"historyTabBandwidth": "Ancho de Banda",
"historyTabPackets": "Paquetes",
"historyTabDisk": "Disco I/O",
"historyTabOnline": "En línea",
"historyTabLoad": "Carga",
"charts": "Gráficos",
"xrayMetricsTitle": "Métricas de Xray",
"xrayTitleHeap": "Memoria Heap Asignada",
"xrayTitleSys": "Memoria Reservada del SO",
"xrayTitleObjects": "Objetos Heap Activos",
"xrayTitleGcCount": "Ciclos de GC Completados",
"xrayTitleGcPause": "Duración de Pausa de GC",
"xrayTitleObservatory": "Estado de Conexiones Salientes",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "Objetos",
"xrayTabGcCount": "Recuento GC",
"xrayTabGcPause": "Pausa GC",
"xrayTabObservatory": "Observatorio",
"xrayMetricsDisabled": "Endpoint de métricas de Xray no configurado",
"xrayMetricsHint": "Añade un bloque metrics de nivel superior a la configuración de xray con tag metrics_out y listen 127.0.0.1:11111, luego reinicia xray.",
"xrayObservatoryEmpty": "Aún no hay datos de Observatory",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "خطا در هنگام اجرای Xray رخ داد",
"operationHours": "مدت‌کارکرد",
"systemHistoryTitle": "تاریخچه سیستم",
"historyTitleCpu": "مصرف پردازنده",
"historyTitleMem": "مصرف حافظه",
"historyTitleNetwork": "پهنای باند شبکه",
"historyTitlePackets": "بسته‌های شبکه",
"historyTitleDisk": "ورودی/خروجی دیسک",
"historyTitleOnline": "کاربران آنلاین",
"historyTitleLoad": "میانگین بار سیستم (۱ / ۵ / ۱۵ دقیقه)",
"historyTabBandwidth": "پهنای باند",
"historyTabPackets": "بسته‌ها",
"historyTabDisk": "Disk I/O",
"historyTabOnline": "آنلاین",
"historyTabLoad": "بار",
"charts": "نمودارها",
"xrayMetricsTitle": "متریک‌های Xray",
"xrayTitleHeap": "حافظه‌ی Heap تخصیص‌یافته",
"xrayTitleSys": "حافظه‌ی رزروشده از سیستم‌عامل",
"xrayTitleObjects": "اشیای زنده‌ی Heap",
"xrayTitleGcCount": "چرخه‌های کامل‌شده‌ی GC",
"xrayTitleGcPause": "مدت مکث GC",
"xrayTitleObservatory": "سلامت اتصال خروجی",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "اشیا",
"xrayTabGcCount": "تعداد GC",
"xrayTabGcPause": "مکث GC",
"xrayTabObservatory": "رصدخانه",
"xrayMetricsDisabled": "نقطه پایانی متریک‌های Xray پیکربندی نشده",
"xrayMetricsHint": "یک بلاک metrics در سطح بالای پیکربندی xray با tag برابر metrics_out و listen برابر 127.0.0.1:11111 اضافه کنید، سپس xray را راه‌اندازی مجدد کنید.",
"xrayObservatoryEmpty": "هنوز داده‌ای از Observatory دریافت نشده",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Terjadi kesalahan saat menjalankan Xray",
"operationHours": "Waktu Aktif",
"systemHistoryTitle": "Riwayat Sistem",
"historyTitleCpu": "Penggunaan CPU",
"historyTitleMem": "Penggunaan Memori",
"historyTitleNetwork": "Bandwidth Jaringan",
"historyTitlePackets": "Paket Jaringan",
"historyTitleDisk": "I/O Disk",
"historyTitleOnline": "Klien Online",
"historyTitleLoad": "Rata-rata Beban Sistem (1 / 5 / 15 mnt)",
"historyTabBandwidth": "Bandwidth",
"historyTabPackets": "Paket",
"historyTabDisk": "Disk I/O",
"historyTabOnline": "Online",
"historyTabLoad": "Beban",
"charts": "Grafik",
"xrayMetricsTitle": "Metrik Xray",
"xrayTitleHeap": "Memori Heap Teralokasi",
"xrayTitleSys": "Memori Dicadangkan dari OS",
"xrayTitleObjects": "Objek Heap Aktif",
"xrayTitleGcCount": "Siklus GC Selesai",
"xrayTitleGcPause": "Durasi Jeda GC",
"xrayTitleObservatory": "Kesehatan Koneksi Keluar",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "Objek",
"xrayTabGcCount": "Jumlah GC",
"xrayTabGcPause": "Jeda GC",
"xrayTabObservatory": "Observatorium",
"xrayMetricsDisabled": "Endpoint metrik Xray belum dikonfigurasi",
"xrayMetricsHint": "Tambahkan blok metrics tingkat atas ke konfigurasi xray dengan tag metrics_out dan listen 127.0.0.1:11111, lalu mulai ulang xray.",
"xrayObservatoryEmpty": "Belum ada data Observatory",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Xrayの実行中にエラーが発生しました",
"operationHours": "システム稼働時間",
"systemHistoryTitle": "システム履歴",
"historyTitleCpu": "CPU 使用率",
"historyTitleMem": "メモリ使用率",
"historyTitleNetwork": "ネットワーク帯域幅",
"historyTitlePackets": "ネットワークパケット",
"historyTitleDisk": "ディスク I/O",
"historyTitleOnline": "オンラインクライアント",
"historyTitleLoad": "システム平均負荷(1分 / 5分 / 15分)",
"historyTabBandwidth": "帯域幅",
"historyTabPackets": "パケット",
"historyTabDisk": "ディスク I/O",
"historyTabOnline": "オンライン",
"historyTabLoad": "負荷",
"charts": "チャート",
"xrayMetricsTitle": "Xray メトリクス",
"xrayTitleHeap": "割り当て済みヒープメモリ",
"xrayTitleSys": "OS から確保したメモリ",
"xrayTitleObjects": "ヒープオブジェクト数",
"xrayTitleGcCount": "完了した GC サイクル",
"xrayTitleGcPause": "GC 一時停止時間",
"xrayTitleObservatory": "アウトバウンド接続の状態",
"xrayTabHeap": "ヒープ",
"xrayTabSys": "Sys",
"xrayTabObjects": "オブジェクト",
"xrayTabGcCount": "GC 回数",
"xrayTabGcPause": "GC 一時停止",
"xrayTabObservatory": "オブザーバトリ",
"xrayMetricsDisabled": "Xray メトリクスエンドポイントが設定されていません",
"xrayMetricsHint": "xray 設定にトップレベルの metrics ブロック(tag: metrics_out、listen: 127.0.0.1:11111)を追加し、xray を再起動してください。",
"xrayObservatoryEmpty": "Observatory データはまだありません",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Ocorreu um erro ao executar o Xray",
"operationHours": "Tempo de Atividade",
"systemHistoryTitle": "Histórico do Sistema",
"historyTitleCpu": "Uso da CPU",
"historyTitleMem": "Uso de Memória",
"historyTitleNetwork": "Largura de Banda da Rede",
"historyTitlePackets": "Pacotes de Rede",
"historyTitleDisk": "E/S de Disco",
"historyTitleOnline": "Clientes Online",
"historyTitleLoad": "Média de Carga do Sistema (1 / 5 / 15 min)",
"historyTabBandwidth": "Largura de Banda",
"historyTabPackets": "Pacotes",
"historyTabDisk": "Disco I/O",
"historyTabOnline": "Online",
"historyTabLoad": "Carga",
"charts": "Gráficos",
"xrayMetricsTitle": "Métricas do Xray",
"xrayTitleHeap": "Memória Heap Alocada",
"xrayTitleSys": "Memória Reservada do SO",
"xrayTitleObjects": "Objetos Heap Ativos",
"xrayTitleGcCount": "Ciclos de GC Concluídos",
"xrayTitleGcPause": "Duração da Pausa do GC",
"xrayTitleObservatory": "Saúde das Conexões de Saída",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "Objetos",
"xrayTabGcCount": "Contagem GC",
"xrayTabGcPause": "Pausa GC",
"xrayTabObservatory": "Observatório",
"xrayMetricsDisabled": "Endpoint de métricas do Xray não configurado",
"xrayMetricsHint": "Adicione um bloco metrics de nível superior à configuração do xray com tag metrics_out e listen 127.0.0.1:11111, depois reinicie o xray.",
"xrayObservatoryEmpty": "Ainda não há dados do Observatory",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Ошибка при запуске Xray",
"operationHours": "Время работы системы",
"systemHistoryTitle": "История системы",
"historyTitleCpu": "Загрузка ЦП",
"historyTitleMem": "Использование памяти",
"historyTitleNetwork": "Пропускная способность сети",
"historyTitlePackets": "Сетевые пакеты",
"historyTitleDisk": "Дисковый ввод-вывод",
"historyTitleOnline": "Клиенты онлайн",
"historyTitleLoad": "Средняя нагрузка системы (1 / 5 / 15 мин)",
"historyTabBandwidth": "Пропускная способность",
"historyTabPackets": "Пакеты",
"historyTabDisk": "Диск I/O",
"historyTabOnline": "Онлайн",
"historyTabLoad": "Нагрузка",
"charts": "Графики",
"xrayMetricsTitle": "Метрики Xray",
"xrayTitleHeap": "Выделенная память кучи",
"xrayTitleSys": "Память, зарезервированная у ОС",
"xrayTitleObjects": "Активные объекты кучи",
"xrayTitleGcCount": "Завершённые циклы GC",
"xrayTitleGcPause": "Длительность паузы GC",
"xrayTitleObservatory": "Состояние исходящих соединений",
"xrayTabHeap": "Куча",
"xrayTabSys": "Sys",
"xrayTabObjects": "Объекты",
"xrayTabGcCount": "Счётчик GC",
"xrayTabGcPause": "Пауза GC",
"xrayTabObservatory": "Обсерватория",
"xrayMetricsDisabled": "Конечная точка метрик Xray не настроена",
"xrayMetricsHint": "Добавьте блок metrics верхнего уровня в конфигурацию xray с tag metrics_out и listen 127.0.0.1:11111, затем перезапустите xray.",
"xrayObservatoryEmpty": "Данных Observatory пока нет",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Xray çalıştırılırken bir hata oluştu",
"operationHours": "Çalışma Süresi",
"systemHistoryTitle": "Sistem Geçmişi",
"historyTitleCpu": "CPU Kullanımı",
"historyTitleMem": "Bellek Kullanımı",
"historyTitleNetwork": "Ağ Bant Genişliği",
"historyTitlePackets": "Ağ Paketleri",
"historyTitleDisk": "Disk G/Ç",
"historyTitleOnline": "Çevrimiçi İstemciler",
"historyTitleLoad": "Sistem Yük Ortalaması (1d / 5d / 15d)",
"historyTabBandwidth": "Bant Genişliği",
"historyTabPackets": "Paketler",
"historyTabDisk": "Disk G/Ç",
"historyTabOnline": "Çevrimiçi",
"historyTabLoad": "Yük",
"charts": "Grafikler",
"xrayMetricsTitle": "Xray Metrikleri",
"xrayTitleHeap": "Ayrılan Yığın Belleği",
"xrayTitleSys": "İşletim Sisteminden Ayrılan Bellek",
"xrayTitleObjects": "Aktif Yığın Nesneleri",
"xrayTitleGcCount": "Tamamlanan GC Döngüleri",
"xrayTitleGcPause": "GC Duraklama Süresi",
"xrayTitleObservatory": "Giden Bağlantı Durumu",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "Nesneler",
"xrayTabGcCount": "GC Sayısı",
"xrayTabGcPause": "GC Duraklaması",
"xrayTabObservatory": "Gözlemevi",
"xrayMetricsDisabled": "Xray metrik uç noktası yapılandırılmadı",
"xrayMetricsHint": "xray yapılandırmasına tag metrics_out ve listen 127.0.0.1:11111 olan üst düzey bir metrics bloğu ekleyin, sonra xray'i yeniden başlatın.",
"xrayObservatoryEmpty": "Henüz Observatory verisi yok",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Під час роботи Xray сталася помилка",
"operationHours": "Час роботи",
"systemHistoryTitle": "Історія системи",
"historyTitleCpu": "Завантаження ЦП",
"historyTitleMem": "Використання пам’яті",
"historyTitleNetwork": "Пропускна здатність мережі",
"historyTitlePackets": "Мережеві пакети",
"historyTitleDisk": "Дисковий ввід-вивід",
"historyTitleOnline": "Клієнти онлайн",
"historyTitleLoad": "Середнє навантаження системи (1 / 5 / 15 хв)",
"historyTabBandwidth": "Пропускна здатність",
"historyTabPackets": "Пакети",
"historyTabDisk": "Диск I/O",
"historyTabOnline": "Онлайн",
"historyTabLoad": "Навантаження",
"charts": "Графіки",
"xrayMetricsTitle": "Метрики Xray",
"xrayTitleHeap": "Виділена пам’ять купи",
"xrayTitleSys": "Пам’ять, зарезервована в ОС",
"xrayTitleObjects": "Активні об’єкти купи",
"xrayTitleGcCount": "Завершені цикли GC",
"xrayTitleGcPause": "Тривалість паузи GC",
"xrayTitleObservatory": "Стан вихідних з’єднань",
"xrayTabHeap": "Купа",
"xrayTabSys": "Sys",
"xrayTabObjects": "Об’єкти",
"xrayTabGcCount": "Лічильник GC",
"xrayTabGcPause": "Пауза GC",
"xrayTabObservatory": "Обсерваторія",
"xrayMetricsDisabled": "Кінцева точка метрик Xray не налаштована",
"xrayMetricsHint": "Додайте блок metrics верхнього рівня до конфігурації xray з tag metrics_out і listen 127.0.0.1:11111, потім перезапустіть xray.",
"xrayObservatoryEmpty": "Даних Observatory ще немає",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "Đã xảy ra lỗi khi chạy Xray",
"operationHours": "Thời gian hoạt động",
"systemHistoryTitle": "Lịch sử hệ thống",
"historyTitleCpu": "Mức sử dụng CPU",
"historyTitleMem": "Mức sử dụng bộ nhớ",
"historyTitleNetwork": "Băng thông mạng",
"historyTitlePackets": "Gói tin mạng",
"historyTitleDisk": "I/O đĩa",
"historyTitleOnline": "Máy khách trực tuyến",
"historyTitleLoad": "Tải trung bình hệ thống (1 / 5 / 15 phút)",
"historyTabBandwidth": "Băng thông",
"historyTabPackets": "Gói tin",
"historyTabDisk": "Đĩa I/O",
"historyTabOnline": "Trực tuyến",
"historyTabLoad": "Tải",
"charts": "Biểu đồ",
"xrayMetricsTitle": "Chỉ số Xray",
"xrayTitleHeap": "Bộ nhớ Heap đã cấp phát",
"xrayTitleSys": "Bộ nhớ dành riêng từ HĐH",
"xrayTitleObjects": "Đối tượng Heap đang hoạt động",
"xrayTitleGcCount": "Chu kỳ GC đã hoàn thành",
"xrayTitleGcPause": "Thời lượng tạm dừng GC",
"xrayTitleObservatory": "Tình trạng kết nối đi",
"xrayTabHeap": "Heap",
"xrayTabSys": "Sys",
"xrayTabObjects": "Đối tượng",
"xrayTabGcCount": "Số lần GC",
"xrayTabGcPause": "Tạm dừng GC",
"xrayTabObservatory": "Đài quan sát",
"xrayMetricsDisabled": "Điểm cuối chỉ số Xray chưa được cấu hình",
"xrayMetricsHint": "Thêm khối metrics cấp cao nhất vào cấu hình xray với tag là metrics_out và listen là 127.0.0.1:11111, sau đó khởi động lại xray.",
"xrayObservatoryEmpty": "Chưa có dữ liệu Observatory",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "运行Xray时发生错误",
"operationHours": "系统正常运行时间",
"systemHistoryTitle": "系统历史",
"historyTitleCpu": "CPU 使用率",
"historyTitleMem": "内存使用率",
"historyTitleNetwork": "网络带宽",
"historyTitlePackets": "网络数据包",
"historyTitleDisk": "磁盘 I/O",
"historyTitleOnline": "在线客户端",
"historyTitleLoad": "系统平均负载(1 分钟 / 5 分钟 / 15 分钟)",
"historyTabBandwidth": "带宽",
"historyTabPackets": "数据包",
"historyTabDisk": "磁盘 I/O",
"historyTabOnline": "在线",
"historyTabLoad": "负载",
"charts": "图表",
"xrayMetricsTitle": "Xray 指标",
"xrayTitleHeap": "已分配的堆内存",
"xrayTitleSys": "向操作系统保留的内存",
"xrayTitleObjects": "存活的堆对象",
"xrayTitleGcCount": "已完成的 GC 周期",
"xrayTitleGcPause": "GC 暂停时间",
"xrayTitleObservatory": "出站连接健康状态",
"xrayTabHeap": "堆",
"xrayTabSys": "系统",
"xrayTabObjects": "对象",
"xrayTabGcCount": "GC 次数",
"xrayTabGcPause": "GC 暂停",
"xrayTabObservatory": "观测站",
"xrayMetricsDisabled": "未配置 Xray 指标端点",
"xrayMetricsHint": "在 xray 配置中添加顶级 metrics 块,tag 为 metrics_out,listen 为 127.0.0.1:11111,然后重启 xray。",
"xrayObservatoryEmpty": "暂无 Observatory 数据",
+24
View File
@@ -155,8 +155,32 @@
"xrayErrorPopoverTitle": "執行Xray時發生錯誤",
"operationHours": "系統正常執行時間",
"systemHistoryTitle": "系統歷史",
"historyTitleCpu": "CPU 使用率",
"historyTitleMem": "記憶體使用率",
"historyTitleNetwork": "網路頻寬",
"historyTitlePackets": "網路封包",
"historyTitleDisk": "磁碟 I/O",
"historyTitleOnline": "線上用戶端",
"historyTitleLoad": "系統平均負載(1 分鐘 / 5 分鐘 / 15 分鐘)",
"historyTabBandwidth": "頻寬",
"historyTabPackets": "封包",
"historyTabDisk": "磁碟 I/O",
"historyTabOnline": "線上",
"historyTabLoad": "負載",
"charts": "圖表",
"xrayMetricsTitle": "Xray 指標",
"xrayTitleHeap": "已配置的堆積記憶體",
"xrayTitleSys": "向作業系統保留的記憶體",
"xrayTitleObjects": "存活的堆積物件",
"xrayTitleGcCount": "已完成的 GC 週期",
"xrayTitleGcPause": "GC 暫停時間",
"xrayTitleObservatory": "出站連線健康狀態",
"xrayTabHeap": "堆積",
"xrayTabSys": "系統",
"xrayTabObjects": "物件",
"xrayTabGcCount": "GC 次數",
"xrayTabGcPause": "GC 暫停",
"xrayTabObservatory": "觀測站",
"xrayMetricsDisabled": "未設定 Xray 指標端點",
"xrayMetricsHint": "在 xray 設定中加入頂層 metrics 區塊,tag 為 metrics_out,listen 為 127.0.0.1:11111,然後重啟 xray。",
"xrayObservatoryEmpty": "尚無 Observatory 資料",