Compare commits

...

1 Commits

Author SHA1 Message Date
Sven van Ginkel
40165dca32 [Feature] Improve Container monitoring (#928)
* align docker colors

* change the name of the chart

* Add tabs

* Add volumes, health, stack and uptime

* remove tests

* fix table

* Add stack filtering

* search in filter

* add container id

* fix uptime

* feat add ability to exclude container

* remove stack colors, didnt look clear

* better table

* add disk io

* Sync with main

* undo locale

* undo locale
2025-10-19 17:14:19 -04:00
40 changed files with 3196 additions and 241 deletions

View File

@@ -25,6 +25,16 @@ const (
dockerTimeoutMs = 2100 dockerTimeoutMs = 2100
// Maximum realistic network speed (5 GB/s) to detect bad deltas // Maximum realistic network speed (5 GB/s) to detect bad deltas
maxNetworkSpeedBps uint64 = 5e9 maxNetworkSpeedBps uint64 = 5e9
// Container and health constants
composeProjectLabel = "com.docker.compose.project"
healthStatusNone = "none"
containerStateRunning = "running"
containerStateUnknown = "unknown"
volumeTypeVolume = "volume"
diskOpRead = "read"
diskOpReadCap = "Read"
diskOpWrite = "write"
diskOpWriteCap = "Write"
// Maximum conceivable memory usage of a container (100TB) to detect bad memory stats // Maximum conceivable memory usage of a container (100TB) to detect bad memory stats
maxMemoryUsage uint64 = 100 * 1024 * 1024 * 1024 * 1024 maxMemoryUsage uint64 = 100 * 1024 * 1024 * 1024 * 1024
) )
@@ -42,6 +52,8 @@ type dockerManager struct {
buf *bytes.Buffer // Buffer to store and read response bodies buf *bytes.Buffer // Buffer to store and read response bodies
decoder *json.Decoder // Reusable JSON decoder that reads from buf decoder *json.Decoder // Reusable JSON decoder that reads from buf
apiStats *container.ApiStats // Reusable API stats object apiStats *container.ApiStats // Reusable API stats object
volumeSizeCache map[string]float64 // Cached volume sizes (name -> size in MB)
volumeSizeUpdated time.Time // Last time volume sizes were updated
// Cache-time-aware tracking for CPU stats (similar to cpu.go) // Cache-time-aware tracking for CPU stats (similar to cpu.go)
// Maps cache time intervals to container-specific CPU usage tracking // Maps cache time intervals to container-specific CPU usage tracking
@@ -53,6 +65,11 @@ type dockerManager struct {
// cacheTimeMs -> DeltaTracker for network bytes sent/received // cacheTimeMs -> DeltaTracker for network bytes sent/received
networkSentTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64] networkSentTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64]
networkRecvTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64] networkRecvTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64]
// Disk I/O delta trackers - one per cache time to avoid interference
// cacheTimeMs -> DeltaTracker for disk bytes read/written
diskReadTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64]
diskWriteTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64]
} }
// userAgentRoundTripper is a custom http.RoundTripper that adds a User-Agent header to all requests // userAgentRoundTripper is a custom http.RoundTripper that adds a User-Agent header to all requests
@@ -159,8 +176,9 @@ func (dm *dockerManager) getDockerStats(cacheTimeMs uint16) ([]*container.Stats,
} }
} }
// prepare network trackers for next interval for this cache time // prepare network and disk trackers for next interval for this cache time
dm.cycleNetworkDeltasForCacheTime(cacheTimeMs) dm.cycleNetworkDeltasForCacheTime(cacheTimeMs)
dm.cycleDiskDeltasForCacheTime(cacheTimeMs)
return stats, nil return stats, nil
} }
@@ -239,6 +257,32 @@ func (dm *dockerManager) cycleNetworkDeltasForCacheTime(cacheTimeMs uint16) {
} }
} }
// getDiskTracker returns the DeltaTracker for disk I/O for a specific cache time, creating it if needed
func (dm *dockerManager) getDiskTracker(cacheTimeMs uint16, isRead bool) *deltatracker.DeltaTracker[string, uint64] {
var trackers map[uint16]*deltatracker.DeltaTracker[string, uint64]
if isRead {
trackers = dm.diskReadTrackers
} else {
trackers = dm.diskWriteTrackers
}
if trackers[cacheTimeMs] == nil {
trackers[cacheTimeMs] = deltatracker.NewDeltaTracker[string, uint64]()
}
return trackers[cacheTimeMs]
}
// cycleDiskDeltasForCacheTime cycles the disk delta trackers for a specific cache time
func (dm *dockerManager) cycleDiskDeltasForCacheTime(cacheTimeMs uint16) {
if dm.diskReadTrackers[cacheTimeMs] != nil {
dm.diskReadTrackers[cacheTimeMs].Cycle()
}
if dm.diskWriteTrackers[cacheTimeMs] != nil {
dm.diskWriteTrackers[cacheTimeMs].Cycle()
}
}
// calculateNetworkStats calculates network sent/receive deltas using DeltaTracker // calculateNetworkStats calculates network sent/receive deltas using DeltaTracker
func (dm *dockerManager) calculateNetworkStats(ctr *container.ApiInfo, apiStats *container.ApiStats, stats *container.Stats, initialized bool, name string, cacheTimeMs uint16) (uint64, uint64) { func (dm *dockerManager) calculateNetworkStats(ctr *container.ApiInfo, apiStats *container.ApiStats, stats *container.Stats, initialized bool, name string, cacheTimeMs uint16) (uint64, uint64) {
var total_sent, total_recv uint64 var total_sent, total_recv uint64
@@ -284,6 +328,50 @@ func (dm *dockerManager) calculateNetworkStats(ctr *container.ApiInfo, apiStats
return sent_delta, recv_delta return sent_delta, recv_delta
} }
// calculateDiskStats calculates disk read/write deltas using DeltaTracker
func (dm *dockerManager) calculateDiskStats(ctr *container.ApiInfo, apiStats *container.ApiStats, stats *container.Stats, initialized bool, cacheTimeMs uint16) (uint64, uint64) {
var total_read, total_write uint64
for _, entry := range apiStats.BlkioStats.IoServiceBytesRecursive {
switch entry.Op {
case diskOpRead, diskOpReadCap:
total_read += entry.Value
case diskOpWrite, diskOpWriteCap:
total_write += entry.Value
}
}
// Get the DeltaTracker for this specific cache time
readTracker := dm.getDiskTracker(cacheTimeMs, true)
writeTracker := dm.getDiskTracker(cacheTimeMs, false)
// Set current values in the cache-time-specific DeltaTracker
readTracker.Set(ctr.IdShort, total_read)
writeTracker.Set(ctr.IdShort, total_write)
// Get deltas (bytes since last measurement)
read_delta_raw := readTracker.Delta(ctr.IdShort)
write_delta_raw := writeTracker.Delta(ctr.IdShort)
// Calculate bytes per second if we have previous data
var read_delta, write_delta uint64
if initialized {
millisecondsElapsed := uint64(time.Since(stats.PrevReadTime).Milliseconds())
if millisecondsElapsed > 0 {
if read_delta_raw > 0 {
read_delta = read_delta_raw * 1000 / millisecondsElapsed
}
if write_delta_raw > 0 {
write_delta = write_delta_raw * 1000 / millisecondsElapsed
}
}
}
// Store current disk values for legacy compatibility
stats.PrevDisk.Read, stats.PrevDisk.Write = total_read, total_write
return read_delta, write_delta
}
// validateCpuPercentage checks if CPU percentage is within valid range // validateCpuPercentage checks if CPU percentage is within valid range
func validateCpuPercentage(cpuPct float64, containerName string) error { func validateCpuPercentage(cpuPct float64, containerName string) error {
if cpuPct > 100 { if cpuPct > 100 {
@@ -293,11 +381,13 @@ func validateCpuPercentage(cpuPct float64, containerName string) error {
} }
// updateContainerStatsValues updates the final stats values // updateContainerStatsValues updates the final stats values
func updateContainerStatsValues(stats *container.Stats, cpuPct float64, usedMemory uint64, sent_delta, recv_delta uint64, readTime time.Time) { func updateContainerStatsValues(stats *container.Stats, cpuPct float64, usedMemory uint64, sent_delta, recv_delta, read_delta, write_delta uint64, readTime time.Time) {
stats.Cpu = twoDecimals(cpuPct) stats.Cpu = twoDecimals(cpuPct)
stats.Mem = bytesToMegabytes(float64(usedMemory)) stats.Mem = bytesToMegabytes(float64(usedMemory))
stats.NetworkSent = bytesToMegabytes(float64(sent_delta)) stats.NetworkSent = bytesToMegabytes(float64(sent_delta))
stats.NetworkRecv = bytesToMegabytes(float64(recv_delta)) stats.NetworkRecv = bytesToMegabytes(float64(recv_delta))
stats.DiskRead = bytesToMegabytes(float64(read_delta))
stats.DiskWrite = bytesToMegabytes(float64(write_delta))
stats.PrevReadTime = readTime stats.PrevReadTime = readTime
} }
@@ -320,11 +410,64 @@ func (dm *dockerManager) updateContainerStats(ctr *container.ApiInfo, cacheTimeM
dm.containerStatsMap[ctr.IdShort] = stats dm.containerStatsMap[ctr.IdShort] = stats
} }
// Update name in case it changed
stats.Name = name
// Set container metadata
stats.IdShort = ctr.IdShort
stats.Status = ctr.State
if stats.Status == "" {
stats.Status = containerStateUnknown
}
// Set health status
stats.Health = healthStatusNone
if ctr.Health != "" {
stats.Health = ctr.Health
}
// Set Docker Compose project name
if ctr.Labels != nil {
if projectName, exists := ctr.Labels[composeProjectLabel]; exists {
stats.Project = projectName
}
}
// Calculate uptime for running containers
if ctr.StartedAt > 0 && stats.Status == containerStateRunning {
startedTime := time.Unix(ctr.StartedAt, 0)
stats.Uptime = twoDecimals(time.Since(startedTime).Seconds())
} else {
stats.Uptime = 0
}
// Collect volume information and fetch sizes
volumeCount := 0
for _, mount := range ctr.Mounts {
if mount.Type == volumeTypeVolume && mount.Name != "" {
volumeCount++
}
}
if volumeCount > 0 {
stats.Volumes = make(map[string]float64, volumeCount)
for _, mount := range ctr.Mounts {
if mount.Type == volumeTypeVolume && mount.Name != "" {
// Fetch volume size using Docker system df API
size := dm.getVolumeSize(mount.Name)
stats.Volumes[mount.Name] = size
}
}
} else {
stats.Volumes = nil
}
// reset current stats // reset current stats
stats.Cpu = 0 stats.Cpu = 0
stats.Mem = 0 stats.Mem = 0
stats.NetworkSent = 0 stats.NetworkSent = 0
stats.NetworkRecv = 0 stats.NetworkRecv = 0
stats.DiskRead = 0
stats.DiskWrite = 0
res := dm.apiStats res := dm.apiStats
res.Networks = nil res.Networks = nil
@@ -374,8 +517,11 @@ func (dm *dockerManager) updateContainerStats(ctr *container.ApiInfo, cacheTimeM
} }
stats.PrevNet.Sent, stats.PrevNet.Recv = total_sent, total_recv stats.PrevNet.Sent, stats.PrevNet.Recv = total_sent, total_recv
// Calculate disk I/O stats using DeltaTracker
read_delta, write_delta := dm.calculateDiskStats(ctr, res, stats, initialized, cacheTimeMs)
// Update final stats values // Update final stats values
updateContainerStatsValues(stats, cpuPct, usedMemory, sent_delta, recv_delta, res.Read) updateContainerStatsValues(stats, cpuPct, usedMemory, sent_delta, recv_delta, read_delta, write_delta, res.Read)
// store per-cache-time read time for Windows CPU percent calc // store per-cache-time read time for Windows CPU percent calc
dm.lastCpuReadTime[cacheTimeMs][ctr.IdShort] = res.Read dm.lastCpuReadTime[cacheTimeMs][ctr.IdShort] = res.Read
@@ -460,6 +606,7 @@ func newDockerManager(a *Agent) *dockerManager {
sem: make(chan struct{}, 5), sem: make(chan struct{}, 5),
apiContainerList: []*container.ApiInfo{}, apiContainerList: []*container.ApiInfo{},
apiStats: &container.ApiStats{}, apiStats: &container.ApiStats{},
volumeSizeCache: make(map[string]float64),
// Initialize cache-time-aware tracking structures // Initialize cache-time-aware tracking structures
lastCpuContainer: make(map[uint16]map[string]uint64), lastCpuContainer: make(map[uint16]map[string]uint64),
@@ -467,6 +614,8 @@ func newDockerManager(a *Agent) *dockerManager {
lastCpuReadTime: make(map[uint16]map[string]time.Time), lastCpuReadTime: make(map[uint16]map[string]time.Time),
networkSentTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]), networkSentTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
networkRecvTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]), networkRecvTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
diskReadTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
diskWriteTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
} }
// If using podman, return client // If using podman, return client
@@ -521,6 +670,49 @@ func (dm *dockerManager) checkDockerVersion() {
} }
} }
// getVolumeSize returns the cached size of a Docker volume
// Refreshes the cache every 5 minutes using the system df API
// Returns size in MB (megabytes)
func (dm *dockerManager) getVolumeSize(volumeName string) float64 {
// Refresh cache if older than 5 minutes
if time.Since(dm.volumeSizeUpdated) > 5*time.Minute {
dm.refreshVolumeSizes()
}
return dm.volumeSizeCache[volumeName]
}
// refreshVolumeSizes fetches all volume sizes from Docker and updates the cache
func (dm *dockerManager) refreshVolumeSizes() {
type volumeInfo struct {
Name string
UsageData struct {
Size int64
}
}
type systemDfResponse struct {
Volumes []volumeInfo
}
resp, err := dm.client.Get("http://localhost/system/df")
if err != nil {
return
}
var dfData systemDfResponse
if err := dm.decode(resp, &dfData); err != nil {
return
}
// Update all volume sizes in cache
for _, vol := range dfData.Volumes {
// Convert bytes to MB (megabytes)
dm.volumeSizeCache[vol.Name] = float64(vol.UsageData.Size) / 1_000_000
}
dm.volumeSizeUpdated = time.Now()
}
// Decodes Docker API JSON response using a reusable buffer and decoder. Not thread safe. // Decodes Docker API JSON response using a reusable buffer and decoder. Not thread safe.
func (dm *dockerManager) decode(resp *http.Response, d any) error { func (dm *dockerManager) decode(resp *http.Response, d any) error {
if dm.buf == nil { if dm.buf == nil {

View File

@@ -4,25 +4,29 @@ import "time"
// Docker container info from /containers/json // Docker container info from /containers/json
type ApiInfo struct { type ApiInfo struct {
Id string Id string
IdShort string IdShort string
Names []string Names []string
Status string Status string
Health string `json:"Health,omitempty"` // Container health status
Created int64 `json:"Created,omitempty"` // Container creation timestamp
StartedAt int64 `json:"StartedAt,omitempty"` // Container start timestamp
FinishedAt int64 `json:"FinishedAt,omitempty"` // Container finish timestamp
State string `json:"State,omitempty"` // Container state (running, stopped, etc.)
// Image string // Image string
// ImageID string // ImageID string
// Command string // Command string
// Created int64
// Ports []Port // Ports []Port
// SizeRw int64 `json:",omitempty"` // SizeRw int64 `json:",omitempty"`
// SizeRootFs int64 `json:",omitempty"` // SizeRootFs int64 `json:",omitempty"`
// Labels map[string]string Labels map[string]string
// State string // State string
// HostConfig struct { // HostConfig struct {
// NetworkMode string `json:",omitempty"` // NetworkMode string `json:",omitempty"`
// Annotations map[string]string `json:",omitempty"` // Annotations map[string]string `json:",omitempty"`
// } // }
// NetworkSettings *SummaryNetworkSettings // NetworkSettings *SummaryNetworkSettings
// Mounts []MountPoint Mounts []MountPoint
} }
// Docker container resources from /containers/{id}/stats // Docker container resources from /containers/{id}/stats
@@ -32,6 +36,7 @@ type ApiStats struct {
Networks map[string]NetworkStats Networks map[string]NetworkStats
CPUStats CPUStats `json:"cpu_stats"` CPUStats CPUStats `json:"cpu_stats"`
MemoryStats MemoryStats `json:"memory_stats"` MemoryStats MemoryStats `json:"memory_stats"`
BlkioStats BlkioStats `json:"blkio_stats"`
} }
func (s *ApiStats) CalculateCpuPercentLinux(prevCpuContainer uint64, prevCpuSystem uint64) float64 { func (s *ApiStats) CalculateCpuPercentLinux(prevCpuContainer uint64, prevCpuSystem uint64) float64 {
@@ -98,21 +103,58 @@ type NetworkStats struct {
TxBytes uint64 `json:"tx_bytes"` TxBytes uint64 `json:"tx_bytes"`
} }
type BlkioStats struct {
IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive"`
IoServicedRecursive []BlkioStatEntry `json:"io_serviced_recursive"`
}
type BlkioStatEntry struct {
Major uint64 `json:"major"`
Minor uint64 `json:"minor"`
Op string `json:"op"`
Value uint64 `json:"value"`
}
type prevNetStats struct { type prevNetStats struct {
Sent uint64 Sent uint64
Recv uint64 Recv uint64
} }
type prevDiskStats struct {
Read uint64
Write uint64
}
// Docker container stats // Docker container stats
type Stats struct { type Stats struct {
Name string `json:"n" cbor:"0,keyasint"` Name string `json:"n" cbor:"0,keyasint"`
Cpu float64 `json:"c" cbor:"1,keyasint"` Cpu float64 `json:"c" cbor:"1,keyasint"`
Mem float64 `json:"m" cbor:"2,keyasint"` Mem float64 `json:"m" cbor:"2,keyasint"`
NetworkSent float64 `json:"ns" cbor:"3,keyasint"` NetworkSent float64 `json:"ns" cbor:"3,keyasint"`
NetworkRecv float64 `json:"nr" cbor:"4,keyasint"` NetworkRecv float64 `json:"nr" cbor:"4,keyasint"`
// PrevCpu [2]uint64 `json:"-"` DiskRead float64 `json:"dr" cbor:"5,keyasint"` // Disk read rate in MB/s
CpuSystem uint64 `json:"-"` DiskWrite float64 `json:"dw" cbor:"6,keyasint"` // Disk write rate in MB/s
CpuContainer uint64 `json:"-"` Volumes map[string]float64 `json:"v,omitempty" cbor:"7,keyasint"` // Volume name to size mapping
PrevNet prevNetStats `json:"-"` Health string `json:"h,omitempty" cbor:"8,keyasint"` // Container health status
PrevReadTime time.Time `json:"-"` Status string `json:"s,omitempty" cbor:"9,keyasint"` // Container status (running, stopped, etc.)
Uptime float64 `json:"u,omitempty" cbor:"10,keyasint"` // Container uptime in seconds
Project string `json:"p,omitempty" cbor:"11,keyasint"` // Docker Compose project name
IdShort string `json:"idShort,omitempty" cbor:"12,keyasint"` // Container short ID for frontend
CpuSystem uint64 `json:"-"`
CpuContainer uint64 `json:"-"`
PrevNet prevNetStats `json:"-"`
PrevDisk prevDiskStats `json:"-"`
PrevReadTime time.Time `json:"-"`
}
// MountPoint represents a mount point in a container
type MountPoint struct {
Type string `json:"Type"`
Name string `json:"Name"`
Source string `json:"Source"`
Destination string `json:"Destination"`
Driver string `json:"Driver,omitempty"`
Mode string `json:"Mode"`
RW bool `json:"RW"`
Propagation string `json:"Propagation"`
} }

View File

@@ -414,6 +414,8 @@ func (rm *RecordManager) AverageContainerStats(db dbx.Builder, records RecordIds
sums[stat.Name].Mem += stat.Mem sums[stat.Name].Mem += stat.Mem
sums[stat.Name].NetworkSent += stat.NetworkSent sums[stat.Name].NetworkSent += stat.NetworkSent
sums[stat.Name].NetworkRecv += stat.NetworkRecv sums[stat.Name].NetworkRecv += stat.NetworkRecv
sums[stat.Name].DiskRead += stat.DiskRead
sums[stat.Name].DiskWrite += stat.DiskWrite
} }
} }
@@ -425,6 +427,8 @@ func (rm *RecordManager) AverageContainerStats(db dbx.Builder, records RecordIds
Mem: twoDecimals(value.Mem / count), Mem: twoDecimals(value.Mem / count),
NetworkSent: twoDecimals(value.NetworkSent / count), NetworkSent: twoDecimals(value.NetworkSent / count),
NetworkRecv: twoDecimals(value.NetworkRecv / count), NetworkRecv: twoDecimals(value.NetworkRecv / count),
DiskRead: twoDecimals(value.DiskRead / count),
DiskWrite: twoDecimals(value.DiskWrite / count),
}) })
} }
return result return result

