mirror of
https://github.com/henrygd/beszel.git
synced 2026-03-21 21:26:16 +01:00
Compare commits
1 Commits
ed50367f70
...
928-contai
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40165dca32 |
198
agent/docker.go
198
agent/docker.go
@@ -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 {
|
||||||
|
|||||||
@@ -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"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
156
internal/site/package-lock.json
generated
156
internal/site/package-lock.json
generated
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|||||||
257
internal/site/src/components/charts/container-health-table.tsx
Normal file
257
internal/site/src/components/charts/container-health-table.tsx
Normal 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>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ export enum ChartType {
|
|||||||
Disk,
|
Disk,
|
||||||
Network,
|
Network,
|
||||||
CPU,
|
CPU,
|
||||||
|
Volume,
|
||||||
|
Health,
|
||||||
|
Uptime,
|
||||||
|
HealthUptime,
|
||||||
|
DiskIO,
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Unit of measurement */
|
/** Unit of measurement */
|
||||||
|
|||||||
@@ -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("")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 "في انتظار وجود سجلات كافية للعرض"
|
||||||
|
|||||||
@@ -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 "Изчаква се за достатъчно записи за показване"
|
||||||
|
|||||||
@@ -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í"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 "در انتظار رکوردهای کافی برای نمایش"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 "表示するのに十分なレコードを待っています"
|
||||||
|
|||||||
@@ -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 "표시할 충분한 기록을 기다리는 중"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 "Ожидание достаточного количества записей для отображения"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 "Очікування достатньої кількості записів для відображення"
|
||||||
|
|||||||
@@ -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ị"
|
||||||
|
|||||||
@@ -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 "正在收集足够的数据来显示"
|
||||||
|
|||||||
@@ -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 "等待足夠的記錄以顯示"
|
||||||
|
|||||||
@@ -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 "等待足夠的記錄以顯示"
|
||||||
|
|||||||
19
internal/site/src/types.d.ts
vendored
19
internal/site/src/types.d.ts
vendored
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user