View File

@@ -69,7 +69,7 @@
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/gen-mapping": "^0.3.5",
@@ -83,7 +83,7 @@
"version": "7.27.1", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-validator-identifier": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1",
@@ -98,7 +98,7 @@
"version": "7.28.0", "version": "7.28.0",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz",
"integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -108,7 +108,7 @@
"version": "7.28.3", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz",
"integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.2.0", "@ampproject/remapping": "^2.2.0",
@@ -139,7 +139,7 @@
"version": "7.28.3", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz",
"integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/parser": "^7.28.3", "@babel/parser": "^7.28.3",
@@ -156,7 +156,7 @@
"version": "7.27.2", "version": "7.27.2",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/compat-data": "^7.27.2", "@babel/compat-data": "^7.27.2",
@@ -173,7 +173,7 @@
"version": "7.28.0", "version": "7.28.0",
"resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -183,7 +183,7 @@
"version": "7.27.1", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/traverse": "^7.27.1", "@babel/traverse": "^7.27.1",
@@ -197,7 +197,7 @@
"version": "7.28.3", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
"integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-module-imports": "^7.27.1", "@babel/helper-module-imports": "^7.27.1",
@@ -215,7 +215,7 @@
"version": "7.27.1", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -225,7 +225,7 @@
"version": "7.27.1", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -235,7 +235,7 @@
"version": "7.27.1", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -245,7 +245,7 @@
"version": "7.28.3", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz",
"integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/template": "^7.27.2", "@babel/template": "^7.27.2",
@@ -259,7 +259,7 @@
"version": "7.28.3", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz",
"integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.28.2" "@babel/types": "^7.28.2"
@@ -287,7 +287,7 @@
"version": "7.27.2", "version": "7.27.2",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
@@ -302,7 +302,7 @@
"version": "7.28.3", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz",
"integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
@@ -321,7 +321,7 @@
"version": "7.28.2", "version": "7.28.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.27.1", "@babel/helper-string-parser": "^7.27.1",
@@ -1020,7 +1020,7 @@
"version": "29.6.3", "version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
"integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@sinclair/typebox": "^0.27.8" "@sinclair/typebox": "^0.27.8"
@@ -1033,7 +1033,7 @@
"version": "29.6.3", "version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jest/schemas": "^29.6.3", "@jest/schemas": "^29.6.3",
@@ -1051,7 +1051,7 @@
"version": "0.3.13", "version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/sourcemap-codec": "^1.5.0",
@@ -1073,7 +1073,7 @@
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.0.0" "node": ">=6.0.0"
@@ -1083,14 +1083,14 @@
"version": "1.5.5", "version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@jridgewell/trace-mapping": { "node_modules/@jridgewell/trace-mapping": {
"version": "0.3.30", "version": "0.3.30",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
"integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/resolve-uri": "^3.1.0",
@@ -1111,7 +1111,7 @@
"version": "5.4.1", "version": "5.4.1",
"resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.4.1.tgz", "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.4.1.tgz",
"integrity": "sha512-9IO+PDvdneY8OCI8zvI1oDXpzryTMtyRv7uq9O0U1mFCvIPVd5dWQKQDu/CpgpYAc2+JG/izn5PNl9xzPc6ckw==", "integrity": "sha512-9IO+PDvdneY8OCI8zvI1oDXpzryTMtyRv7uq9O0U1mFCvIPVd5dWQKQDu/CpgpYAc2+JG/izn5PNl9xzPc6ckw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/core": "^7.20.12", "@babel/core": "^7.20.12",
@@ -1331,7 +1331,7 @@
"version": "5.4.1", "version": "5.4.1",
"resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.1.tgz", "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.1.tgz",
"integrity": "sha512-aDkj/bMSr/mCL8Nr1TS52v0GLCuVa4YqtRz+WvUCFZw/ovVInX0hKq1TClx/bSlhu60FzB/CbclxFMBw8aLVUg==", "integrity": "sha512-aDkj/bMSr/mCL8Nr1TS52v0GLCuVa4YqtRz+WvUCFZw/ovVInX0hKq1TClx/bSlhu60FzB/CbclxFMBw8aLVUg==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
@@ -2750,7 +2750,7 @@
"version": "0.27.8", "version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
"integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@swc/core": { "node_modules/@swc/core": {
@@ -3420,14 +3420,14 @@
"version": "2.0.6", "version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
"integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/istanbul-lib-report": { "node_modules/@types/istanbul-lib-report": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
"integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/istanbul-lib-coverage": "*" "@types/istanbul-lib-coverage": "*"
@@ -3437,7 +3437,7 @@
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/istanbul-lib-report": "*" "@types/istanbul-lib-report": "*"
@@ -3447,7 +3447,7 @@
"version": "24.3.0", "version": "24.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz",
"integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"undici-types": "~7.10.0" "undici-types": "~7.10.0"
@@ -3457,7 +3457,7 @@
"version": "19.1.11", "version": "19.1.11",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.11.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.11.tgz",
"integrity": "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==", "integrity": "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"csstype": "^3.0.2" "csstype": "^3.0.2"
@@ -3467,7 +3467,7 @@
"version": "19.1.7", "version": "19.1.7",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz",
"integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"@types/react": "^19.0.0" "@types/react": "^19.0.0"
@@ -3477,7 +3477,7 @@
"version": "17.0.33", "version": "17.0.33",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
"integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/yargs-parser": "*" "@types/yargs-parser": "*"
@@ -3487,7 +3487,7 @@
"version": "21.0.3", "version": "21.0.3",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@vitejs/plugin-react-swc": { "node_modules/@vitejs/plugin-react-swc": {
@@ -3524,7 +3524,7 @@
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
@@ -3567,7 +3567,7 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true, "devOptional": true,
"license": "Python-2.0" "license": "Python-2.0"
}, },
"node_modules/aria-hidden": { "node_modules/aria-hidden": {
@@ -3662,7 +3662,7 @@
"version": "4.25.1", "version": "4.25.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
"integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
"dev": true, "devOptional": true,
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -3733,7 +3733,7 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
@@ -3743,7 +3743,7 @@
"version": "6.3.0", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=10" "node": ">=10"
@@ -3756,7 +3756,7 @@
"version": "1.0.30001727", "version": "1.0.30001727",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
"integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==",
"dev": true, "devOptional": true,
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -3777,7 +3777,7 @@
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"ansi-styles": "^4.1.0", "ansi-styles": "^4.1.0",
@@ -3889,7 +3889,7 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"color-name": "~1.1.4" "color-name": "~1.1.4"
@@ -3902,7 +3902,7 @@
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/colors": { "node_modules/colors": {
@@ -3919,14 +3919,14 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/cosmiconfig": { "node_modules/cosmiconfig": {
"version": "8.3.6", "version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
"integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"import-fresh": "^3.3.0", "import-fresh": "^3.3.0",
@@ -4106,7 +4106,7 @@
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"ms": "^2.1.3" "ms": "^2.1.3"
@@ -4176,7 +4176,7 @@
"version": "1.5.182", "version": "1.5.182",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.182.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.182.tgz",
"integrity": "sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA==", "integrity": "sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA==",
"dev": true, "devOptional": true,
"license": "ISC" "license": "ISC"
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
@@ -4204,7 +4204,7 @@
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"is-arrayish": "^0.2.1" "is-arrayish": "^0.2.1"
@@ -4273,7 +4273,7 @@
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
@@ -4361,7 +4361,7 @@
"version": "1.0.0-beta.2", "version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -4387,7 +4387,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@@ -4418,7 +4418,7 @@
"version": "3.3.1", "version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"parent-module": "^1.0.0", "parent-module": "^1.0.0",
@@ -4461,7 +4461,7 @@
"version": "0.2.1", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/is-binary-path": { "node_modules/is-binary-path": {
@@ -4554,7 +4554,7 @@
"version": "29.6.3", "version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0" "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -4564,7 +4564,7 @@
"version": "29.7.0", "version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jest/types": "^29.6.3", "@jest/types": "^29.6.3",
@@ -4582,7 +4582,7 @@
"version": "1.21.7", "version": "1.21.7",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"jiti": "bin/jiti.js" "jiti": "bin/jiti.js"
@@ -4604,7 +4604,7 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"argparse": "^2.0.1" "argparse": "^2.0.1"
@@ -4617,7 +4617,7 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"jsesc": "bin/jsesc" "jsesc": "bin/jsesc"
@@ -4630,14 +4630,14 @@
"version": "2.3.1", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/json5": { "node_modules/json5": {
"version": "2.2.3", "version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"json5": "lib/cli.js" "json5": "lib/cli.js"
@@ -4650,7 +4650,7 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
@@ -4899,7 +4899,7 @@
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/lodash": { "node_modules/lodash": {
@@ -4948,7 +4948,7 @@
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true, "devOptional": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"yallist": "^3.0.2" "yallist": "^3.0.2"
@@ -5059,7 +5059,7 @@
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/nanoid": { "node_modules/nanoid": {
@@ -5100,7 +5100,7 @@
"version": "2.0.19", "version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/normalize-path": { "node_modules/normalize-path": {
@@ -5196,7 +5196,7 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"callsites": "^3.0.0" "callsites": "^3.0.0"
@@ -5209,7 +5209,7 @@
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
@@ -5238,7 +5238,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@@ -5248,7 +5248,7 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true, "devOptional": true,
"license": "ISC" "license": "ISC"
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
@@ -5310,7 +5310,7 @@
"version": "29.7.0", "version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jest/schemas": "^29.6.3", "@jest/schemas": "^29.6.3",
@@ -5325,7 +5325,7 @@
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=10" "node": ">=10"
@@ -5571,7 +5571,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=4" "node": ">=4"
@@ -5669,7 +5669,7 @@
"version": "6.3.1", "version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true, "devOptional": true,
"license": "ISC", "license": "ISC",
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
@@ -5852,7 +5852,7 @@
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"has-flag": "^4.0.0" "has-flag": "^4.0.0"
@@ -5986,7 +5986,7 @@
"version": "5.9.2", "version": "5.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
@@ -6000,14 +6000,14 @@
"version": "7.10.0", "version": "7.10.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
"integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
"dev": true, "devOptional": true,
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -6339,7 +6339,7 @@
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true, "devOptional": true,
"license": "ISC" "license": "ISC"
} }
} }

View File

@@ -1,20 +1,32 @@
// import Spinner from '../spinner' // import Spinner from '../spinner'
import { useStore } from "@nanostores/react" import { useStore } from "@nanostores/react"
import { memo, useMemo } from "react" import { memo, useMemo } from "react"
import { Area, AreaChart, CartesianGrid, YAxis } from "recharts" import React from "react"
import { Area, AreaChart, CartesianGrid, Line, LineChart, YAxis } from "recharts"
import { Badge } from "@/components/ui/badge"
import { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, xAxis } from "@/components/ui/chart" import { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, xAxis } from "@/components/ui/chart"
import { Separator } from "@/components/ui/separator"
import { ChartType, Unit } from "@/lib/enums" import { ChartType, Unit } from "@/lib/enums"
import { $containerFilter, $userSettings } from "@/lib/stores" import { $containerColors, $containerFilter, $stackFilter, $userSettings } from "@/lib/stores"
import { chartMargin, cn, decimalString, formatBytes, formatShortDate, toFixedFloat } from "@/lib/utils" import {
chartMargin,
cn,
decimalString,
formatBytes,
formatShortDate,
generateFallbackColor,
getSizeAndUnit,
toFixedFloat,
toFixedWithoutTrailingZeros,
} from "@/lib/utils"
import type { ChartData } from "@/types" import type { ChartData } from "@/types"
import { Separator } from "../ui/separator"
import { useYAxisWidth } from "./hooks" import { useYAxisWidth } from "./hooks"
export default memo(function ContainerChart({ export default memo(function ContainerChart({
dataKey, dataKey,
chartData, chartData,
chartType, chartType,
chartConfig, chartConfig: propChartConfig,
unit = "%", unit = "%",
}: { }: {
dataKey: string dataKey: string
@@ -23,13 +35,168 @@ export default memo(function ContainerChart({
chartConfig: ChartConfig chartConfig: ChartConfig
unit?: string unit?: string
}) { }) {
const filter = useStore($containerFilter) const containerFilter = useStore($containerFilter)
const stackFilter = useStore($stackFilter)
const containerColors = useStore($containerColors)
const userSettings = useStore($userSettings) const userSettings = useStore($userSettings)
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth() const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
const { containerData } = chartData const { containerData } = chartData
const isNetChart = chartType === ChartType.Network const isNetChart = chartType === ChartType.Network
const isVolumeChart = chartType === ChartType.Volume
const isHealthChart = chartType === ChartType.Health
const isUptimeChart = chartType === ChartType.Uptime
const isHealthUptimeChart = chartType === ChartType.HealthUptime
const isDiskIOChart = chartType === ChartType.DiskIO
// Centralized data processing for all chart types
const chartDatasets = useMemo(() => {
const volumeChartData = { data: [], colors: {} } as {
data: Record<string, number | string>[]
colors: Record<string, string>
}
const healthChartData = { data: [], colors: {} } as {
data: Record<string, number | string>[]
colors: Record<string, string>
}
const uptimeChartData = { data: [], colors: {} } as {
data: Record<string, number | string>[]
colors: Record<string, string>
}
const healthUptimeChartData = { data: [], colors: {} } as {
data: Record<string, number | string>[]
colors: Record<string, string>
}
const containerChartConfig = {} as Record<string, { label: string; color: string }>
const volumeSums: Record<string, number> = {}
const volumeContainers: Record<string, string[]> = {}
const allContainerNames = new Set<string>()
const healthUptimeContainerNames = new Set<string>()
for (const containerStats of containerData) {
if (!containerStats.created) {
// For gaps in data
volumeChartData.data.push({ created: "" })
healthChartData.data.push({ created: "" })
uptimeChartData.data.push({ created: "" })
healthUptimeChartData.data.push({ created: "" })
continue
}
const volumeData = { created: containerStats.created } as Record<string, number | string>
const healthData = { created: containerStats.created } as Record<string, number | string>
const uptimeData = { created: containerStats.created } as Record<string, number | string>
const healthUptimeData = { created: containerStats.created } as Record<string, number | string>
for (const [containerName, containerDataObj] of Object.entries(containerStats)) {
if (containerName === "created") continue
// Apply container filter
if (containerFilter.length > 0 && !containerFilter.includes(containerName)) {
continue
}
// Apply stack filter
if (stackFilter.length > 0 && typeof containerDataObj === "object" && containerDataObj) {
const stackName = (containerDataObj as any).p || "—"
if (!stackFilter.includes(stackName)) {
continue
}
}
allContainerNames.add(containerName)
if (typeof containerDataObj === "object" && containerDataObj) {
// Volume
if ("v" in containerDataObj && containerDataObj.v) {
for (const [volumeName, volumeSize] of Object.entries(containerDataObj.v)) {
if (typeof volumeSize === "number" && volumeSize > 0) {
volumeData[volumeName] = ((volumeData[volumeName] as number) || 0) + volumeSize
volumeSums[volumeName] = (volumeSums[volumeName] ?? 0) + volumeSize
if (!volumeContainers[volumeName]) volumeContainers[volumeName] = []
if (!volumeContainers[volumeName].includes(containerName))
volumeContainers[volumeName].push(containerName)
}
}
}
// Health
if ("h" in containerDataObj) {
const healthStatus = ((containerDataObj.h as string) || "").toLowerCase()
let healthValue = 0
switch (healthStatus) {
case "healthy":
healthValue = 3
break
case "starting":
healthValue = 2
break
case "unhealthy":
healthValue = 1
break
default:
healthValue = 0
}
healthData[containerName] = healthValue
// Health+Uptime
healthUptimeData[`${containerName}_health`] = healthValue
healthUptimeContainerNames.add(containerName)
}
// Uptime
if ("u" in containerDataObj && containerDataObj.u) {
uptimeData[containerName] = (containerDataObj.u as number) / 3600
// Health+Uptime
healthUptimeData[`${containerName}_uptime`] = (containerDataObj.u as number) / 3600
healthUptimeContainerNames.add(containerName)
}
}
}
volumeChartData.data.push(volumeData)
healthChartData.data.push(healthData)
uptimeChartData.data.push(uptimeData)
healthUptimeChartData.data.push(healthUptimeData)
}
// Only process volumes attached to containers
const volumeKeys = Object.keys(volumeSums)
.filter((key) => (volumeContainers[key] || []).length > 0)
.sort((a, b) => volumeSums[b] - volumeSums[a])
for (const key of volumeKeys) {
const containers = volumeContainers[key] || []
const firstContainer = containers[0]
volumeChartData.colors[key] =
containerColors[firstContainer] || generateFallbackColor(firstContainer)
}
const healthKeys = Object.keys(healthChartData.data[0] || {}).filter((key) => key !== "created")
for (const key of healthKeys) {
healthChartData.colors[key] = containerColors[key] || generateFallbackColor(key)
}
const uptimeKeys = Object.keys(uptimeChartData.data[0] || {}).filter((key) => key !== "created")
for (const key of uptimeKeys) {
uptimeChartData.colors[key] = containerColors[key] || generateFallbackColor(key)
}
for (const containerName of healthUptimeContainerNames) {
const color = containerColors[containerName] || generateFallbackColor(containerName)
healthUptimeChartData.colors[`${containerName}_uptime`] = color
healthUptimeChartData.colors[`${containerName}_health`] = color
}
for (const containerName of allContainerNames) {
const color = containerColors[containerName] || generateFallbackColor(containerName)
containerChartConfig[containerName] = { label: containerName, color }
}
return {
volumeChartData,
healthChartData,
uptimeChartData,
healthUptimeChartData,
containerChartConfig,
}
}, [containerData, containerColors, containerFilter, stackFilter])
const { volumeChartData, healthChartData, uptimeChartData, healthUptimeChartData, containerChartConfig } =
chartDatasets
// biome-ignore lint/correctness/useExhaustiveDependencies: not necessary // biome-ignore lint/correctness/useExhaustiveDependencies: not necessary
const { toolTipFormatter, dataFunction, tickFormatter } = useMemo(() => { const { toolTipFormatter, dataFunction, tickFormatter } = useMemo(() => {
@@ -41,9 +208,40 @@ export default memo(function ContainerChart({
// tick formatter // tick formatter
if (chartType === ChartType.CPU) { if (chartType === ChartType.CPU) {
obj.tickFormatter = (value) => { obj.tickFormatter = (value) => {
const val = toFixedFloat(value, 2) + unit const val = `${toFixedWithoutTrailingZeros(value, 2)}${unit}`
return updateYAxisWidth(val) return updateYAxisWidth(val)
} }
} else if (isHealthChart) {
obj.tickFormatter = (value) => {
let healthLabel = "Unknown"
switch (value) {
case 3:
healthLabel = "Healthy"
break
case 2:
healthLabel = "Starting"
break
case 1:
healthLabel = "Unhealthy"
break
case 0:
healthLabel = "None"
break
}
return updateYAxisWidth(healthLabel)
}
} else if (isUptimeChart) {
obj.tickFormatter = (value) => {
const hours = Math.floor(value)
const minutes = Math.floor((value - hours) * 60)
const label = `${hours}h ${minutes}m`
return updateYAxisWidth(label)
}
} else if (isVolumeChart || isDiskIOChart) {
obj.tickFormatter = (value) => {
const { v, u } = getSizeAndUnit(value, false)
return updateYAxisWidth(`${toFixedFloat(v, 2)}${u}${isDiskIOChart ? "/s" : ""}`)
}
} else { } else {
const chartUnit = isNetChart ? userSettings.unitNet : Unit.Bytes const chartUnit = isNetChart ? userSettings.unitNet : Unit.Bytes
obj.tickFormatter = (val) => { obj.tickFormatter = (val) => {
@@ -57,7 +255,12 @@ export default memo(function ContainerChart({
try { try {
const sent = item?.payload?.[key]?.ns ?? 0 const sent = item?.payload?.[key]?.ns ?? 0
const received = item?.payload?.[key]?.nr ?? 0 const received = item?.payload?.[key]?.nr ?? 0
const { value: receivedValue, unit: receivedUnit } = formatBytes(received, true, userSettings.unitNet, true) const { value: receivedValue, unit: receivedUnit } = formatBytes(
received,
true,
userSettings.unitNet,
true
)
const { value: sentValue, unit: sentUnit } = formatBytes(sent, true, userSettings.unitNet, true) const { value: sentValue, unit: sentUnit } = formatBytes(sent, true, userSettings.unitNet, true)
return ( return (
<span className="flex"> <span className="flex">
@@ -72,17 +275,74 @@ export default memo(function ContainerChart({
return null return null
} }
} }
} else if (isDiskIOChart) {
obj.toolTipFormatter = (item: any, key: string) => {
try {
const read = item?.payload?.[key]?.dr ?? 0
const write = item?.payload?.[key]?.dw ?? 0
return (
<span className="flex">
{decimalString(read)} MB/s
<span className="opacity-70 ms-0.5"> read </span>
<Separator orientation="vertical" className="h-3 mx-1.5 bg-primary/40" />
{decimalString(write)} MB/s
<span className="opacity-70 ms-0.5"> write</span>
</span>
)
} catch (e) {
return null
}
}
} else if (chartType === ChartType.Memory) { } else if (chartType === ChartType.Memory) {
obj.toolTipFormatter = (item: any) => { obj.toolTipFormatter = (item: any) => {
const { value, unit } = formatBytes(item.value, false, Unit.Bytes, true) const { value, unit } = formatBytes(item.value, false, Unit.Bytes, true)
return `${decimalString(value)} ${unit}` return `${decimalString(value)} ${unit}`
} }
} else if (isVolumeChart) {
obj.toolTipFormatter = (item: any) => {
const { v, u } = getSizeAndUnit(item.value, false)
return `${decimalString(v, 2)}${u}`
}
} else if (isHealthChart) {
obj.toolTipFormatter = (item: any) => {
let healthLabel = "Unknown"
switch (item.value) {
case 3:
healthLabel = "Healthy"
break
case 2:
healthLabel = "Starting"
break
case 1:
healthLabel = "Unhealthy"
break
case 0:
healthLabel = "None"
break
}
return healthLabel
}
} else if (isUptimeChart) {
obj.toolTipFormatter = (item: any) => {
const hours = Math.floor(item.value)
const minutes = Math.floor((item.value - hours) * 60)
const days = Math.floor(hours / 24)
const remainingHours = hours % 24
if (days > 0) {
return `${days}d ${remainingHours}h ${minutes}m`
}
return `${hours}h ${minutes}m`
}
} else { } else {
obj.toolTipFormatter = (item: any) => `${decimalString(item.value)} ${unit}` obj.toolTipFormatter = (item: any) => `${decimalString(item.value)} ${unit}`
} }
// data function // data function
if (isNetChart) { if (isNetChart) {
obj.dataFunction = (key: string, data: any) => (data[key] ? data[key].nr + data[key].ns : null) obj.dataFunction = (key: string, data: any) => (data[key] ? data[key].nr + data[key].ns : null)
} else if (isDiskIOChart) {
obj.dataFunction = (key: string, data: any) =>
data[key] ? (data[key].dr || 0) + (data[key].dw || 0) : null
} else { } else {
obj.dataFunction = (key: string, data: any) => data[key]?.[dataKey] ?? null obj.dataFunction = (key: string, data: any) => data[key]?.[dataKey] ?? null
} }
@@ -91,12 +351,11 @@ export default memo(function ContainerChart({
// Filter with set lookup // Filter with set lookup
const filteredKeys = useMemo(() => { const filteredKeys = useMemo(() => {
if (!filter) { if (!containerFilter || containerFilter.length === 0) {
return new Set<string>() return new Set<string>()
} }
const filterLower = filter.toLowerCase() return new Set(Object.keys(containerChartConfig).filter((key) => !containerFilter.includes(key)))
return new Set(Object.keys(chartConfig).filter((key) => !key.toLowerCase().includes(filterLower))) }, [containerChartConfig, containerFilter])
}, [chartConfig, filter])
// console.log('rendered at', new Date()) // console.log('rendered at', new Date())
@@ -104,8 +363,228 @@ export default memo(function ContainerChart({
return null return null
} }
// For volume charts, check if we have volume data
if (isVolumeChart) {
if (!volumeChartData || Object.keys(volumeChartData.colors).length === 0) {
return null
}
}
// For health charts, check if we have health data
if (isHealthChart) {
if (!healthChartData || Object.keys(healthChartData.colors).length === 0) {
return null
}
}
// For uptime charts, check if we have uptime data
if (isUptimeChart) {
if (!uptimeChartData || Object.keys(uptimeChartData.colors).length === 0) {
return null
}
}
// For combined health+uptime chart
if (isHealthUptimeChart) {
if (!healthUptimeChartData || healthUptimeChartData.data.length === 0) return null
return (
<HealthUptimeTable
containerData={containerData}
healthUptimeChartData={healthUptimeChartData}
containerColors={containerColors}
filter={containerFilter}
/>
)
}
// Only show selected containers, or all if none selected
const filterableKeys = isVolumeChart
? Object.keys(containerChartConfig)
: Object.keys(containerChartConfig).filter(
(key) =>
!(
containerChartConfig[key] &&
containerChartConfig[key].label &&
containerChartConfig[key].label.startsWith("(orphaned volume)")
)
)
// Render volume chart
if (isVolumeChart) {
const colors = Object.keys(volumeChartData!.colors)
return (
<div className="w-full h-full">
<ChartContainer
className={cn("h-full w-full absolute bg-card opacity-0 transition-opacity", {
"opacity-100": yAxisWidth,
})}
>
<AreaChart
accessibilityLayer
data={volumeChartData!.data}
margin={chartMargin}
reverseStackOrder={true}
>
<CartesianGrid vertical={false} />
<YAxis
direction="ltr"
orientation={chartData.orientation}
className="tracking-tighter"
domain={[0, "auto"]}
width={yAxisWidth}
tickFormatter={(value) => {
const { v, u } = getSizeAndUnit(value, false)
return updateYAxisWidth(`${toFixedFloat(v, 2)}${u}`)
}}
tickLine={false}
axisLine={false}
/>
{xAxis(chartData)}
<ChartTooltip
animationEasing="ease-out"
animationDuration={150}
// @ts-expect-error
itemSorter={(a, b) => b.value - a.value}
content={
<ChartTooltipContent
truncate={true}
labelFormatter={(_, data) => formatShortDate(data[0].payload.created)}
contentFormatter={toolTipFormatter}
/>
}
/>
{colors.map((key) => (
<Area
key={key}
dataKey={key}
name={key}
type="monotoneX"
fill={volumeChartData!.colors[key]}
fillOpacity={0.4}
stroke={volumeChartData!.colors[key]}
strokeOpacity={1}
activeDot={{ opacity: 1 }}
stackId="a"
isAnimationActive={false}
/>
))}
</AreaChart>
</ChartContainer>
</div>
)
}
// Render health chart
if (isHealthChart) {
const colors = Object.keys(healthChartData!.colors)
return (
<div className="w-full h-full">
<ChartContainer
className={cn("h-full w-full absolute bg-card opacity-0 transition-opacity", {
"opacity-100": yAxisWidth,
})}
>
<LineChart accessibilityLayer data={healthChartData!.data} margin={chartMargin}>
<CartesianGrid vertical={false} />
<YAxis
direction="ltr"
orientation={chartData.orientation}
className="tracking-tighter"
domain={[0, 3]}
width={yAxisWidth}
tickFormatter={tickFormatter}
tickLine={false}
axisLine={false}
/>
{xAxis(chartData)}
<ChartTooltip
animationEasing="ease-out"
animationDuration={150}
// @ts-expect-error
itemSorter={(a, b) => b.value - a.value}
content={
<ChartTooltipContent
truncate={true}
labelFormatter={(_, data) => formatShortDate(data[0].payload.created)}
contentFormatter={toolTipFormatter}
/>
}
/>
{colors.map((key) => (
<Line
key={key}
dataKey={key}
name={key}
type="monotoneX"
dot={false}
strokeWidth={1.5}
stroke={healthChartData!.colors[key]}
isAnimationActive={false}
/>
))}
</LineChart>
</ChartContainer>
</div>
)
}
// Render uptime chart
if (isUptimeChart) {
const colors = Object.keys(uptimeChartData!.colors)
return (
<div className="w-full h-full">
<ChartContainer
className={cn("h-full w-full absolute bg-card opacity-0 transition-opacity", {
"opacity-100": yAxisWidth,
})}
>
<LineChart accessibilityLayer data={uptimeChartData!.data} margin={chartMargin}>
<CartesianGrid vertical={false} />
<YAxis
direction="ltr"
orientation={chartData.orientation}
className="tracking-tighter"
domain={[0, "auto"]}
width={yAxisWidth}
tickFormatter={tickFormatter}
tickLine={false}
axisLine={false}
/>
{xAxis(chartData)}
<ChartTooltip
animationEasing="ease-out"
animationDuration={150}
// @ts-expect-error
itemSorter={(a, b) => b.value - a.value}
content={
<ChartTooltipContent
truncate={true}
labelFormatter={(_, data) => formatShortDate(data[0].payload.created)}
contentFormatter={toolTipFormatter}
/>
}
/>
{colors.map((key) => (
<Line
key={key}
dataKey={key}
name={key}
type="monotoneX"
dot={false}
strokeWidth={1.5}
stroke={uptimeChartData!.colors[key]}
isAnimationActive={false}
/>
))}
</LineChart>
</ChartContainer>
</div>
)
}
// Render regular container chart (Area chart)
return ( return (
<div> <div className="w-full h-full">
<ChartContainer <ChartContainer
className={cn("h-full w-full absolute aspect-auto bg-card opacity-0 transition-opacity", { className={cn("h-full w-full absolute aspect-auto bg-card opacity-0 transition-opacity", {
"opacity-100": yAxisWidth, "opacity-100": yAxisWidth,
@@ -136,9 +615,14 @@ export default memo(function ContainerChart({
labelFormatter={(_, data) => formatShortDate(data[0].payload.created)} labelFormatter={(_, data) => formatShortDate(data[0].payload.created)}
// @ts-expect-error // @ts-expect-error
itemSorter={(a, b) => b.value - a.value} itemSorter={(a, b) => b.value - a.value}
content={<ChartTooltipContent filter={filter} contentFormatter={toolTipFormatter} />} content={
<ChartTooltipContent
filter={containerFilter.length > 0 ? containerFilter.join(",") : undefined}
contentFormatter={toolTipFormatter}
/>
}
/> />
{Object.keys(chartConfig).map((key) => { {filterableKeys.map((key) => {
const filtered = filteredKeys.has(key) const filtered = filteredKeys.has(key)
const fillOpacity = filtered ? 0.05 : 0.4 const fillOpacity = filtered ? 0.05 : 0.4
const strokeOpacity = filtered ? 0.1 : 1 const strokeOpacity = filtered ? 0.1 : 1
@@ -149,11 +633,11 @@ export default memo(function ContainerChart({
dataKey={dataFunction.bind(null, key)} dataKey={dataFunction.bind(null, key)}
name={key} name={key}
type="monotoneX" type="monotoneX"
fill={chartConfig[key].color} fill={containerChartConfig[key].color}
fillOpacity={fillOpacity} fillOpacity={fillOpacity}
stroke={chartConfig[key].color} stroke={containerChartConfig[key].color}
strokeOpacity={strokeOpacity} strokeOpacity={strokeOpacity}
activeDot={{ opacity: filtered ? 0 : 1 }} activeDot={{ opacity: 1 }}
stackId="a" stackId="a"
/> />
) )
@@ -163,3 +647,358 @@ export default memo(function ContainerChart({
</div> </div>
) )
}) })
// Extracted HealthUptimeTable component
const HealthUptimeTable = React.memo(function HealthUptimeTable({
containerData,
healthUptimeChartData,
containerColors,
filter,
}: {
containerData: any[]
healthUptimeChartData: { data: any[]; colors: Record<string, string> }
containerColors: Record<string, string>
filter: string[]
}) {
const stackFilter = useStore($stackFilter)
// Get the latest data point for table display
const latestData = healthUptimeChartData.data[healthUptimeChartData.data.length - 1]
if (!latestData) return null
// Extract container data for table
const containerTableData = React.useMemo(() => {
const containerNames = new Set<string>()
for (const key of Object.keys(latestData)) {
if (key === "created") continue
const containerName = key.replace(/_uptime$/, "").replace(/_health$/, "")
// Skip orphaned volumes
if (containerName.startsWith("(orphaned volume)")) continue
containerNames.add(containerName)
}
const tableData = []
for (const containerName of containerNames) {
const uptimeKey = `${containerName}_uptime`
const healthKey = `${containerName}_health`
const uptimeHours = latestData[uptimeKey]
const healthValue = latestData[healthKey] || 0
let healthStatus = "Unknown"
switch (healthValue) {
case 3:
healthStatus = "Healthy"
break
case 2:
healthStatus = "Starting"
break
case 1:
healthStatus = "Unhealthy"
break
case 0:
healthStatus = "None"
break
}
let uptimeDisplay = "N/A"
if (typeof uptimeHours === "number" && !Number.isNaN(uptimeHours)) {
const hours = Math.floor(uptimeHours)
const minutes = Math.floor((uptimeHours - hours) * 60)
const days = Math.floor(hours / 24)
const remainingHours = hours % 24
if (days > 0) {
uptimeDisplay = `${days}d ${remainingHours}h ${minutes}m`
} else {
uptimeDisplay = `${hours}h ${minutes}m`
}
}
let stackName = "—"
let statusInfo = "—"
let idShort = ""
for (let i = containerData.length - 1; i >= 0; i--) {
const containerStats = containerData[i]
if (containerStats.created && containerStats[containerName]) {
const containerDataObj = containerStats[containerName]
if (typeof containerDataObj === "object" && containerDataObj) {
if ("p" in containerDataObj) {
stackName = containerDataObj.p as string
}
if ("s" in containerDataObj) {
statusInfo = containerDataObj.s as string
}
if ("idShort" in containerDataObj) {
idShort = containerDataObj.idShort as string
}
break
}
}
}
tableData.push({
name: containerName,
idShort,
health: healthStatus,
status: statusInfo,
uptime: uptimeDisplay,
uptimeHours: uptimeHours,
healthValue: healthValue,
stack: stackName,
color: containerColors[containerName] || generateFallbackColor(containerName),
})
}
return tableData
}, [containerData, latestData, containerColors])
// Sort and filter state
const [sortField, setSortField] = React.useState<"name" | "idShort" | "stack" | "health" | "status" | "uptime">(
"uptime"
)
const [sortDirection, setSortDirection] = React.useState<"asc" | "desc">("desc")
const [currentPage, setCurrentPage] = React.useState(1)
const containersPerPage = 4
// Filtered data
const filteredContainerData = React.useMemo(() => {
let filtered = containerTableData
// Apply container filter
if (Array.isArray(filter) && filter.length > 0) {
filtered = filtered.filter((container) => filter.includes(container.name))
}
// Apply stack filter
if (Array.isArray(stackFilter) && stackFilter.length > 0) {
filtered = filtered.filter((container) => stackFilter.includes(container.stack))
}
return filtered
}, [containerTableData, filter, stackFilter])
// Sorted data
const sortedContainerData = React.useMemo(() => {
return [...filteredContainerData].sort((a, b) => {
let aValue: string | number
let bValue: string | number
switch (sortField) {
case "name":
aValue = a.name?.toLowerCase?.() || ""
bValue = b.name?.toLowerCase?.() || ""
break
case "idShort":
aValue = a.idShort || ""
bValue = b.idShort || ""
break
case "stack":
aValue = a.stack?.toLowerCase?.() || ""
bValue = b.stack?.toLowerCase?.() || ""
break
case "health":
aValue = typeof a.healthValue === "number" ? a.healthValue : 0
bValue = typeof b.healthValue === "number" ? b.healthValue : 0
break
case "status":
aValue = a.status?.toLowerCase?.() || ""
bValue = b.status?.toLowerCase?.() || ""
break
case "uptime":
aValue = typeof a.uptimeHours === "number" ? a.uptimeHours : 0
bValue = typeof b.uptimeHours === "number" ? b.uptimeHours : 0
break
default:
return 0
}
if (aValue < bValue) return sortDirection === "asc" ? -1 : 1
if (aValue > bValue) return sortDirection === "asc" ? 1 : -1
return 0
})
}, [filteredContainerData, sortField, sortDirection])
// Pagination
const totalPages = Math.ceil(sortedContainerData.length / containersPerPage)
const startIndex = (currentPage - 1) * containersPerPage
const endIndex = startIndex + containersPerPage
const currentContainers = sortedContainerData.slice(startIndex, endIndex)
// Handlers
const handleSort = (field: "name" | "idShort" | "stack" | "health" | "status" | "uptime") => {
if (sortField === field) {
setSortDirection(sortDirection === "asc" ? "desc" : "asc")
} else {
setSortField(field)
setSortDirection("asc")
}
}
const getSortIcon = (field: "name" | "idShort" | "stack" | "health" | "status" | "uptime") => {
if (sortField !== field) return "↑↓"
return sortDirection === "asc" ? "↑" : "↓"
}
React.useEffect(() => {
setCurrentPage(1)
}, [filteredContainerData, sortField, sortDirection])
return (
<div className="w-full h-full flex flex-col opacity-100">
<div className="flex-1 p-2 overflow-hidden">
<div className="overflow-x-auto h-full">
<table className="w-full text-xs table-fixed">
<thead>
<tr className="border-b border-border">
<th
className="text-left font-medium p-1 w-1/6 cursor-pointer hover:bg-muted/50 transition-colors select-none"
onClick={() => handleSort("idShort")}
>
<div className="flex items-center gap-1">
ID
<span className="text-xs opacity-60">{getSortIcon("idShort")}</span>
</div>
</th>
<th
className="text-left font-medium p-1 w-1/4 cursor-pointer hover:bg-muted/50 transition-colors select-none"
onClick={() => handleSort("name")}
>
<div className="flex items-center gap-1">
Container
<span className="text-xs opacity-60">{getSortIcon("name")}</span>
</div>
</th>
<th
className="text-left font-medium p-1 w-1/6 cursor-pointer hover:bg-muted/50 transition-colors select-none"
onClick={() => handleSort("stack")}
>
<div className="flex items-center gap-1">
Stack
<span className="text-xs opacity-60">{getSortIcon("stack")}</span>
</div>
</th>
<th
className="text-left font-medium p-1 w-1/6 cursor-pointer hover:bg-muted/50 transition-colors select-none"
onClick={() => handleSort("health")}
>
<div className="flex items-center gap-1">
Health
<span className="text-xs opacity-60">{getSortIcon("health")}</span>
</div>
</th>
<th
className="text-left font-medium p-1 w-1/6 cursor-pointer hover:bg-muted/50 transition-colors select-none"
onClick={() => handleSort("status")}
>
<div className="flex items-center gap-1">
Status
<span className="text-xs opacity-60">{getSortIcon("status")}</span>
</div>
</th>
<th
className="text-left font-medium p-1 w-1/6 cursor-pointer hover:bg-muted/50 transition-colors select-none"
onClick={() => handleSort("uptime")}
>
<div className="flex items-center gap-1">
Uptime
<span className="text-xs opacity-60">{getSortIcon("uptime")}</span>
</div>
</th>
</tr>
</thead>
<tbody>
{currentContainers.map((container) => (
<tr key={container.name} className="border-b border-border/30 hover:bg-muted/30">
<td className="p-1 w-1/6 font-mono text-xs text-muted-foreground" title={container.idShort}>
{container.idShort}
</td>
<td className="p-1 w-1/4">
<div className="flex items-center gap-1.5">
<div className="w-2.5 h-2.5 rounded-full flex-shrink-0" style={{ backgroundColor: container.color }} />
<span className="text-xs truncate">{container.name}</span>
</div>
</td>
<td className="p-1 w-1/6">
<span className="text-xs text-muted-foreground truncate" title={container.stack}>
{container.stack}
</span>
</td>
<td className="p-1 w-1/6">
<Badge
className={cn("px-1.5 py-0.5 text-xs font-medium whitespace-nowrap border-0", {
"bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400":
container.healthValue === 3,
"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400":
container.healthValue === 2,
"bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400": container.healthValue === 1,
"bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400": container.healthValue === 0,
})}
>
{container.health}
</Badge>
</td>
<td className="p-1 w-1/6">
<Badge
className={cn("px-1.5 py-0.5 text-xs font-medium whitespace-nowrap border-0", {
"bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400":
container.status?.toLowerCase() === "running",
"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400":
container.status?.toLowerCase() === "paused" || container.status?.toLowerCase() === "restarting",
"bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400":
container.status?.toLowerCase().includes("exited") ||
container.status?.toLowerCase().includes("dead") ||
container.status?.toLowerCase().includes("removing"),
"bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400":
!container.status || container.status?.toLowerCase() === "created",
})}
title={container.status}
>
{container.status}
</Badge>
</td>
<td className="p-1 w-1/6 text-xs whitespace-nowrap">{container.uptime}</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
{/* Pagination Controls */}
{totalPages > 1 && (
<div className="flex items-center justify-between px-2 py-2 border-t border-border bg-muted/20">
<div className="text-xs text-muted-foreground">
Showing {startIndex + 1}-{Math.min(endIndex, sortedContainerData.length)} of{" "}
{sortedContainerData.length} containers
</div>
<div className="flex items-center gap-1">
<button
onClick={() => setCurrentPage((prev) => Math.max(1, prev - 1))}
disabled={currentPage === 1}
className={cn(
"px-2 py-1 text-xs rounded border transition-colors",
"hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed",
"border-border hover:border-border/60"
)}
>
Previous
</button>
{Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => (
<button
key={page}
onClick={() => setCurrentPage(page)}
className={cn(
"px-2 py-1 text-xs rounded border transition-colors min-w-[28px]",
page === currentPage
? "bg-primary text-primary-foreground border-primary"
: "border-border hover:bg-muted hover:border-border/60"
)}
>
{page}
</button>
))}
<button
onClick={() => setCurrentPage((prev) => Math.min(totalPages, prev + 1))}
disabled={currentPage === totalPages}
className={cn(
"px-2 py-1 text-xs rounded border transition-colors",
"hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed",
"border-border hover:border-border/60"
)}
>
Next
</button>
</div>
</div>
)}
</div>
)
})

View File

@@ -0,0 +1,257 @@
"use client"
import * as React from "react"
import {
ColumnDef,
flexRender,
getCoreRowModel,
getPaginationRowModel,
getSortedRowModel,
SortingState,
useReactTable,
VisibilityState,
} from "@tanstack/react-table"
import { ArrowUpDown } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"
import { Badge } from "@/components/ui/badge"
import { cn } from "@/lib/utils"
export type DockerHealthRow = {
id: string
name: string
stack: string
health: string
healthValue: number
status: string
uptime: string
color: string
}
type Props = {
data: DockerHealthRow[]
}
export function ContainerHealthTable({ data }: Props) {
const [sorting, setSorting] = React.useState<SortingState>([])
const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})
const [rowSelection, setRowSelection] = React.useState({})
const columns = React.useMemo<ColumnDef<DockerHealthRow>[]>(() => [
{
accessorKey: "id",
header: ({ column }) => (
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
ID
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
),
cell: ({ row }) => (
<span className="font-mono text-xs text-muted-foreground" title={row.original.id}>{row.original.id}</span>
),
},
{
accessorKey: "name",
header: ({ column }) => (
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Container
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
),
cell: ({ row }) => (
<div className="flex items-center gap-1.5">
<div className="w-2.5 h-2.5 rounded-full flex-shrink-0" style={{ backgroundColor: row.original.color }} />
<span className="text-xs truncate">{row.original.name}</span>
</div>
),
},
{
accessorKey: "stack",
header: ({ column }) => (
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Stack
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
),
cell: ({ row }) => (
<span className="text-xs text-muted-foreground truncate" title={row.original.stack}>{row.original.stack}</span>
),
},
{
accessorKey: "health",
header: ({ column }) => (
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Health
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
),
cell: ({ row }) => (
<Badge className={cn(
"px-1.5 py-0.5 text-xs font-medium whitespace-nowrap border-0",
{
"bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400": row.original.healthValue === 3,
"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400": row.original.healthValue === 2,
"bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400": row.original.healthValue === 1,
"bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400": row.original.healthValue === 0,
}
)}>{row.original.health}</Badge>
),
},
{
accessorKey: "status",
header: ({ column }) => (
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Status
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
),
cell: ({ row }) => (
<Badge className={cn(
"px-1.5 py-0.5 text-xs font-medium whitespace-nowrap border-0",
{
"bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400": row.original.status?.toLowerCase() === "running",
"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400": row.original.status?.toLowerCase() === "paused" || row.original.status?.toLowerCase() === "restarting",
"bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400":
row.original.status?.toLowerCase().includes("exited") ||
row.original.status?.toLowerCase().includes("dead") ||
row.original.status?.toLowerCase().includes("removing"),
"bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400": !row.original.status || row.original.status?.toLowerCase() === "created",
}
)} title={row.original.status}>{row.original.status}</Badge>
),
},
{
accessorKey: "uptime",
header: ({ column }) => (
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Uptime
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
),
cell: ({ row }) => (
<span className="text-xs whitespace-nowrap">{row.original.uptime}</span>
),
},
], [])
const table = useReactTable({
data,
columns,
onSortingChange: setSorting,
getCoreRowModel: getCoreRowModel(),
getPaginationRowModel: getPaginationRowModel(),
getSortedRowModel: getSortedRowModel(),
onColumnVisibilityChange: setColumnVisibility,
onRowSelectionChange: setRowSelection,
state: {
sorting,
columnVisibility,
rowSelection,
},
})
React.useEffect(() => {
table.setPageSize(5)
}, [table])
return (
<div className="w-full">
<div className="rounded-md border">
<Table>
<TableHeader>
{table.getHeaderGroups().map((headerGroup) => (
<TableRow key={headerGroup.id}>
{headerGroup.headers.map((header) => {
return (
<TableHead key={header.id}>
{header.isPlaceholder
? null
: flexRender(
header.column.columnDef.header,
header.getContext()
)}
</TableHead>
)
})}
</TableRow>
))}
</TableHeader>
<TableBody>
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row) => (
<TableRow
key={row.id}
data-state={row.getIsSelected() && "selected"}
>
{row.getVisibleCells().map((cell) => (
<TableCell key={cell.id}>
{flexRender(
cell.column.columnDef.cell,
cell.getContext()
)}
</TableCell>
))}
</TableRow>
))
) : (
<TableRow>
<TableCell
colSpan={columns.length}
className="h-24 text-center"
>
No results.
</TableCell>
</TableRow>
)}
</TableBody>
</Table>
</div>
<div className="flex items-center justify-end space-x-2 py-1">
<div className="space-x-2">
<Button
variant="outline"
size="sm"
onClick={() => table.previousPage()}
disabled={!table.getCanPreviousPage()}
>
Previous
</Button>
<Button
variant="outline"
size="sm"
onClick={() => table.nextPage()}
disabled={!table.getCanNextPage()}
>
Next
</Button>
</div>
</div>
</div>
)
}

View File

@@ -6,10 +6,12 @@ import { timeTicks } from "d3-time"
import { import {
ChevronRightSquareIcon, ChevronRightSquareIcon,
ClockArrowUp, ClockArrowUp,
Container as ContainerIcon,
CpuIcon, CpuIcon,
GlobeIcon, GlobeIcon,
LayoutGridIcon, LayoutGridIcon,
MonitorIcon, MonitorIcon,
Server as ServerIcon,
XIcon, XIcon,
} from "lucide-react" } from "lucide-react"
import { subscribeKeys } from "nanostores" import { subscribeKeys } from "nanostores"
@@ -30,9 +32,11 @@ import {
$allSystemsById, $allSystemsById,
$allSystemsByName, $allSystemsByName,
$chartTime, $chartTime,
$containerColors,
$containerFilter, $containerFilter,
$direction, $direction,
$maxValues, $maxValues,
$stackFilter,
$systems, $systems,
$temperatureFilter, $temperatureFilter,
$userSettings, $userSettings,
@@ -69,6 +73,7 @@ import { AppleIcon, ChartAverage, ChartMax, FreeBsdIcon, Rows, TuxIcon, WebSocke
import { Input } from "../ui/input" import { Input } from "../ui/input"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select"
import { Separator } from "../ui/separator" import { Separator } from "../ui/separator"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/tooltip" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/tooltip"
import NetworkSheet from "./system/network-sheet" import NetworkSheet from "./system/network-sheet"
import LineChartDefault from "../charts/line-chart" import LineChartDefault from "../charts/line-chart"
@@ -396,17 +401,74 @@ export default memo(function SystemDetail({ id }: { id: string }) {
}, [system, t]) }, [system, t])
/** Space for tooltip if more than 12 containers */ /** Space for tooltip if more than 12 containers */
// biome-ignore lint/correctness/useExhaustiveDependencies: filters accessed via .get()
useEffect(() => { useEffect(() => {
if (!netCardRef.current || !containerData.length) { const calculateSpacing = () => {
setBottomSpacing(0) if (!netCardRef.current || !containerData.length) {
return setBottomSpacing(0)
return
}
// Count visible containers after applying filters
const containerFilter = $containerFilter.get()
const stackFilter = $stackFilter.get()
let visibleCount = 0
if (containerData[0]) {
for (const [key, value] of Object.entries(containerData[0])) {
if (key === "created") continue
// Apply container filter
if (containerFilter.length > 0 && !containerFilter.includes(key)) {
continue
}
// Apply stack filter
if (stackFilter.length > 0 && typeof value === "object" && value) {
const stackName = (value as any).p || "—"
if (!stackFilter.includes(stackName)) {
continue
}
}
visibleCount++
}
}
// Only add spacing if there are more than 12 visible containers
if (visibleCount > 12) {
const tooltipHeight = (visibleCount - 11) * 17.8 - 40
const wrapperEl = chartWrapRef.current as HTMLDivElement
const wrapperRect = wrapperEl.getBoundingClientRect()
const chartRect = netCardRef.current.getBoundingClientRect()
const distanceToBottom = wrapperRect.bottom - chartRect.bottom
const spacing = Math.max(0, tooltipHeight - distanceToBottom)
setBottomSpacing(spacing)
} else {
setBottomSpacing(0)
}
}
// Initial calculation
calculateSpacing()
// Subscribe to filter changes to recalculate
// Use requestAnimationFrame to wait for chart re-render, then add small delay for layout
const unsubContainer = $containerFilter.subscribe(() => {
requestAnimationFrame(() => {
setTimeout(calculateSpacing, 100)
})
})
const unsubStack = $stackFilter.subscribe(() => {
requestAnimationFrame(() => {
setTimeout(calculateSpacing, 100)
})
})
return () => {
unsubContainer()
unsubStack()
} }
const tooltipHeight = (Object.keys(containerData[0]).length - 11) * 17.8 - 40
const wrapperEl = chartWrapRef.current as HTMLDivElement
const wrapperRect = wrapperEl.getBoundingClientRect()
const chartRect = netCardRef.current.getBoundingClientRect()
const distanceToBottom = wrapperRect.bottom - chartRect.bottom
setBottomSpacing(tooltipHeight - distanceToBottom)
}, [containerData]) }, [containerData])
// keyboard navigation between systems // keyboard navigation between systems
@@ -454,7 +516,14 @@ export default memo(function SystemDetail({ id }: { id: string }) {
const maxValSelect = isLongerChart ? <SelectAvgMax max={maxValues} /> : null const maxValSelect = isLongerChart ? <SelectAvgMax max={maxValues} /> : null
const showMax = maxValues && isLongerChart const showMax = maxValues && isLongerChart
const containerFilterBar = containerData.length ? <FilterBar /> : null const containerFilterBar = containerData.length ? <FilterBar containerData={containerData} /> : null
const stackFilterBar = containerData.length ? <FilterBar containerData={containerData} store={$stackFilter} mode="stack" /> : null
const combinedFilterBar = containerData.length ? (
<div className="flex gap-2">
<FilterBar containerData={containerData} />
<FilterBar containerData={containerData} store={$stackFilter} mode="stack" />
</div>
) : null
const dataEmpty = !chartLoading && chartData.systemStats.length === 0 const dataEmpty = !chartLoading && chartData.systemStats.length === 0
const lastGpuVals = Object.values(systemStats.at(-1)?.stats.g ?? {}) const lastGpuVals = Object.values(systemStats.at(-1)?.stats.g ?? {})
@@ -569,6 +638,22 @@ export default memo(function SystemDetail({ id }: { id: string }) {
</div> </div>
</Card> </Card>
{/* Tabbed interface for system and Docker stats */}
<Tabs defaultValue="system" className="w-full">
<TabsList className="grid w-full grid-cols-2 mb-4">
<TabsTrigger value="system" className="flex items-center gap-2">
<ServerIcon className="h-4 w-4" />
{t`System Stats`}
</TabsTrigger>
<TabsTrigger value="docker" className="flex items-center gap-2">
<ContainerIcon className="h-4 w-4" />
{dockerOrPodman(t`Docker Stats`, system)}
</TabsTrigger>
</TabsList>
{/* System Stats Tab */}
<TabsContent value="system" className="space-y-4">
{/* main charts */} {/* main charts */}
<div className="grid xl:grid-cols-2 gap-4"> <div className="grid xl:grid-cols-2 gap-4">
<ChartCard <ChartCard
@@ -594,23 +679,6 @@ export default memo(function SystemDetail({ id }: { id: string }) {
/> />
</ChartCard> </ChartCard>
{containerFilterBar && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={dockerOrPodman(t`Docker CPU Usage`, system)}
description={t`Average CPU utilization of containers`}
cornerEl={containerFilterBar}
>
<ContainerChart
chartData={chartData}
dataKey="c"
chartType={ChartType.CPU}
chartConfig={containerChartConfigs.cpu}
/>
</ChartCard>
)}
<ChartCard <ChartCard
empty={dataEmpty} empty={dataEmpty}
grid={grid} grid={grid}
@@ -621,23 +689,6 @@ export default memo(function SystemDetail({ id }: { id: string }) {
<MemChart chartData={chartData} showMax={showMax} /> <MemChart chartData={chartData} showMax={showMax} />
</ChartCard> </ChartCard>
{containerFilterBar && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={dockerOrPodman(t`Docker Memory Usage`, system)}
description={dockerOrPodman(t`Memory usage of docker containers`, system)}
cornerEl={containerFilterBar}
>
<ContainerChart
chartData={chartData}
dataKey="m"
chartType={ChartType.Memory}
chartConfig={containerChartConfigs.memory}
/>
</ChartCard>
)}
<ChartCard empty={dataEmpty} grid={grid} title={t`Disk Usage`} description={t`Usage of root partition`}> <ChartCard empty={dataEmpty} grid={grid} title={t`Disk Usage`} description={t`Usage of root partition`}>
<DiskChart chartData={chartData} dataKey="stats.du" diskSize={systemStats.at(-1)?.stats.d ?? NaN} /> <DiskChart chartData={chartData} dataKey="stats.du" diskSize={systemStats.at(-1)?.stats.d ?? NaN} />
</ChartCard> </ChartCard>
@@ -740,29 +791,6 @@ export default memo(function SystemDetail({ id }: { id: string }) {
/> />
</ChartCard> </ChartCard>
{containerFilterBar && containerData.length > 0 && (
<div
ref={netCardRef}
className={cn({
"col-span-full": !grid,
})}
>
<ChartCard
empty={dataEmpty}
title={dockerOrPodman(t`Docker Network I/O`, system)}
description={dockerOrPodman(t`Network traffic of docker containers`, system)}
cornerEl={containerFilterBar}
>
<ContainerChart
chartData={chartData}
chartType={ChartType.Network}
dataKey="n"
chartConfig={containerChartConfigs.network}
/>
</ChartCard>
</div>
)}
{/* Swap chart */} {/* Swap chart */}
{(systemStats.at(-1)?.stats.su ?? 0) > 0 && ( {(systemStats.at(-1)?.stats.su ?? 0) > 0 && (
<ChartCard <ChartCard
@@ -987,6 +1015,125 @@ export default memo(function SystemDetail({ id }: { id: string }) {
})} })}
</div> </div>
)} )}
</TabsContent>
{/* Docker Stats Tab */}
<TabsContent value="docker" className="space-y-4">
{/* Centralized filter bar for all Docker charts */}
{combinedFilterBar && (
<div className="flex justify-end gap-2 pb-2">
{combinedFilterBar}
</div>
)}
<div className="grid xl:grid-cols-2 gap-4">
{containerFilterBar && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={dockerOrPodman(t`Docker CPU Usage`, system)}
description={t`Average CPU utilization of containers`}
>
<ContainerChart
chartData={chartData}
dataKey="c"
chartType={ChartType.CPU}
chartConfig={containerChartConfigs.cpu}
/>
</ChartCard>
)}
{containerFilterBar && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={dockerOrPodman(t`Docker Memory Usage`, system)}
description={dockerOrPodman(t`Memory usage of docker containers`, system)}
>
<ContainerChart
chartData={chartData}
dataKey="m"
chartType={ChartType.Memory}
chartConfig={containerChartConfigs.memory}
/>
</ChartCard>
)}
{containerFilterBar && containerData.length > 0 && (
<div
ref={netCardRef}
className={cn({
"col-span-full": !grid,
})}
>
<ChartCard
empty={dataEmpty}
title={dockerOrPodman(t`Docker Network I/O`, system)}
description={dockerOrPodman(t`Network traffic of docker containers`, system)}
>
<ContainerChart
chartData={chartData}
chartType={ChartType.Network}
dataKey="n"
chartConfig={containerChartConfigs.network}
/>
</ChartCard>
</div>
)}
{/* Docker Disk I/O chart */}
{containerFilterBar && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={dockerOrPodman(t`Docker Disk I/O`, system)}
description={dockerOrPodman(t`Disk read/write rates of docker containers`, system)}
>
<ContainerChart
chartData={chartData}
chartType={ChartType.DiskIO}
dataKey="d"
chartConfig={{}}
unit=" MB/s"
/>
</ChartCard>
)}
{/* Docker Volumes chart */}
{containerFilterBar && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={dockerOrPodman(t`Docker Volumes`, system)}
description={dockerOrPodman(t`Volume usage of docker containers`, system)}
>
<ContainerChart
chartData={chartData}
chartType={ChartType.Volume}
dataKey="v"
chartConfig={{}}
/>
</ChartCard>
)}
{/* Docker Health & Uptime chart */}
{containerFilterBar && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={dockerOrPodman(t`Docker Health & Uptime`, system)}
description={dockerOrPodman(t`Container health status and uptime`, system)}
>
<ContainerChart
chartData={chartData}
chartType={ChartType.HealthUptime}
dataKey="h"
chartConfig={{}}
/>
</ChartCard>
)}
</div>
</TabsContent>
</Tabs>
</div> </div>
{/* add space for tooltip if more than 12 containers */} {/* add space for tooltip if more than 12 containers */}
@@ -1017,38 +1164,121 @@ function GpuEnginesChart({ chartData }: { chartData: ChartData }) {
) )
} }
function FilterBar({ store = $containerFilter }: { store?: typeof $containerFilter }) { function FilterBar({
const containerFilter = useStore(store) store = $containerFilter,
containerData,
mode = "container"
}: {
store?: typeof $containerFilter
containerData?: ChartData["containerData"]
mode?: "container" | "stack"
}) {
const selected = useStore(store)
const { t } = useLingui() const { t } = useLingui()
const [open, setOpen] = useState(false)
const debouncedStoreSet = useMemo(() => debounce((value: string) => store.set(value), 80), [store]) // Extract all unique container names or stack names from current data
const availableItems = useMemo(() => {
const items = new Set<string>()
if (containerData) {
for (const dataPoint of containerData) {
if (dataPoint.created) {
for (const [key, value] of Object.entries(dataPoint)) {
if (key !== "created") {
if (mode === "stack" && typeof value === "object" && value) {
// Extract stack/project name
const stackName = (value as any).p || "—"
items.add(stackName)
} else if (mode === "container") {
// Add container name
items.add(key)
}
}
}
}
}
}
return Array.from(items).sort()
}, [containerData, mode])
const handleChange = useCallback( const toggleItem = useCallback((item: string) => {
(e: React.ChangeEvent<HTMLInputElement>) => debouncedStoreSet(e.target.value), const current = store.get()
[debouncedStoreSet] if (current.includes(item)) {
) store.set(current.filter(i => i !== item))
} else {
store.set([...current, item])
}
}, [store])
const clearAll = useCallback(() => {
store.set([])
setOpen(false)
}, [store])
// Close dropdown when clicking outside
useEffect(() => {
if (!open) return
const handleClickOutside = (e: MouseEvent) => {
const target = e.target as HTMLElement
if (!target.closest('[data-filter-dropdown]')) {
setOpen(false)
}
}
document.addEventListener('mousedown', handleClickOutside)
return () => document.removeEventListener('mousedown', handleClickOutside)
}, [open])
return ( return (
<> <div className="relative" data-filter-dropdown>
<Input <Button
placeholder={t`Filter...`} variant="outline"
className="ps-4 pe-8 w-full sm:w-44" size="sm"
onChange={handleChange} className="h-9 w-full sm:w-44 justify-between"
value={containerFilter} onClick={() => setOpen(!open)}
/> >
{containerFilter && ( <span className="truncate">
<Button {selected.length === 0
type="button" ? (mode === "stack" ? t`Filter stacks...` : t`Filter containers...`)
variant="ghost" : `${selected.length} selected`
size="icon" }
aria-label="Clear" </span>
className="absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100" <ChevronRightSquareIcon className="ml-2 h-4 w-4 opacity-50" />
onClick={() => store.set("")} </Button>
> {open && (
<XIcon className="h-4 w-4" /> <div className="absolute z-50 mt-1 w-full sm:w-64 bg-popover border rounded-md shadow-md">
</Button> <div className="p-2 space-y-1 max-h-64 overflow-y-auto">
{availableItems.length === 0 ? (
<div className="py-6 text-center text-sm text-muted-foreground">
{t`No items available`}
</div>
) : (
availableItems.map((item) => (
<div
key={item}
className="flex items-center space-x-2 rounded-sm px-2 py-1.5 cursor-pointer hover:bg-accent"
onClick={() => toggleItem(item)}
>
<input
type="checkbox"
checked={selected.includes(item)}
onChange={() => {}}
className="h-4 w-4"
/>
<span className="text-sm truncate flex-1">{item}</span>
</div>
))
)}
</div>
{selected.length > 0 && (
<div className="border-t p-2">
<Button variant="ghost" size="sm" className="w-full" onClick={clearAll}>
{t`Clear all`}
</Button>
</div>
)}
</div>
)} )}
</> </div>
) )
} }

View File

@@ -97,7 +97,7 @@ const ChartTooltipContent = React.forwardRef<
nameKey?: string nameKey?: string
labelKey?: string labelKey?: string
unit?: string unit?: string
filter?: string filter?: string | string[]
contentFormatter?: (item: any, key: string) => React.ReactNode | string contentFormatter?: (item: any, key: string) => React.ReactNode | string
truncate?: boolean truncate?: boolean
} }
@@ -129,13 +129,19 @@ const ChartTooltipContent = React.forwardRef<
React.useMemo(() => { React.useMemo(() => {
if (filter) { if (filter) {
payload = payload?.filter((item) => (item.name as string)?.toLowerCase().includes(filter.toLowerCase())) if (Array.isArray(filter)) {
// Array filter: only show items that are in the filter array
payload = payload?.filter((item) => filter.includes(item.name as string))
} else {
// String filter: show items that match the string (backward compatibility)
payload = payload?.filter((item) => (item.name as string)?.toLowerCase().includes(filter.toLowerCase()))
}
} }
if (itemSorter) { if (itemSorter) {
// @ts-expect-error // @ts-expect-error
payload?.sort(itemSorter) payload?.sort(itemSorter)
} }
}, [itemSorter, payload]) }, [itemSorter, payload, filter])
const tooltipLabel = React.useMemo(() => { const tooltipLabel = React.useMemo(() => {
if (hideLabel || !payload?.length) { if (hideLabel || !payload?.length) {

View File

@@ -12,6 +12,11 @@ export enum ChartType {
Disk, Disk,
Network, Network,
CPU, CPU,
Volume,
Health,
Uptime,
HealthUptime,
DiskIO,
} }
/** Unit of measurement */ /** Unit of measurement */

View File

@@ -53,7 +53,13 @@ export const $userSettings = map<UserSettings>({
listenKeys($userSettings, ["chartTime"], ({ chartTime }) => $chartTime.set(chartTime)) listenKeys($userSettings, ["chartTime"], ({ chartTime }) => $chartTime.set(chartTime))
/** Container chart filter */ /** Container chart filter */
export const $containerFilter = atom("") export const $containerFilter = atom<string[]>([])
/** Stack chart filter */
export const $stackFilter = atom<string[]>([])
/** Container color mapping for consistent colors across charts */
export const $containerColors = atom<Record<string, string>>({})
/** Temperature chart filter */ /** Temperature chart filter */
export const $temperatureFilter = atom("") export const $temperatureFilter = atom("")

View File

@@ -290,6 +290,45 @@ export function formatBytes(
export const chartMargin = { top: 12 } export const chartMargin = { top: 12 }
export function toFixedWithoutTrailingZeros(num: number, decimals: number): string {
const str = num.toFixed(decimals)
return str.replace(/\.?0+$/, "")
}
export const getSizeAndUnit = (n: number, isGigabytes = true) => {
const sizeInGB = isGigabytes ? n : n / 1_000
if (sizeInGB >= 1_000) {
return { v: sizeInGB / 1_000, u: " TB" }
}
if (sizeInGB >= 1) {
return { v: sizeInGB, u: " GB" }
}
return { v: isGigabytes ? sizeInGB * 1_000 : n, u: " MB" }
}
/**
* Generate a consistent fallback color for containers without assigned colors
* @param name Container name or identifier
* @returns HSL color string
*/
export function generateFallbackColor(name: string): string {
// Use a simple hash of the name to generate consistent colors
let hash = 0
for (let i = 0; i < name.length; i++) {
const char = name.charCodeAt(i)
hash = (hash << 5) - hash + char
hash = hash & hash // Convert to 32-bit integer
}
// Generate hue, saturation, and lightness from the hash
const hue = Math.abs(hash) % 360
const saturation = 65 + (Math.abs(hash) % 3) * 10 // 65%, 75%, 85%
const lightness = 50 + (Math.abs(hash) % 3) * 10 // 50%, 60%, 70%
return `hsl(${hue}, ${saturation}%, ${lightness}%)`
}
/** /**
* Retuns value of system host, truncating full path if socket. * Retuns value of system host, truncating full path if socket.
* @example * @example

View File

@@ -267,6 +267,10 @@ msgstr "تحقق من السجلات لمزيد من التفاصيل."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "تحقق من خدمة الإشعارات الخاصة بك" msgstr "تحقق من خدمة الإشعارات الخاصة بك"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "انقر على نظام لعرض مزيد من المعلومات." msgstr "انقر على نظام لعرض مزيد من المعلومات."
@@ -293,6 +297,10 @@ msgstr "تأكيد كلمة المرور"
msgid "Connection is down" msgid "Connection is down"
msgstr "الاتصال مقطوع" msgstr "الاتصال مقطوع"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "القرص"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "إدخال/إخراج القرص" msgstr "إدخال/إخراج القرص"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "وحدة القرص" msgstr "وحدة القرص"
@@ -433,6 +445,14 @@ msgstr "استخدام القرص لـ {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "استخدام المعالج للدوكر" msgstr "استخدام المعالج للدوكر"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "استخدام الذاكرة للدوكر" msgstr "استخدام الذاكرة للدوكر"
@@ -441,6 +461,14 @@ msgstr "استخدام الذاكرة للدوكر"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "إدخال/إخراج الشبكة للدوكر" msgstr "إدخال/إخراج الشبكة للدوكر"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "التوثيق" msgstr "التوثيق"
@@ -549,8 +577,15 @@ msgstr "فشل في إرسال إشعار الاختبار"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "فشل في تحديث التنبيه" msgstr "فشل في تحديث التنبيه"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "تصفية..." msgstr "تصفية..."
@@ -727,6 +762,10 @@ msgstr "حركة مرور الشبكة للواجهات العامة"
msgid "Network unit" msgid "Network unit"
msgstr "وحدة الشبكة" msgstr "وحدة الشبكة"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "لم يتم العثور على نتائج." msgstr "لم يتم العثور على نتائج."
@@ -991,6 +1030,10 @@ msgstr "النظام"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "متوسط تحميل النظام مع مرور الوقت" msgstr "متوسط تحميل النظام مع مرور الوقت"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "الأنظمة" msgstr "الأنظمة"
@@ -1203,6 +1246,10 @@ msgstr "عرض أحدث 200 تنبيه."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "الأعمدة الظاهرة" msgstr "الأعمدة الظاهرة"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "في انتظار وجود سجلات كافية للعرض" msgstr "في انتظار وجود سجلات كافية للعرض"

View File

@@ -267,6 +267,10 @@ msgstr "Провери log-овете за повече информация."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Провери услугата си за удостоверяване" msgstr "Провери услугата си за удостоверяване"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Кликнете върху система, за да видите повече информация." msgstr "Кликнете върху система, за да видите повече информация."
@@ -293,6 +297,10 @@ msgstr "Потвърди парола"
msgid "Connection is down" msgid "Connection is down"
msgstr "Връзката е прекъсната" msgstr "Връзката е прекъсната"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Диск"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Диск I/O" msgstr "Диск I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Единица за диск" msgstr "Единица за диск"
@@ -433,6 +445,14 @@ msgstr "Изполване на диск от {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Използване на процесор от docker" msgstr "Използване на процесор от docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Изполване на памет от docker" msgstr "Изполване на памет от docker"
@@ -441,6 +461,14 @@ msgstr "Изполване на памет от docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Мрежов I/O използван от docker" msgstr "Мрежов I/O използван от docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Документация" msgstr "Документация"
@@ -549,8 +577,15 @@ msgstr "Неуспешно изпрати тестова нотификация"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Неуспешно обнови тревога" msgstr "Неуспешно обнови тревога"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Филтрирай..." msgstr "Филтрирай..."
@@ -727,6 +762,10 @@ msgstr "Мрежов трафик на публични интерфейси"
msgid "Network unit" msgid "Network unit"
msgstr "Единица за измерване на скорост" msgstr "Единица за измерване на скорост"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Няма намерени резултати." msgstr "Няма намерени резултати."
@@ -991,6 +1030,10 @@ msgstr "Система"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Средно натоварване на системата във времето" msgstr "Средно натоварване на системата във времето"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Системи" msgstr "Системи"
@@ -1203,6 +1246,10 @@ msgstr "Прегледайте последните си 200 сигнала."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Видими полета" msgstr "Видими полета"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Изчаква се за достатъчно записи за показване" msgstr "Изчаква се за достатъчно записи за показване"

View File

@@ -267,6 +267,10 @@ msgstr "Pro více informací zkontrolujte logy."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Zkontrolujte službu upozornění" msgstr "Zkontrolujte službu upozornění"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Klikněte na systém pro zobrazení více informací." msgstr "Klikněte na systém pro zobrazení více informací."
@@ -293,6 +297,10 @@ msgstr "Potvrdit heslo"
msgid "Connection is down" msgid "Connection is down"
msgstr "Připojení je nedostupné" msgstr "Připojení je nedostupné"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Disková jednotka" msgstr "Disková jednotka"
@@ -433,6 +445,14 @@ msgstr "Využití disku {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Využití CPU Dockeru" msgstr "Využití CPU Dockeru"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Využití paměti Dockeru" msgstr "Využití paměti Dockeru"
@@ -441,6 +461,14 @@ msgstr "Využití paměti Dockeru"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Síťové I/O Dockeru" msgstr "Síťové I/O Dockeru"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentace" msgstr "Dokumentace"
@@ -549,8 +577,15 @@ msgstr "Nepodařilo se odeslat testovací oznámení"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Nepodařilo se aktualizovat upozornění" msgstr "Nepodařilo se aktualizovat upozornění"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtr..." msgstr "Filtr..."
@@ -727,6 +762,10 @@ msgstr "Síťový provoz veřejných rozhraní"
msgid "Network unit" msgid "Network unit"
msgstr "Síťová jednotka" msgstr "Síťová jednotka"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Nenalezeny žádné výskyty." msgstr "Nenalezeny žádné výskyty."
@@ -991,6 +1030,10 @@ msgstr "Systém"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Průměry zatížení systému v průběhu času" msgstr "Průměry zatížení systému v průběhu času"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systémy" msgstr "Systémy"
@@ -1203,6 +1246,10 @@ msgstr "Zobrazit vašich 200 nejnovějších upozornění."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Viditelné sloupce" msgstr "Viditelné sloupce"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Čeká se na dostatek záznamů k zobrazení" msgstr "Čeká se na dostatek záznamů k zobrazení"

View File

@@ -267,6 +267,10 @@ msgstr "Tjek logfiler for flere detaljer."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Tjek din notifikationstjeneste" msgstr "Tjek din notifikationstjeneste"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Bekræft adgangskode"
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Diskforbrug af {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU forbrug" msgstr "Docker CPU forbrug"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker Hukommelsesforbrug" msgstr "Docker Hukommelsesforbrug"
@@ -441,6 +461,14 @@ msgstr "Docker Hukommelsesforbrug"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker Netværk I/O" msgstr "Docker Netværk I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentation" msgstr "Dokumentation"
@@ -549,8 +577,15 @@ msgstr "Afsendelse af testnotifikation mislykkedes"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Kunne ikke opdatere alarm" msgstr "Kunne ikke opdatere alarm"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
@@ -727,6 +762,10 @@ msgstr "Netværkstrafik af offentlige grænseflader"
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Ingen resultater fundet." msgstr "Ingen resultater fundet."
@@ -991,6 +1030,10 @@ msgstr "System"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systemer" msgstr "Systemer"
@@ -1203,6 +1246,10 @@ msgstr ""
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Synlige felter" msgstr "Synlige felter"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Venter på nok posteringer til at vise" msgstr "Venter på nok posteringer til at vise"

View File

@@ -267,6 +267,10 @@ msgstr "Überprüfe die Protokolle für weitere Details."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Überprüfe deinen Benachrichtigungsdienst" msgstr "Überprüfe deinen Benachrichtigungsdienst"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Klicke auf ein System, um weitere Informationen zu sehen." msgstr "Klicke auf ein System, um weitere Informationen zu sehen."
@@ -293,6 +297,10 @@ msgstr "Passwort bestätigen"
msgid "Connection is down" msgid "Connection is down"
msgstr "Verbindung unterbrochen" msgstr "Verbindung unterbrochen"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Festplatte"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Festplatten-I/O" msgstr "Festplatten-I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Festplatteneinheit" msgstr "Festplatteneinheit"
@@ -433,6 +445,14 @@ msgstr "Festplattennutzung von {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker-CPU-Auslastung" msgstr "Docker-CPU-Auslastung"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker-Arbeitsspeichernutzung" msgstr "Docker-Arbeitsspeichernutzung"
@@ -441,6 +461,14 @@ msgstr "Docker-Arbeitsspeichernutzung"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker-Netzwerk-I/O" msgstr "Docker-Netzwerk-I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentation" msgstr "Dokumentation"
@@ -549,8 +577,15 @@ msgstr "Testbenachrichtigung konnte nicht gesendet werden"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Warnung konnte nicht aktualisiert werden" msgstr "Warnung konnte nicht aktualisiert werden"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
@@ -727,6 +762,10 @@ msgstr "Netzwerkverkehr der öffentlichen Schnittstellen"
msgid "Network unit" msgid "Network unit"
msgstr "Netzwerkeinheit" msgstr "Netzwerkeinheit"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Keine Ergebnisse gefunden." msgstr "Keine Ergebnisse gefunden."
@@ -991,6 +1030,10 @@ msgstr "System"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Systemlastdurchschnitt im Zeitverlauf" msgstr "Systemlastdurchschnitt im Zeitverlauf"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systeme" msgstr "Systeme"
@@ -1203,6 +1246,10 @@ msgstr "Sieh dir die neusten 200 Alarme an."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Sichtbare Spalten" msgstr "Sichtbare Spalten"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Warten auf genügend Datensätze zur Anzeige" msgstr "Warten auf genügend Datensätze zur Anzeige"

View File

@@ -262,6 +262,10 @@ msgstr "Check logs for more details."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Check your notification service" msgstr "Check your notification service"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr "Clear all"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Click on a system to view more information." msgstr "Click on a system to view more information."
@@ -288,6 +292,10 @@ msgstr "Confirm password"
msgid "Connection is down" msgid "Connection is down"
msgstr "Connection is down" msgstr "Connection is down"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr "Container health status and uptime"
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -410,6 +418,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr "Disk read/write rates of docker containers"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Disk unit" msgstr "Disk unit"
@@ -428,6 +440,14 @@ msgstr "Disk usage of {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU Usage" msgstr "Docker CPU Usage"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr "Docker Disk I/O"
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr "Docker Health & Uptime"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker Memory Usage" msgstr "Docker Memory Usage"
@@ -436,6 +456,14 @@ msgstr "Docker Memory Usage"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker Network I/O" msgstr "Docker Network I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr "Docker Stats"
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr "Docker Volumes"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Documentation" msgstr "Documentation"
@@ -544,8 +572,15 @@ msgstr "Failed to send test notification"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Failed to update alert" msgstr "Failed to update alert"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr "Filter containers..."
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr "Filter stacks..."
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
@@ -722,6 +757,10 @@ msgstr "Network traffic of public interfaces"
msgid "Network unit" msgid "Network unit"
msgstr "Network unit" msgstr "Network unit"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr "No items available"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "No results found." msgstr "No results found."
@@ -986,6 +1025,10 @@ msgstr "System"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "System load averages over time" msgstr "System load averages over time"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr "System Stats"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systems" msgstr "Systems"
@@ -1198,6 +1241,10 @@ msgstr "View your 200 most recent alerts."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Visible Fields" msgstr "Visible Fields"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr "Volume usage of docker containers"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Waiting for enough records to display" msgstr "Waiting for enough records to display"

View File

@@ -267,6 +267,10 @@ msgstr "Revise los registros para más detalles."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Verifique su servicio de notificaciones" msgstr "Verifique su servicio de notificaciones"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Haga clic en un sistema para ver más información." msgstr "Haga clic en un sistema para ver más información."
@@ -293,6 +297,10 @@ msgstr "Confirmar contraseña"
msgid "Connection is down" msgid "Connection is down"
msgstr "La conexión está caída" msgstr "La conexión está caída"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disco"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "E/S de Disco" msgstr "E/S de Disco"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Unidad de disco" msgstr "Unidad de disco"
@@ -433,6 +445,14 @@ msgstr "Uso de disco de {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Uso de CPU de Docker" msgstr "Uso de CPU de Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Uso de Memoria de Docker" msgstr "Uso de Memoria de Docker"
@@ -441,6 +461,14 @@ msgstr "Uso de Memoria de Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "E/S de Red de Docker" msgstr "E/S de Red de Docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Documentación" msgstr "Documentación"
@@ -549,8 +577,15 @@ msgstr "Error al enviar la notificación de prueba"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Error al actualizar la alerta" msgstr "Error al actualizar la alerta"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtrar..." msgstr "Filtrar..."
@@ -727,6 +762,10 @@ msgstr "Tráfico de red de interfaces públicas"
msgid "Network unit" msgid "Network unit"
msgstr "Unidad de red" msgstr "Unidad de red"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "No se encontraron resultados." msgstr "No se encontraron resultados."
@@ -991,6 +1030,10 @@ msgstr "Sistema"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Promedios de carga del sistema a lo largo del tiempo" msgstr "Promedios de carga del sistema a lo largo del tiempo"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Sistemas" msgstr "Sistemas"
@@ -1203,6 +1246,10 @@ msgstr "Ver sus 200 alertas más recientes."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Columnas visibles" msgstr "Columnas visibles"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Esperando suficientes registros para mostrar" msgstr "Esperando suficientes registros para mostrar"

View File

@@ -267,6 +267,10 @@ msgstr "برای جزئیات بیشتر، لاگ‌ها را بررسی کنی
msgid "Check your notification service" msgid "Check your notification service"
msgstr "سرویس اطلاع‌رسانی خود را بررسی کنید" msgstr "سرویس اطلاع‌رسانی خود را بررسی کنید"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "برای مشاهده اطلاعات بیشتر روی یک سیستم کلیک کنید." msgstr "برای مشاهده اطلاعات بیشتر روی یک سیستم کلیک کنید."
@@ -293,6 +297,10 @@ msgstr "تأیید رمز عبور"
msgid "Connection is down" msgid "Connection is down"
msgstr "اتصال قطع است" msgstr "اتصال قطع است"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "دیسک"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "ورودی/خروجی دیسک" msgstr "ورودی/خروجی دیسک"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "واحد دیسک" msgstr "واحد دیسک"
@@ -433,6 +445,14 @@ msgstr "میزان استفاده از دیسک {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "میزان استفاده از CPU داکر" msgstr "میزان استفاده از CPU داکر"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "میزان استفاده از حافظه داکر" msgstr "میزان استفاده از حافظه داکر"
@@ -441,6 +461,14 @@ msgstr "میزان استفاده از حافظه داکر"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "ورودی/خروجی شبکه داکر" msgstr "ورودی/خروجی شبکه داکر"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "مستندات" msgstr "مستندات"
@@ -549,8 +577,15 @@ msgstr "ارسال اعلان آزمایشی ناموفق بود"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "به‌روزرسانی هشدار ناموفق بود" msgstr "به‌روزرسانی هشدار ناموفق بود"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "فیلتر..." msgstr "فیلتر..."
@@ -727,6 +762,10 @@ msgstr "ترافیک شبکه رابط‌های عمومی"
msgid "Network unit" msgid "Network unit"
msgstr "واحد شبکه" msgstr "واحد شبکه"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "هیچ نتیجه‌ای یافت نشد." msgstr "هیچ نتیجه‌ای یافت نشد."
@@ -991,6 +1030,10 @@ msgstr "سیستم"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "میانگین بار سیستم در طول زمان" msgstr "میانگین بار سیستم در طول زمان"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "سیستم‌ها" msgstr "سیستم‌ها"
@@ -1203,6 +1246,10 @@ msgstr "۲۰۰ هشدار اخیر خود را مشاهده کنید."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "فیلدهای قابل مشاهده" msgstr "فیلدهای قابل مشاهده"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "در انتظار رکوردهای کافی برای نمایش" msgstr "در انتظار رکوردهای کافی برای نمایش"

View File

@@ -267,6 +267,10 @@ msgstr "Vérifiez les journaux pour plus de détails."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Vérifiez votre service de notification" msgstr "Vérifiez votre service de notification"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Confirmer le mot de passe"
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disque"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Entrée/Sortie disque" msgstr "Entrée/Sortie disque"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Utilisation du disque de {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Utilisation du CPU Docker" msgstr "Utilisation du CPU Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Utilisation de la mémoire Docker" msgstr "Utilisation de la mémoire Docker"
@@ -441,6 +461,14 @@ msgstr "Utilisation de la mémoire Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Entrée/Sortie réseau Docker" msgstr "Entrée/Sortie réseau Docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Documentation" msgstr "Documentation"
@@ -549,8 +577,15 @@ msgstr "Échec de l'envoi de la notification de test"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Échec de la mise à jour de l'alerte" msgstr "Échec de la mise à jour de l'alerte"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtrer..." msgstr "Filtrer..."
@@ -727,6 +762,10 @@ msgstr "Trafic réseau des interfaces publiques"
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Aucun résultat trouvé." msgstr "Aucun résultat trouvé."
@@ -991,6 +1030,10 @@ msgstr "Système"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systèmes" msgstr "Systèmes"
@@ -1203,6 +1246,10 @@ msgstr ""
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Colonnes visibles" msgstr "Colonnes visibles"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "En attente de suffisamment d'enregistrements à afficher" msgstr "En attente de suffisamment d'enregistrements à afficher"

View File

@@ -267,6 +267,10 @@ msgstr "Provjerite logove za više detalja."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Provjerite Vaš servis notifikacija" msgstr "Provjerite Vaš servis notifikacija"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Potvrdite lozinku"
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Iskorištenost diska od {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Iskorištenost Docker Procesora" msgstr "Iskorištenost Docker Procesora"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Iskorištenost Docker Memorije" msgstr "Iskorištenost Docker Memorije"
@@ -441,6 +461,14 @@ msgstr "Iskorištenost Docker Memorije"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker Mrežni I/O" msgstr "Docker Mrežni I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentacija" msgstr "Dokumentacija"
@@ -549,8 +577,15 @@ msgstr "Neuspješno slanje testne notifikacije"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Ažuriranje upozorenja nije uspjelo" msgstr "Ažuriranje upozorenja nije uspjelo"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtriraj..." msgstr "Filtriraj..."
@@ -727,6 +762,10 @@ msgstr "Mrežni promet javnih sučelja"
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Nema rezultata." msgstr "Nema rezultata."
@@ -991,6 +1030,10 @@ msgstr "Sistem"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Sistemi" msgstr "Sistemi"
@@ -1203,6 +1246,10 @@ msgstr ""
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Vidljiva polja" msgstr "Vidljiva polja"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Čeka se na više podataka prije prikaza" msgstr "Čeka se na više podataka prije prikaza"

View File

@@ -267,6 +267,10 @@ msgstr "Ellenőrizd a naplót a további részletekért."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Ellenőrizd az értesítési szolgáltatásodat" msgstr "Ellenőrizd az értesítési szolgáltatásodat"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Jelszó megerősítése"
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Lemez"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Lemez I/O" msgstr "Lemez I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Lemezhasználat a {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU használat" msgstr "Docker CPU használat"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker memória használat" msgstr "Docker memória használat"
@@ -441,6 +461,14 @@ msgstr "Docker memória használat"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker hálózat I/O" msgstr "Docker hálózat I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentáció" msgstr "Dokumentáció"
@@ -549,8 +577,15 @@ msgstr "Teszt értesítés elküldése sikertelen"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Nem sikerült frissíteni a riasztást" msgstr "Nem sikerült frissíteni a riasztást"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Szűrő..." msgstr "Szűrő..."
@@ -727,6 +762,10 @@ msgstr "Nyilvános interfészek hálózati forgalma"
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Nincs találat." msgstr "Nincs találat."
@@ -991,6 +1030,10 @@ msgstr "Rendszer"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Rendszer" msgstr "Rendszer"
@@ -1203,6 +1246,10 @@ msgstr ""
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Látható mezők" msgstr "Látható mezők"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Elegendő rekordra várva a megjelenítéshez" msgstr "Elegendő rekordra várva a megjelenítéshez"

View File

@@ -267,6 +267,10 @@ msgstr "Skoðaðu logga til að sjá meiri upplýsingar."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Athugaðu tilkynningaþjónustuna þína" msgstr "Athugaðu tilkynningaþjónustuna þína"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Staðfestu lykilorð"
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Diskur"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Diska notkun af {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU notkun" msgstr "Docker CPU notkun"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Minnisnotkun Docker" msgstr "Minnisnotkun Docker"
@@ -441,6 +461,14 @@ msgstr "Minnisnotkun Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Skjal" msgstr "Skjal"
@@ -549,8 +577,15 @@ msgstr "Villa í sendingu prufu skilaboða"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Mistókst að uppfæra tilkynningu" msgstr "Mistókst að uppfæra tilkynningu"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Sía..." msgstr "Sía..."
@@ -727,6 +762,10 @@ msgstr ""
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Engar niðurstöður fundust." msgstr "Engar niðurstöður fundust."
@@ -991,6 +1030,10 @@ msgstr "Kerfi"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Kerfi" msgstr "Kerfi"
@@ -1203,6 +1246,10 @@ msgstr ""
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Sjáanlegir reitir" msgstr "Sjáanlegir reitir"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Bíður eftir nægum upplýsingum til að sýna" msgstr "Bíður eftir nægum upplýsingum til að sýna"

View File

@@ -267,6 +267,10 @@ msgstr "Controlla i log per maggiori dettagli."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Controlla il tuo servizio di notifica" msgstr "Controlla il tuo servizio di notifica"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Clicca su un sistema per visualizzare più informazioni." msgstr "Clicca su un sistema per visualizzare più informazioni."
@@ -293,6 +297,10 @@ msgstr "Conferma password"
msgid "Connection is down" msgid "Connection is down"
msgstr "La connessione è interrotta" msgstr "La connessione è interrotta"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disco"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "I/O Disco" msgstr "I/O Disco"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Unità disco" msgstr "Unità disco"
@@ -433,6 +445,14 @@ msgstr "Utilizzo del disco di {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Utilizzo CPU Docker" msgstr "Utilizzo CPU Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Utilizzo Memoria Docker" msgstr "Utilizzo Memoria Docker"
@@ -441,6 +461,14 @@ msgstr "Utilizzo Memoria Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "I/O di Rete Docker" msgstr "I/O di Rete Docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Documentazione" msgstr "Documentazione"
@@ -549,8 +577,15 @@ msgstr "Invio della notifica di test fallito"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Aggiornamento dell'avviso fallito" msgstr "Aggiornamento dell'avviso fallito"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtra..." msgstr "Filtra..."
@@ -727,6 +762,10 @@ msgstr "Traffico di rete delle interfacce pubbliche"
msgid "Network unit" msgid "Network unit"
msgstr "Unità rete" msgstr "Unità rete"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Nessun risultato trovato." msgstr "Nessun risultato trovato."
@@ -991,6 +1030,10 @@ msgstr "Sistema"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Medie di carico del sistema nel tempo" msgstr "Medie di carico del sistema nel tempo"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Sistemi" msgstr "Sistemi"
@@ -1203,6 +1246,10 @@ msgstr "Visualizza i tuoi 200 avvisi più recenti."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Colonne visibili" msgstr "Colonne visibili"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "In attesa di abbastanza record da visualizzare" msgstr "In attesa di abbastanza record da visualizzare"

View File

@@ -267,6 +267,10 @@ msgstr "詳細についてはログを確認してください。"
msgid "Check your notification service" msgid "Check your notification service"
msgstr "通知サービスを確認してください" msgstr "通知サービスを確認してください"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "システムをクリックして詳細を表示します。" msgstr "システムをクリックして詳細を表示します。"
@@ -293,6 +297,10 @@ msgstr "パスワードを確認"
msgid "Connection is down" msgid "Connection is down"
msgstr "接続が切断されました" msgstr "接続が切断されました"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "ディスク"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "ディスクI/O" msgstr "ディスクI/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "ディスク単位" msgstr "ディスク単位"
@@ -433,6 +445,14 @@ msgstr "{extraFsName}のディスク使用率"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU使用率" msgstr "Docker CPU使用率"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Dockerメモリ使用率" msgstr "Dockerメモリ使用率"
@@ -441,6 +461,14 @@ msgstr "Dockerメモリ使用率"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "DockerネットワークI/O" msgstr "DockerネットワークI/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "ドキュメント" msgstr "ドキュメント"
@@ -549,8 +577,15 @@ msgstr "テスト通知の送信に失敗しました"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "アラートの更新に失敗しました" msgstr "アラートの更新に失敗しました"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "フィルター..." msgstr "フィルター..."
@@ -727,6 +762,10 @@ msgstr "パブリックインターフェースのネットワークトラフィ
msgid "Network unit" msgid "Network unit"
msgstr "ネットワーク単位" msgstr "ネットワーク単位"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "結果が見つかりませんでした。" msgstr "結果が見つかりませんでした。"
@@ -991,6 +1030,10 @@ msgstr "システム"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "システムの負荷平均の推移" msgstr "システムの負荷平均の推移"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "システム" msgstr "システム"
@@ -1203,6 +1246,10 @@ msgstr "直近200件のアラートを表示します。"
msgid "Visible Fields" msgid "Visible Fields"
msgstr "表示列" msgstr "表示列"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "表示するのに十分なレコードを待っています" msgstr "表示するのに十分なレコードを待っています"

View File

@@ -267,6 +267,10 @@ msgstr "자세한 내용은 로그를 확인하세요."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "알림 서비스를 확인하세요." msgstr "알림 서비스를 확인하세요."
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "더 많은 정보를 보려면 시스템을 클릭하세요." msgstr "더 많은 정보를 보려면 시스템을 클릭하세요."
@@ -293,6 +297,10 @@ msgstr "비밀번호 확인"
msgid "Connection is down" msgid "Connection is down"
msgstr "연결이 끊겼습니다" msgstr "연결이 끊겼습니다"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "디스크"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "디스크 I/O" msgstr "디스크 I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "디스크 단위" msgstr "디스크 단위"
@@ -433,6 +445,14 @@ msgstr "{extraFsName}의 디스크 사용량"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU 사용량" msgstr "Docker CPU 사용량"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker 메모리 사용량" msgstr "Docker 메모리 사용량"
@@ -441,6 +461,14 @@ msgstr "Docker 메모리 사용량"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker 네트워크 I/O" msgstr "Docker 네트워크 I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "문서" msgstr "문서"
@@ -549,8 +577,15 @@ msgstr "테스트 알림 전송 실패"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "알림 수정 실패" msgstr "알림 수정 실패"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "필터..." msgstr "필터..."
@@ -727,6 +762,10 @@ msgstr "공용 인터페이스의 네트워크 트래픽"
msgid "Network unit" msgid "Network unit"
msgstr "네트워크 단위" msgstr "네트워크 단위"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "결과가 없습니다." msgstr "결과가 없습니다."
@@ -991,6 +1030,10 @@ msgstr "시스템"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "시간에 따른 시스템 부하 평균" msgstr "시간에 따른 시스템 부하 평균"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "시스템" msgstr "시스템"
@@ -1203,6 +1246,10 @@ msgstr "최근 200개의 알림을 봅니다."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "표시할 열" msgstr "표시할 열"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "표시할 충분한 기록을 기다리는 중" msgstr "표시할 충분한 기록을 기다리는 중"

View File

@@ -267,6 +267,10 @@ msgstr "Controleer de logs voor meer details."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Controleer je meldingsservice" msgstr "Controleer je meldingsservice"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Klik op een systeem om meer informatie te bekijken." msgstr "Klik op een systeem om meer informatie te bekijken."
@@ -293,6 +297,10 @@ msgstr "Bevestig wachtwoord"
msgid "Connection is down" msgid "Connection is down"
msgstr "Verbinding is niet actief" msgstr "Verbinding is niet actief"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Schijf"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Schijf I/O" msgstr "Schijf I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Schijf eenheid" msgstr "Schijf eenheid"
@@ -433,6 +445,14 @@ msgstr "Schijfgebruik van {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU-gebruik" msgstr "Docker CPU-gebruik"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker geheugengebruik" msgstr "Docker geheugengebruik"
@@ -441,6 +461,14 @@ msgstr "Docker geheugengebruik"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker netwerk I/O" msgstr "Docker netwerk I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Documentatie" msgstr "Documentatie"
@@ -549,8 +577,15 @@ msgstr "Versturen test notificatie mislukt"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Bijwerken waarschuwing mislukt" msgstr "Bijwerken waarschuwing mislukt"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
@@ -727,6 +762,10 @@ msgstr "Netwerkverkeer van publieke interfaces"
msgid "Network unit" msgid "Network unit"
msgstr "Netwerk eenheid" msgstr "Netwerk eenheid"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Geen resultaten gevonden." msgstr "Geen resultaten gevonden."
@@ -991,6 +1030,10 @@ msgstr "Systeem"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Gemiddelde systeembelasting na verloop van tijd" msgstr "Gemiddelde systeembelasting na verloop van tijd"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systemen" msgstr "Systemen"
@@ -1203,6 +1246,10 @@ msgstr "Bekijk je 200 meest recente meldingen."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Zichtbare kolommen" msgstr "Zichtbare kolommen"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Wachtend op genoeg records om weer te geven" msgstr "Wachtend op genoeg records om weer te geven"

View File

@@ -267,6 +267,10 @@ msgstr "Sjekk loggene for flere detaljer."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Sjekk din meldingstjeneste" msgstr "Sjekk din meldingstjeneste"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Bekreft passord"
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Diskbruk av {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU-bruk" msgstr "Docker CPU-bruk"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker Minnebruk" msgstr "Docker Minnebruk"
@@ -441,6 +461,14 @@ msgstr "Docker Minnebruk"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker Nettverks-I/O" msgstr "Docker Nettverks-I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentasjon" msgstr "Dokumentasjon"
@@ -549,8 +577,15 @@ msgstr "Kunne ikke sende test-varsling"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Kunne ikke oppdatere alarm" msgstr "Kunne ikke oppdatere alarm"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
@@ -727,6 +762,10 @@ msgstr "Nettverkstrafikk av eksterne nettverksgrensesnitt"
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Ingen resultater funnet." msgstr "Ingen resultater funnet."
@@ -991,6 +1030,10 @@ msgstr "System"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Systembelastning gjennomsnitt over tid" msgstr "Systembelastning gjennomsnitt over tid"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systemer" msgstr "Systemer"
@@ -1203,6 +1246,10 @@ msgstr "Vis de 200 siste varslene."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Synlige Felter" msgstr "Synlige Felter"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Venter på nok registreringer til å vise" msgstr "Venter på nok registreringer til å vise"

View File

@@ -267,6 +267,10 @@ msgstr "Sprawdź logi, aby uzyskać więcej informacji."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Sprawdź swój serwis powiadomień" msgstr "Sprawdź swój serwis powiadomień"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Kliknij na system, aby zobaczyć więcej informacji." msgstr "Kliknij na system, aby zobaczyć więcej informacji."
@@ -293,6 +297,10 @@ msgstr "Potwierdź hasło"
msgid "Connection is down" msgid "Connection is down"
msgstr "Brak połączenia" msgstr "Brak połączenia"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Dysk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Dysk I/O" msgstr "Dysk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Jednostka dysku" msgstr "Jednostka dysku"
@@ -433,6 +445,14 @@ msgstr "Wykorzystanie dysku {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Wykorzystanie procesora przez Docker" msgstr "Wykorzystanie procesora przez Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Wykorzystanie pamięci przez Docker" msgstr "Wykorzystanie pamięci przez Docker"
@@ -441,6 +461,14 @@ msgstr "Wykorzystanie pamięci przez Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Sieć Docker I/O" msgstr "Sieć Docker I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentacja" msgstr "Dokumentacja"
@@ -549,8 +577,15 @@ msgstr "Nie udało się wysłać testowego powiadomienia"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Nie udało się zaktualizować powiadomienia" msgstr "Nie udało się zaktualizować powiadomienia"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtruj..." msgstr "Filtruj..."
@@ -727,6 +762,10 @@ msgstr "Ruch sieciowy interfejsów publicznych"
msgid "Network unit" msgid "Network unit"
msgstr "Jednostka sieciowa" msgstr "Jednostka sieciowa"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Brak wyników." msgstr "Brak wyników."
@@ -991,6 +1030,10 @@ msgstr "System"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Średnie obciążenie systemu w czasie" msgstr "Średnie obciążenie systemu w czasie"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Systemy" msgstr "Systemy"
@@ -1203,6 +1246,10 @@ msgstr "Wyświetl 200 ostatnich alertów."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Widoczne kolumny" msgstr "Widoczne kolumny"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Oczekiwanie na wystarczającą liczbę rekordów do wyświetlenia" msgstr "Oczekiwanie na wystarczającą liczbę rekordów do wyświetlenia"

View File

@@ -267,6 +267,10 @@ msgstr "Verifique os logs para mais detalhes."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Verifique seu serviço de notificação" msgstr "Verifique seu serviço de notificação"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Clique em um sistema para ver mais informações." msgstr "Clique em um sistema para ver mais informações."
@@ -293,6 +297,10 @@ msgstr "Confirmar senha"
msgid "Connection is down" msgid "Connection is down"
msgstr "A conexão está inativa" msgstr "A conexão está inativa"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disco"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "E/S de Disco" msgstr "E/S de Disco"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Unidade de disco" msgstr "Unidade de disco"
@@ -433,6 +445,14 @@ msgstr "Uso de disco de {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Uso de CPU do Docker" msgstr "Uso de CPU do Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Uso de Memória do Docker" msgstr "Uso de Memória do Docker"
@@ -441,6 +461,14 @@ msgstr "Uso de Memória do Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "E/S de Rede do Docker" msgstr "E/S de Rede do Docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Documentação" msgstr "Documentação"
@@ -549,8 +577,15 @@ msgstr "Falha ao enviar notificação de teste"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Falha ao atualizar alerta" msgstr "Falha ao atualizar alerta"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtrar..." msgstr "Filtrar..."
@@ -727,6 +762,10 @@ msgstr "Tráfego de rede das interfaces públicas"
msgid "Network unit" msgid "Network unit"
msgstr "Unidade de rede" msgstr "Unidade de rede"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Nenhum resultado encontrado." msgstr "Nenhum resultado encontrado."
@@ -991,6 +1030,10 @@ msgstr "Sistema"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Médias de carga do sistema ao longo do tempo" msgstr "Médias de carga do sistema ao longo do tempo"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Sistemas" msgstr "Sistemas"
@@ -1203,6 +1246,10 @@ msgstr "Veja os seus 200 alertas mais recentes."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Campos Visíveis" msgstr "Campos Visíveis"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Aguardando registros suficientes para exibir" msgstr "Aguardando registros suficientes para exibir"

View File

@@ -267,6 +267,10 @@ msgstr "Проверьте журналы для получения более
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Проверьте ваш сервис уведомлений" msgstr "Проверьте ваш сервис уведомлений"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Нажмите на систему для просмотра дополнительной информации." msgstr "Нажмите на систему для просмотра дополнительной информации."
@@ -293,6 +297,10 @@ msgstr "Подтвердите пароль"
msgid "Connection is down" msgid "Connection is down"
msgstr "Нет соединения" msgstr "Нет соединения"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Диск"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Дисковый ввод/вывод" msgstr "Дисковый ввод/вывод"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Единицы измерения температуры" msgstr "Единицы измерения температуры"
@@ -433,6 +445,14 @@ msgstr "Использование диска {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Использование CPU Docker" msgstr "Использование CPU Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Использование памяти Docker" msgstr "Использование памяти Docker"
@@ -441,6 +461,14 @@ msgstr "Использование памяти Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Сетевой ввод/вывод Docker" msgstr "Сетевой ввод/вывод Docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Документация" msgstr "Документация"
@@ -549,8 +577,15 @@ msgstr "Не удалось отправить тестовое уведомле
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Не удалось обновить оповещение" msgstr "Не удалось обновить оповещение"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Фильтр..." msgstr "Фильтр..."
@@ -727,6 +762,10 @@ msgstr "Сетевой трафик публичных интерфейсов"
msgid "Network unit" msgid "Network unit"
msgstr "Единицы измерения скорости сети" msgstr "Единицы измерения скорости сети"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Результаты не найдены." msgstr "Результаты не найдены."
@@ -991,6 +1030,10 @@ msgstr "Система"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Средняя загрузка системы за время" msgstr "Средняя загрузка системы за время"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Системы" msgstr "Системы"
@@ -1203,6 +1246,10 @@ msgstr "Просмотреть 200 последних оповещений."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Видимые столбцы" msgstr "Видимые столбцы"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Ожидание достаточного количества записей для отображения" msgstr "Ожидание достаточного количества записей для отображения"

View File

@@ -267,6 +267,10 @@ msgstr "Za več podrobnosti preverite dnevnike."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Preverite storitev obveščanja" msgstr "Preverite storitev obveščanja"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Potrdite geslo"
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Poraba diska za {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU poraba" msgstr "Docker CPU poraba"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker poraba spomina" msgstr "Docker poraba spomina"
@@ -441,6 +461,14 @@ msgstr "Docker poraba spomina"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker I/O mreže" msgstr "Docker I/O mreže"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentacija" msgstr "Dokumentacija"
@@ -549,8 +577,15 @@ msgstr "Pošiljanje testnega obvestila ni uspelo"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Opozorila ni bilo mogoče posodobiti" msgstr "Opozorila ni bilo mogoče posodobiti"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
@@ -727,6 +762,10 @@ msgstr "Omrežni promet javnih vmesnikov"
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Ni rezultatov." msgstr "Ni rezultatov."
@@ -991,6 +1030,10 @@ msgstr "Sistemsko"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Sistemi" msgstr "Sistemi"
@@ -1203,6 +1246,10 @@ msgstr ""
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Vidna polja" msgstr "Vidna polja"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Čakam na dovolj zapisov za prikaz" msgstr "Čakam na dovolj zapisov za prikaz"

View File

@@ -267,6 +267,10 @@ msgstr "Kontrollera loggarna för mer information."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Kontrollera din aviseringstjänst" msgstr "Kontrollera din aviseringstjänst"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "" msgstr ""
@@ -293,6 +297,10 @@ msgstr "Bekräfta lösenord"
msgid "Connection is down" msgid "Connection is down"
msgstr "Ej ansluten" msgstr "Ej ansluten"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr ""
@@ -433,6 +445,14 @@ msgstr "Diskanvändning av {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU-användning" msgstr "Docker CPU-användning"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker Minnesanvändning" msgstr "Docker Minnesanvändning"
@@ -441,6 +461,14 @@ msgstr "Docker Minnesanvändning"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker Nätverks-I/O" msgstr "Docker Nätverks-I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentation" msgstr "Dokumentation"
@@ -549,8 +577,15 @@ msgstr "Kunde inte skicka testavisering"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Kunde inte uppdatera larm" msgstr "Kunde inte uppdatera larm"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtrera..." msgstr "Filtrera..."
@@ -727,6 +762,10 @@ msgstr "Nätverkstrafik för publika gränssnitt"
msgid "Network unit" msgid "Network unit"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Inga resultat hittades." msgstr "Inga resultat hittades."
@@ -991,6 +1030,10 @@ msgstr "System"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr ""
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "System" msgstr "System"
@@ -1203,6 +1246,10 @@ msgstr ""
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Synliga fält" msgstr "Synliga fält"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Väntar på tillräckligt med poster att visa" msgstr "Väntar på tillräckligt med poster att visa"

View File

@@ -267,6 +267,10 @@ msgstr "Daha fazla ayrıntı için günlükleri kontrol edin."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Bildirim hizmetinizi kontrol edin" msgstr "Bildirim hizmetinizi kontrol edin"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Daha fazla bilgi görmek için bir sisteme tıklayın." msgstr "Daha fazla bilgi görmek için bir sisteme tıklayın."
@@ -293,6 +297,10 @@ msgstr "Şifreyi onayla"
msgid "Connection is down" msgid "Connection is down"
msgstr "Bağlantı kesildi" msgstr "Bağlantı kesildi"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Disk"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk G/Ç" msgstr "Disk G/Ç"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Disk birimi" msgstr "Disk birimi"
@@ -433,6 +445,14 @@ msgstr "{extraFsName} disk kullanımı"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU Kullanımı" msgstr "Docker CPU Kullanımı"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker Bellek Kullanımı" msgstr "Docker Bellek Kullanımı"
@@ -441,6 +461,14 @@ msgstr "Docker Bellek Kullanımı"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker Ağ G/Ç" msgstr "Docker Ağ G/Ç"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Dokümantasyon" msgstr "Dokümantasyon"
@@ -549,8 +577,15 @@ msgstr "Test bildirimi gönderilemedi"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Uyarı güncellenemedi" msgstr "Uyarı güncellenemedi"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Filtrele..." msgstr "Filtrele..."
@@ -727,6 +762,10 @@ msgstr "Genel arayüzlerin ağ trafiği"
msgid "Network unit" msgid "Network unit"
msgstr "Ağ birimi" msgstr "Ağ birimi"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Sonuç bulunamadı." msgstr "Sonuç bulunamadı."
@@ -991,6 +1030,10 @@ msgstr "Sistem"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Zaman içindeki sistem yükü ortalamaları" msgstr "Zaman içindeki sistem yükü ortalamaları"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Sistemler" msgstr "Sistemler"
@@ -1203,6 +1246,10 @@ msgstr "En son 200 uyarınızı görüntüleyin."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Görünür Alanlar" msgstr "Görünür Alanlar"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Görüntülemek için yeterli kayıt bekleniyor" msgstr "Görüntülemek için yeterli kayıt bekleniyor"

View File

@@ -267,6 +267,10 @@ msgstr "Перевірте журнали для отримання додатк
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Перевірте свій сервіс сповіщень" msgstr "Перевірте свій сервіс сповіщень"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Натисніть на систему, щоб переглянути більше інформації." msgstr "Натисніть на систему, щоб переглянути більше інформації."
@@ -293,6 +297,10 @@ msgstr "Підтвердьте пароль"
msgid "Connection is down" msgid "Connection is down"
msgstr "З'єднання розірвано" msgstr "З'єднання розірвано"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Диск"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Дисковий ввід/вивід" msgstr "Дисковий ввід/вивід"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Одиниця виміру диска" msgstr "Одиниця виміру диска"
@@ -433,6 +445,14 @@ msgstr "Використання диска {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Використання ЦП Docker" msgstr "Використання ЦП Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Використання пам'яті Docker" msgstr "Використання пам'яті Docker"
@@ -441,6 +461,14 @@ msgstr "Використання пам'яті Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Мережевий ввід/вивід Docker" msgstr "Мережевий ввід/вивід Docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Документація" msgstr "Документація"
@@ -549,8 +577,15 @@ msgstr "Не вдалося надіслати тестове сповіщенн
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Не вдалося оновити сповіщення" msgstr "Не вдалося оновити сповіщення"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Фільтр..." msgstr "Фільтр..."
@@ -727,6 +762,10 @@ msgstr "Мережевий трафік публічних інтерфейсі
msgid "Network unit" msgid "Network unit"
msgstr "Одиниця виміру мережі" msgstr "Одиниця виміру мережі"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Результатів не знайдено." msgstr "Результатів не знайдено."
@@ -991,6 +1030,10 @@ msgstr "Система"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Середнє навантаження системи з часом" msgstr "Середнє навантаження системи з часом"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Системи" msgstr "Системи"
@@ -1203,6 +1246,10 @@ msgstr "Переглянути 200 останніх сповіщень."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Видимі стовпці" msgstr "Видимі стовпці"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Очікування достатньої кількості записів для відображення" msgstr "Очікування достатньої кількості записів для відображення"

View File

@@ -267,6 +267,10 @@ msgstr "Kiểm tra nhật ký để biết thêm chi tiết."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Kiểm tra dịch vụ thông báo của bạn" msgstr "Kiểm tra dịch vụ thông báo của bạn"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "Nhấp vào hệ thống để xem thêm thông tin." msgstr "Nhấp vào hệ thống để xem thêm thông tin."
@@ -293,6 +297,10 @@ msgstr "Xác nhận mật khẩu"
msgid "Connection is down" msgid "Connection is down"
msgstr "Mất kết nối" msgstr "Mất kết nối"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "Đĩa"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Đĩa I/O" msgstr "Đĩa I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "Đơn vị đĩa" msgstr "Đơn vị đĩa"
@@ -433,6 +445,14 @@ msgstr "Sử dụng đĩa của {extraFsName}"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Sử dụng CPU Docker" msgstr "Sử dụng CPU Docker"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Sử dụng Bộ nhớ Docker" msgstr "Sử dụng Bộ nhớ Docker"
@@ -441,6 +461,14 @@ msgstr "Sử dụng Bộ nhớ Docker"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Mạng I/O Docker" msgstr "Mạng I/O Docker"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "Tài liệu" msgstr "Tài liệu"
@@ -549,8 +577,15 @@ msgstr "Gửi thông báo thử nghiệm thất bại"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Cập nhật cảnh báo thất bại" msgstr "Cập nhật cảnh báo thất bại"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "Lọc..." msgstr "Lọc..."
@@ -727,6 +762,10 @@ msgstr "Lưu lượng mạng của các giao diện công cộng"
msgid "Network unit" msgid "Network unit"
msgstr "Đơn vị mạng" msgstr "Đơn vị mạng"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "Không tìm thấy kết quả." msgstr "Không tìm thấy kết quả."
@@ -991,6 +1030,10 @@ msgstr "Hệ thống"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "Tải trung bình của hệ thống theo thời gian" msgstr "Tải trung bình của hệ thống theo thời gian"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "Các hệ thống" msgstr "Các hệ thống"
@@ -1203,6 +1246,10 @@ msgstr "Xem 200 cảnh báo gần đây nhất của bạn."
msgid "Visible Fields" msgid "Visible Fields"
msgstr "Các cột hiển thị" msgstr "Các cột hiển thị"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Đang chờ đủ bản ghi để hiển thị" msgstr "Đang chờ đủ bản ghi để hiển thị"

View File

@@ -267,6 +267,10 @@ msgstr "检查日志以获取更多详细信息。"
msgid "Check your notification service" msgid "Check your notification service"
msgstr "检查您的通知服务" msgstr "检查您的通知服务"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "点击系统查看更多信息。" msgstr "点击系统查看更多信息。"
@@ -293,6 +297,10 @@ msgstr "确认密码"
msgid "Connection is down" msgid "Connection is down"
msgstr "连接已断开" msgstr "连接已断开"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "磁盘"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "磁盘 I/O" msgstr "磁盘 I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "磁盘单位" msgstr "磁盘单位"
@@ -433,6 +445,14 @@ msgstr "{extraFsName}的磁盘使用"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU 使用" msgstr "Docker CPU 使用"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker 内存使用" msgstr "Docker 内存使用"
@@ -441,6 +461,14 @@ msgstr "Docker 内存使用"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker 网络 I/O" msgstr "Docker 网络 I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "文档" msgstr "文档"
@@ -549,8 +577,15 @@ msgstr "发送测试通知失败"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "更新警报失败" msgstr "更新警报失败"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "过滤..." msgstr "过滤..."
@@ -727,6 +762,10 @@ msgstr "公共接口的网络流量"
msgid "Network unit" msgid "Network unit"
msgstr "网络单位" msgstr "网络单位"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "未找到结果。" msgstr "未找到结果。"
@@ -991,6 +1030,10 @@ msgstr "系统"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "系统负载平均值随时间变化" msgstr "系统负载平均值随时间变化"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "系统" msgstr "系统"
@@ -1203,6 +1246,10 @@ msgstr "查看您最近的200个警报。"
msgid "Visible Fields" msgid "Visible Fields"
msgstr "可见列" msgstr "可见列"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "正在收集足够的数据来显示" msgstr "正在收集足够的数据来显示"

View File

@@ -267,6 +267,10 @@ msgstr "檢查日誌以取得更多資訊。"
msgid "Check your notification service" msgid "Check your notification service"
msgstr "檢查您的通知服務" msgstr "檢查您的通知服務"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "點擊系統以查看更多資訊。" msgstr "點擊系統以查看更多資訊。"
@@ -293,6 +297,10 @@ msgstr "確認密碼"
msgid "Connection is down" msgid "Connection is down"
msgstr "連線中斷" msgstr "連線中斷"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "磁碟"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "磁碟 I/O" msgstr "磁碟 I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "磁碟單位" msgstr "磁碟單位"
@@ -433,6 +445,14 @@ msgstr "{extraFsName} 的磁碟使用量"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU 使用率" msgstr "Docker CPU 使用率"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker 記憶體使用率" msgstr "Docker 記憶體使用率"
@@ -441,6 +461,14 @@ msgstr "Docker 記憶體使用率"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker 網絡 I/O" msgstr "Docker 網絡 I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "文件" msgstr "文件"
@@ -549,8 +577,15 @@ msgstr "發送測試通知失敗"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "更新警報失敗" msgstr "更新警報失敗"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "篩選..." msgstr "篩選..."
@@ -727,6 +762,10 @@ msgstr "公共接口的網絡流量"
msgid "Network unit" msgid "Network unit"
msgstr "網路單位" msgstr "網路單位"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "未找到結果。" msgstr "未找到結果。"
@@ -991,6 +1030,10 @@ msgstr "系統"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "系統平均負載隨時間變化" msgstr "系統平均負載隨時間變化"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "系統" msgstr "系統"
@@ -1203,6 +1246,10 @@ msgstr "檢視最近 200 則警報。"
msgid "Visible Fields" msgid "Visible Fields"
msgstr "可見欄位" msgstr "可見欄位"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "等待足夠的記錄以顯示" msgstr "等待足夠的記錄以顯示"

View File

@@ -267,6 +267,10 @@ msgstr "檢查系統記錄以取得更多資訊。"
msgid "Check your notification service" msgid "Check your notification service"
msgstr "檢查您的通知服務" msgstr "檢查您的通知服務"
#: src/components/routes/system.tsx
msgid "Clear all"
msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Click on a system to view more information." msgid "Click on a system to view more information."
msgstr "點擊系統以查看更多資訊。" msgstr "點擊系統以查看更多資訊。"
@@ -293,6 +297,10 @@ msgstr "確認密碼"
msgid "Connection is down" msgid "Connection is down"
msgstr "連線中斷" msgstr "連線中斷"
#: src/components/routes/system.tsx
msgid "Container health status and uptime"
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Continue" msgid "Continue"
@@ -415,6 +423,10 @@ msgstr "磁碟"
msgid "Disk I/O" msgid "Disk I/O"
msgstr "磁碟 I/O" msgstr "磁碟 I/O"
#: src/components/routes/system.tsx
msgid "Disk read/write rates of docker containers"
msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "磁碟單位" msgstr "磁碟單位"
@@ -433,6 +445,14 @@ msgstr "{extraFsName}的磁碟使用量"
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU 使用率" msgstr "Docker CPU 使用率"
#: src/components/routes/system.tsx
msgid "Docker Disk I/O"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Health & Uptime"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker 記憶體使用率" msgstr "Docker 記憶體使用率"
@@ -441,6 +461,14 @@ msgstr "Docker 記憶體使用率"
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker 網路 I/O" msgstr "Docker 網路 I/O"
#: src/components/routes/system.tsx
msgid "Docker Stats"
msgstr ""
#: src/components/routes/system.tsx
msgid "Docker Volumes"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
msgstr "文件" msgstr "文件"
@@ -549,8 +577,15 @@ msgstr "發送測試通知失敗"
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "更新警報失敗" msgstr "更新警報失敗"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Filter containers..."
msgstr ""
#: src/components/routes/system.tsx
msgid "Filter stacks..."
msgstr ""
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Filter..." msgid "Filter..."
msgstr "篩選..." msgstr "篩選..."
@@ -727,6 +762,10 @@ msgstr "公開介面的網路流量"
msgid "Network unit" msgid "Network unit"
msgstr "網路單位" msgstr "網路單位"
#: src/components/routes/system.tsx
msgid "No items available"
msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
msgstr "找不到結果。" msgstr "找不到結果。"
@@ -991,6 +1030,10 @@ msgstr "系統"
msgid "System load averages over time" msgid "System load averages over time"
msgstr "系統平均負載隨時間變化" msgstr "系統平均負載隨時間變化"
#: src/components/routes/system.tsx
msgid "System Stats"
msgstr ""
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
msgstr "系統" msgstr "系統"
@@ -1203,6 +1246,10 @@ msgstr "檢視最近 200 則警報。"
msgid "Visible Fields" msgid "Visible Fields"
msgstr "顯示欄位" msgstr "顯示欄位"
#: src/components/routes/system.tsx
msgid "Volume usage of docker containers"
msgstr ""
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "等待足夠的記錄以顯示" msgstr "等待足夠的記錄以顯示"

View File

@@ -168,6 +168,13 @@ export interface GPUData {
e?: Record<string, number> e?: Record<string, number>
} }
export interface VolumeData {
/** name */
n: string
/** size (mb) */
s: number
}
export interface ExtraFsStats { export interface ExtraFsStats {
/** disk size (gb) */ /** disk size (gb) */
d: number d: number
@@ -208,6 +215,18 @@ interface ContainerStats {
ns: number ns: number
// network received (mb) // network received (mb)
nr: number nr: number
// volumes (volume name to size in MB)
v?: Record<string, number>
// health status
h?: string
// status (running, stopped, etc.)
s?: string
// uptime in seconds
u?: number
// project name
p?: string
// container short id
idShort?: string
} }
export interface SystemStatsRecord extends RecordModel { export interface SystemStatsRecord extends RecordModel {