mirror of
https://github.com/henrygd/beszel.git
synced 2026-03-23 22:16:18 +01:00
Compare commits
11 Commits
928-contai
...
v0.14.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77ed90cb4a | ||
|
|
2fe3b1adb1 | ||
|
|
f56093d0f0 | ||
|
|
77dba42f17 | ||
|
|
e233a0b0dc | ||
|
|
18e4c88875 | ||
|
|
904a6038cd | ||
|
|
ae55b86493 | ||
|
|
5360f762e4 | ||
|
|
0d464787f2 | ||
|
|
24f72ef596 |
@@ -271,6 +271,8 @@ func (client *WebSocketClient) sendResponse(data any, requestID *uint32) error {
|
|||||||
response.SystemData = v
|
response.SystemData = v
|
||||||
case *common.FingerprintResponse:
|
case *common.FingerprintResponse:
|
||||||
response.Fingerprint = v
|
response.Fingerprint = v
|
||||||
|
case string:
|
||||||
|
response.String = &v
|
||||||
// case []byte:
|
// case []byte:
|
||||||
// response.RawBytes = v
|
// response.RawBytes = v
|
||||||
// case string:
|
// case string:
|
||||||
|
|||||||
344
agent/docker.go
344
agent/docker.go
@@ -3,8 +3,11 @@ package agent
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/binary"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -25,18 +28,10 @@ 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
|
||||||
|
// Number of log lines to request when fetching container logs
|
||||||
|
dockerLogsTail = 200
|
||||||
)
|
)
|
||||||
|
|
||||||
type dockerManager struct {
|
type dockerManager struct {
|
||||||
@@ -52,8 +47,6 @@ 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
|
||||||
@@ -65,11 +58,6 @@ 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
|
||||||
@@ -176,9 +164,8 @@ func (dm *dockerManager) getDockerStats(cacheTimeMs uint16) ([]*container.Stats,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// prepare network and disk trackers for next interval for this cache time
|
// prepare network trackers for next interval for this cache time
|
||||||
dm.cycleNetworkDeltasForCacheTime(cacheTimeMs)
|
dm.cycleNetworkDeltasForCacheTime(cacheTimeMs)
|
||||||
dm.cycleDiskDeltasForCacheTime(cacheTimeMs)
|
|
||||||
|
|
||||||
return stats, nil
|
return stats, nil
|
||||||
}
|
}
|
||||||
@@ -257,32 +244,6 @@ 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
|
||||||
@@ -328,50 +289,6 @@ 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 {
|
||||||
@@ -381,21 +298,54 @@ 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, read_delta, write_delta uint64, readTime time.Time) {
|
func updateContainerStatsValues(stats *container.Stats, cpuPct float64, usedMemory uint64, sent_delta, recv_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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseDockerStatus(status string) (string, container.DockerHealth) {
|
||||||
|
trimmed := strings.TrimSpace(status)
|
||||||
|
if trimmed == "" {
|
||||||
|
return "", container.DockerHealthNone
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove "About " from status
|
||||||
|
trimmed = strings.Replace(trimmed, "About ", "", 1)
|
||||||
|
|
||||||
|
openIdx := strings.LastIndex(trimmed, "(")
|
||||||
|
if openIdx == -1 || !strings.HasSuffix(trimmed, ")") {
|
||||||
|
return trimmed, container.DockerHealthNone
|
||||||
|
}
|
||||||
|
|
||||||
|
statusText := strings.TrimSpace(trimmed[:openIdx])
|
||||||
|
if statusText == "" {
|
||||||
|
statusText = trimmed
|
||||||
|
}
|
||||||
|
|
||||||
|
healthText := strings.ToLower(strings.TrimSpace(strings.TrimSuffix(trimmed[openIdx+1:], ")")))
|
||||||
|
// Some Docker statuses include a "health:" prefix inside the parentheses.
|
||||||
|
// Strip it so it maps correctly to the known health states.
|
||||||
|
if colonIdx := strings.IndexRune(healthText, ':'); colonIdx != -1 {
|
||||||
|
prefix := strings.TrimSpace(healthText[:colonIdx])
|
||||||
|
if prefix == "health" || prefix == "health status" {
|
||||||
|
healthText = strings.TrimSpace(healthText[colonIdx+1:])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if health, ok := container.DockerHealthStrings[healthText]; ok {
|
||||||
|
return statusText, health
|
||||||
|
}
|
||||||
|
|
||||||
|
return trimmed, container.DockerHealthNone
|
||||||
|
}
|
||||||
|
|
||||||
// Updates stats for individual container with cache-time-aware delta tracking
|
// Updates stats for individual container with cache-time-aware delta tracking
|
||||||
func (dm *dockerManager) updateContainerStats(ctr *container.ApiInfo, cacheTimeMs uint16) error {
|
func (dm *dockerManager) updateContainerStats(ctr *container.ApiInfo, cacheTimeMs uint16) error {
|
||||||
name := ctr.Names[0][1:]
|
name := ctr.Names[0][1:]
|
||||||
|
|
||||||
resp, err := dm.client.Get("http://localhost/containers/" + ctr.IdShort + "/stats?stream=0&one-shot=1")
|
resp, err := dm.client.Get(fmt.Sprintf("http://localhost/containers/%s/stats?stream=0&one-shot=1", ctr.IdShort))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -406,68 +356,21 @@ func (dm *dockerManager) updateContainerStats(ctr *container.ApiInfo, cacheTimeM
|
|||||||
// add empty values if they doesn't exist in map
|
// add empty values if they doesn't exist in map
|
||||||
stats, initialized := dm.containerStatsMap[ctr.IdShort]
|
stats, initialized := dm.containerStatsMap[ctr.IdShort]
|
||||||
if !initialized {
|
if !initialized {
|
||||||
stats = &container.Stats{Name: name}
|
stats = &container.Stats{Name: name, Id: ctr.IdShort}
|
||||||
dm.containerStatsMap[ctr.IdShort] = stats
|
dm.containerStatsMap[ctr.IdShort] = stats
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update name in case it changed
|
stats.Id = ctr.IdShort
|
||||||
stats.Name = name
|
|
||||||
|
|
||||||
// Set container metadata
|
statusText, health := parseDockerStatus(ctr.Status)
|
||||||
stats.IdShort = ctr.IdShort
|
stats.Status = statusText
|
||||||
stats.Status = ctr.State
|
stats.Health = health
|
||||||
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
|
||||||
@@ -517,11 +420,8 @@ 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, read_delta, write_delta, res.Read)
|
updateContainerStatsValues(stats, cpuPct, usedMemory, sent_delta, recv_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
|
||||||
|
|
||||||
@@ -606,7 +506,6 @@ 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),
|
||||||
@@ -614,8 +513,6 @@ 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
|
||||||
@@ -670,49 +567,6 @@ 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 {
|
||||||
@@ -740,3 +594,103 @@ func getDockerHost() string {
|
|||||||
}
|
}
|
||||||
return scheme + socks[0]
|
return scheme + socks[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getContainerInfo fetches the inspection data for a container
|
||||||
|
func (dm *dockerManager) getContainerInfo(ctx context.Context, containerID string) (string, error) {
|
||||||
|
endpoint := fmt.Sprintf("http://localhost/containers/%s/json", containerID)
|
||||||
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := dm.client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
body, _ := io.ReadAll(io.LimitReader(resp.Body, 1024))
|
||||||
|
return "", fmt.Errorf("container info request failed: %s: %s", resp.Status, strings.TrimSpace(string(body)))
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(data), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// getLogs fetches the logs for a container
|
||||||
|
func (dm *dockerManager) getLogs(ctx context.Context, containerID string) (string, error) {
|
||||||
|
endpoint := fmt.Sprintf("http://localhost/containers/%s/logs?stdout=1&stderr=1&tail=%d", containerID, dockerLogsTail)
|
||||||
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := dm.client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
body, _ := io.ReadAll(io.LimitReader(resp.Body, 1024))
|
||||||
|
return "", fmt.Errorf("logs request failed: %s: %s", resp.Status, strings.TrimSpace(string(body)))
|
||||||
|
}
|
||||||
|
|
||||||
|
var builder strings.Builder
|
||||||
|
if err := decodeDockerLogStream(resp.Body, &builder); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func decodeDockerLogStream(reader io.Reader, builder *strings.Builder) error {
|
||||||
|
const headerSize = 8
|
||||||
|
var header [headerSize]byte
|
||||||
|
buf := make([]byte, 0, dockerLogsTail*200)
|
||||||
|
|
||||||
|
for {
|
||||||
|
if _, err := io.ReadFull(reader, header[:]); err != nil {
|
||||||
|
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
frameLen := binary.BigEndian.Uint32(header[4:])
|
||||||
|
if frameLen == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
buf = allocateBuffer(buf, int(frameLen))
|
||||||
|
if _, err := io.ReadFull(reader, buf[:frameLen]); err != nil {
|
||||||
|
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
|
||||||
|
if len(buf) > 0 {
|
||||||
|
builder.Write(buf[:min(int(frameLen), len(buf))])
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
builder.Write(buf[:frameLen])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func allocateBuffer(current []byte, needed int) []byte {
|
||||||
|
if cap(current) >= needed {
|
||||||
|
return current[:needed]
|
||||||
|
}
|
||||||
|
return make([]byte, needed)
|
||||||
|
}
|
||||||
|
|
||||||
|
func min(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|||||||
@@ -858,6 +858,54 @@ func TestDeltaTrackerCacheTimeIsolation(t *testing.T) {
|
|||||||
assert.Equal(t, uint64(200000), recvTracker2.Delta(ctr.IdShort))
|
assert.Equal(t, uint64(200000), recvTracker2.Delta(ctr.IdShort))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseDockerStatus(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
input string
|
||||||
|
expectedStatus string
|
||||||
|
expectedHealth container.DockerHealth
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "status with About an removed",
|
||||||
|
input: "Up About an hour (healthy)",
|
||||||
|
expectedStatus: "Up an hour",
|
||||||
|
expectedHealth: container.DockerHealthHealthy,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "status without About an unchanged",
|
||||||
|
input: "Up 2 hours (healthy)",
|
||||||
|
expectedStatus: "Up 2 hours",
|
||||||
|
expectedHealth: container.DockerHealthHealthy,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "status with About and no parentheses",
|
||||||
|
input: "Up About an hour",
|
||||||
|
expectedStatus: "Up an hour",
|
||||||
|
expectedHealth: container.DockerHealthNone,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "status without parentheses",
|
||||||
|
input: "Created",
|
||||||
|
expectedStatus: "Created",
|
||||||
|
expectedHealth: container.DockerHealthNone,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "empty status",
|
||||||
|
input: "",
|
||||||
|
expectedStatus: "",
|
||||||
|
expectedHealth: container.DockerHealthNone,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
status, health := parseDockerStatus(tt.input)
|
||||||
|
assert.Equal(t, tt.expectedStatus, status)
|
||||||
|
assert.Equal(t, tt.expectedHealth, health)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestConstantsAndUtilityFunctions(t *testing.T) {
|
func TestConstantsAndUtilityFunctions(t *testing.T) {
|
||||||
// Test constants are properly defined
|
// Test constants are properly defined
|
||||||
assert.Equal(t, uint16(60000), defaultCacheTimeMs)
|
assert.Equal(t, uint16(60000), defaultCacheTimeMs)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package agent
|
package agent
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
@@ -43,6 +44,8 @@ func NewHandlerRegistry() *HandlerRegistry {
|
|||||||
|
|
||||||
registry.Register(common.GetData, &GetDataHandler{})
|
registry.Register(common.GetData, &GetDataHandler{})
|
||||||
registry.Register(common.CheckFingerprint, &CheckFingerprintHandler{})
|
registry.Register(common.CheckFingerprint, &CheckFingerprintHandler{})
|
||||||
|
registry.Register(common.GetContainerLogs, &GetContainerLogsHandler{})
|
||||||
|
registry.Register(common.GetContainerInfo, &GetContainerInfoHandler{})
|
||||||
|
|
||||||
return registry
|
return registry
|
||||||
}
|
}
|
||||||
@@ -99,3 +102,53 @@ type CheckFingerprintHandler struct{}
|
|||||||
func (h *CheckFingerprintHandler) Handle(hctx *HandlerContext) error {
|
func (h *CheckFingerprintHandler) Handle(hctx *HandlerContext) error {
|
||||||
return hctx.Client.handleAuthChallenge(hctx.Request, hctx.RequestID)
|
return hctx.Client.handleAuthChallenge(hctx.Request, hctx.RequestID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// GetContainerLogsHandler handles container log requests
|
||||||
|
type GetContainerLogsHandler struct{}
|
||||||
|
|
||||||
|
func (h *GetContainerLogsHandler) Handle(hctx *HandlerContext) error {
|
||||||
|
if hctx.Agent.dockerManager == nil {
|
||||||
|
return hctx.SendResponse("", hctx.RequestID)
|
||||||
|
}
|
||||||
|
|
||||||
|
var req common.ContainerLogsRequest
|
||||||
|
if err := cbor.Unmarshal(hctx.Request.Data, &req); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
logContent, err := hctx.Agent.dockerManager.getLogs(ctx, req.ContainerID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return hctx.SendResponse(logContent, hctx.RequestID)
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// GetContainerInfoHandler handles container info requests
|
||||||
|
type GetContainerInfoHandler struct{}
|
||||||
|
|
||||||
|
func (h *GetContainerInfoHandler) Handle(hctx *HandlerContext) error {
|
||||||
|
if hctx.Agent.dockerManager == nil {
|
||||||
|
return hctx.SendResponse("", hctx.RequestID)
|
||||||
|
}
|
||||||
|
|
||||||
|
var req common.ContainerInfoRequest
|
||||||
|
if err := cbor.Unmarshal(hctx.Request.Data, &req); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
info, err := hctx.Agent.dockerManager.getContainerInfo(ctx, req.ContainerID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return hctx.SendResponse(info, hctx.RequestID)
|
||||||
|
}
|
||||||
|
|||||||
@@ -168,6 +168,8 @@ func (a *Agent) handleSSHRequest(w io.Writer, req *common.HubRequest[cbor.RawMes
|
|||||||
switch v := data.(type) {
|
switch v := data.(type) {
|
||||||
case *system.CombinedData:
|
case *system.CombinedData:
|
||||||
response.SystemData = v
|
response.SystemData = v
|
||||||
|
case string:
|
||||||
|
response.String = &v
|
||||||
default:
|
default:
|
||||||
response.Error = fmt.Sprintf("unsupported response type: %T", data)
|
response.Error = fmt.Sprintf("unsupported response type: %T", data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import "github.com/blang/semver"
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// Version is the current version of the application.
|
// Version is the current version of the application.
|
||||||
Version = "0.13.2"
|
Version = "0.14.0"
|
||||||
// AppName is the name of the application.
|
// AppName is the name of the application.
|
||||||
AppName = "beszel"
|
AppName = "beszel"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ const (
|
|||||||
GetData WebSocketAction = iota
|
GetData WebSocketAction = iota
|
||||||
// Check the fingerprint of the agent
|
// Check the fingerprint of the agent
|
||||||
CheckFingerprint
|
CheckFingerprint
|
||||||
|
// Request container logs from agent
|
||||||
|
GetContainerLogs
|
||||||
|
// Request container info from agent
|
||||||
|
GetContainerInfo
|
||||||
// Add new actions here...
|
// Add new actions here...
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -27,6 +31,8 @@ type AgentResponse struct {
|
|||||||
SystemData *system.CombinedData `cbor:"1,keyasint,omitempty,omitzero"`
|
SystemData *system.CombinedData `cbor:"1,keyasint,omitempty,omitzero"`
|
||||||
Fingerprint *FingerprintResponse `cbor:"2,keyasint,omitempty,omitzero"`
|
Fingerprint *FingerprintResponse `cbor:"2,keyasint,omitempty,omitzero"`
|
||||||
Error string `cbor:"3,keyasint,omitempty,omitzero"`
|
Error string `cbor:"3,keyasint,omitempty,omitzero"`
|
||||||
|
String *string `cbor:"4,keyasint,omitempty,omitzero"`
|
||||||
|
// Logs *LogsPayload `cbor:"4,keyasint,omitempty,omitzero"`
|
||||||
// RawBytes []byte `cbor:"4,keyasint,omitempty,omitzero"`
|
// RawBytes []byte `cbor:"4,keyasint,omitempty,omitzero"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,3 +53,11 @@ type DataRequestOptions struct {
|
|||||||
CacheTimeMs uint16 `cbor:"0,keyasint"`
|
CacheTimeMs uint16 `cbor:"0,keyasint"`
|
||||||
// ResourceType uint8 `cbor:"1,keyasint,omitempty,omitzero"`
|
// ResourceType uint8 `cbor:"1,keyasint,omitempty,omitzero"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ContainerLogsRequest struct {
|
||||||
|
ContainerID string `cbor:"0,keyasint"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ContainerInfoRequest struct {
|
||||||
|
ContainerID string `cbor:"0,keyasint"`
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,29 +4,25 @@ 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
|
State string
|
||||||
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
|
|
||||||
// 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
|
||||||
@@ -36,7 +32,6 @@ 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 {
|
||||||
@@ -103,58 +98,41 @@ 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 {
|
type DockerHealth = uint8
|
||||||
Read uint64
|
|
||||||
Write uint64
|
const (
|
||||||
|
DockerHealthNone DockerHealth = iota
|
||||||
|
DockerHealthStarting
|
||||||
|
DockerHealthHealthy
|
||||||
|
DockerHealthUnhealthy
|
||||||
|
)
|
||||||
|
|
||||||
|
var DockerHealthStrings = map[string]DockerHealth{
|
||||||
|
"none": DockerHealthNone,
|
||||||
|
"starting": DockerHealthStarting,
|
||||||
|
"healthy": DockerHealthHealthy,
|
||||||
|
"unhealthy": DockerHealthUnhealthy,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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"`
|
||||||
DiskRead float64 `json:"dr" cbor:"5,keyasint"` // Disk read rate in MB/s
|
|
||||||
DiskWrite float64 `json:"dw" cbor:"6,keyasint"` // Disk write rate in MB/s
|
|
||||||
Volumes map[string]float64 `json:"v,omitempty" cbor:"7,keyasint"` // Volume name to size mapping
|
|
||||||
Health string `json:"h,omitempty" cbor:"8,keyasint"` // Container health status
|
|
||||||
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
|
Health DockerHealth `json:"-" cbor:"5,keyasint"`
|
||||||
type MountPoint struct {
|
Status string `json:"-" cbor:"6,keyasint"`
|
||||||
Type string `json:"Type"`
|
Id string `json:"-" cbor:"7,keyasint"`
|
||||||
Name string `json:"Name"`
|
// PrevCpu [2]uint64 `json:"-"`
|
||||||
Source string `json:"Source"`
|
CpuSystem uint64 `json:"-"`
|
||||||
Destination string `json:"Destination"`
|
CpuContainer uint64 `json:"-"`
|
||||||
Driver string `json:"Driver,omitempty"`
|
PrevNet prevNetStats `json:"-"`
|
||||||
Mode string `json:"Mode"`
|
PrevReadTime time.Time `json:"-"`
|
||||||
RW bool `json:"RW"`
|
|
||||||
Propagation string `json:"Propagation"`
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,7 +236,10 @@ func (h *Hub) registerApiRoutes(se *core.ServeEvent) error {
|
|||||||
// update / delete user alerts
|
// update / delete user alerts
|
||||||
apiAuth.POST("/user-alerts", alerts.UpsertUserAlerts)
|
apiAuth.POST("/user-alerts", alerts.UpsertUserAlerts)
|
||||||
apiAuth.DELETE("/user-alerts", alerts.DeleteUserAlerts)
|
apiAuth.DELETE("/user-alerts", alerts.DeleteUserAlerts)
|
||||||
|
// get container logs
|
||||||
|
apiAuth.GET("/containers/logs", h.getContainerLogs)
|
||||||
|
// get container info
|
||||||
|
apiAuth.GET("/containers/info", h.getContainerInfo)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,6 +270,41 @@ func (h *Hub) getUniversalToken(e *core.RequestEvent) error {
|
|||||||
return e.JSON(http.StatusOK, response)
|
return e.JSON(http.StatusOK, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// containerRequestHandler handles both container logs and info requests
|
||||||
|
func (h *Hub) containerRequestHandler(e *core.RequestEvent, fetchFunc func(*systems.System, string) (string, error), responseKey string) error {
|
||||||
|
systemID := e.Request.URL.Query().Get("system")
|
||||||
|
containerID := e.Request.URL.Query().Get("container")
|
||||||
|
|
||||||
|
if systemID == "" || containerID == "" {
|
||||||
|
return e.JSON(http.StatusBadRequest, map[string]string{"error": "system and container parameters are required"})
|
||||||
|
}
|
||||||
|
|
||||||
|
system, err := h.sm.GetSystem(systemID)
|
||||||
|
if err != nil {
|
||||||
|
return e.JSON(http.StatusNotFound, map[string]string{"error": "system not found"})
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := fetchFunc(system, containerID)
|
||||||
|
if err != nil {
|
||||||
|
return e.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.JSON(http.StatusOK, map[string]string{responseKey: data})
|
||||||
|
}
|
||||||
|
|
||||||
|
// getContainerLogs handles GET /api/beszel/containers/logs requests
|
||||||
|
func (h *Hub) getContainerLogs(e *core.RequestEvent) error {
|
||||||
|
return h.containerRequestHandler(e, func(system *systems.System, containerID string) (string, error) {
|
||||||
|
return system.FetchContainerLogsFromAgent(containerID)
|
||||||
|
}, "logs")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Hub) getContainerInfo(e *core.RequestEvent) error {
|
||||||
|
return h.containerRequestHandler(e, func(system *systems.System, containerID string) (string, error) {
|
||||||
|
return system.FetchContainerInfoFromAgent(containerID)
|
||||||
|
}, "info")
|
||||||
|
}
|
||||||
|
|
||||||
// generates key pair if it doesn't exist and returns signer
|
// generates key pair if it doesn't exist and returns signer
|
||||||
func (h *Hub) GetSSHKey(dataDir string) (ssh.Signer, error) {
|
func (h *Hub) GetSSHKey(dataDir string) (ssh.Signer, error) {
|
||||||
if h.signer != nil {
|
if h.signer != nil {
|
||||||
|
|||||||
@@ -449,6 +449,47 @@ func TestApiRoutesAuthentication(t *testing.T) {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "GET /containers/logs - no auth should fail",
|
||||||
|
Method: http.MethodGet,
|
||||||
|
URL: "/api/beszel/containers/logs?system=test-system&container=test-container",
|
||||||
|
ExpectedStatus: 401,
|
||||||
|
ExpectedContent: []string{"requires valid"},
|
||||||
|
TestAppFactory: testAppFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "GET /containers/logs - with auth but missing system param should fail",
|
||||||
|
Method: http.MethodGet,
|
||||||
|
URL: "/api/beszel/containers/logs?container=test-container",
|
||||||
|
Headers: map[string]string{
|
||||||
|
"Authorization": userToken,
|
||||||
|
},
|
||||||
|
ExpectedStatus: 400,
|
||||||
|
ExpectedContent: []string{"system and container parameters are required"},
|
||||||
|
TestAppFactory: testAppFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "GET /containers/logs - with auth but missing container param should fail",
|
||||||
|
Method: http.MethodGet,
|
||||||
|
URL: "/api/beszel/containers/logs?system=test-system",
|
||||||
|
Headers: map[string]string{
|
||||||
|
"Authorization": userToken,
|
||||||
|
},
|
||||||
|
ExpectedStatus: 400,
|
||||||
|
ExpectedContent: []string{"system and container parameters are required"},
|
||||||
|
TestAppFactory: testAppFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "GET /containers/logs - with auth but invalid system should fail",
|
||||||
|
Method: http.MethodGet,
|
||||||
|
URL: "/api/beszel/containers/logs?system=invalid-system&container=test-container",
|
||||||
|
Headers: map[string]string{
|
||||||
|
"Authorization": userToken,
|
||||||
|
},
|
||||||
|
ExpectedStatus: 404,
|
||||||
|
ExpectedContent: []string{"system not found"},
|
||||||
|
TestAppFactory: testAppFactory,
|
||||||
|
},
|
||||||
|
|
||||||
// Auth Optional Routes - Should work without authentication
|
// Auth Optional Routes - Should work without authentication
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ import (
|
|||||||
"github.com/henrygd/beszel/internal/common"
|
"github.com/henrygd/beszel/internal/common"
|
||||||
"github.com/henrygd/beszel/internal/hub/ws"
|
"github.com/henrygd/beszel/internal/hub/ws"
|
||||||
|
|
||||||
|
"github.com/henrygd/beszel/internal/entities/container"
|
||||||
"github.com/henrygd/beszel/internal/entities/system"
|
"github.com/henrygd/beszel/internal/entities/system"
|
||||||
|
|
||||||
"github.com/henrygd/beszel"
|
"github.com/henrygd/beszel"
|
||||||
|
|
||||||
"github.com/blang/semver"
|
"github.com/blang/semver"
|
||||||
"github.com/fxamacker/cbor/v2"
|
"github.com/fxamacker/cbor/v2"
|
||||||
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
@@ -135,41 +137,80 @@ func (sys *System) createRecords(data *system.CombinedData) (*core.Record, error
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
hub := sys.manager.hub
|
hub := sys.manager.hub
|
||||||
// add system_stats and container_stats records
|
err = hub.RunInTransaction(func(txApp core.App) error {
|
||||||
systemStatsCollection, err := hub.FindCachedCollectionByNameOrId("system_stats")
|
// add system_stats and container_stats records
|
||||||
if err != nil {
|
systemStatsCollection, err := txApp.FindCachedCollectionByNameOrId("system_stats")
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
systemStatsRecord := core.NewRecord(systemStatsCollection)
|
|
||||||
systemStatsRecord.Set("system", systemRecord.Id)
|
|
||||||
systemStatsRecord.Set("stats", data.Stats)
|
|
||||||
systemStatsRecord.Set("type", "1m")
|
|
||||||
if err := hub.SaveNoValidate(systemStatsRecord); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
// add new container_stats record
|
|
||||||
if len(data.Containers) > 0 {
|
|
||||||
containerStatsCollection, err := hub.FindCachedCollectionByNameOrId("container_stats")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
containerStatsRecord := core.NewRecord(containerStatsCollection)
|
|
||||||
containerStatsRecord.Set("system", systemRecord.Id)
|
|
||||||
containerStatsRecord.Set("stats", data.Containers)
|
|
||||||
containerStatsRecord.Set("type", "1m")
|
|
||||||
if err := hub.SaveNoValidate(containerStatsRecord); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// update system record (do this last because it triggers alerts and we need above records to be inserted first)
|
|
||||||
systemRecord.Set("status", up)
|
|
||||||
|
|
||||||
systemRecord.Set("info", data.Info)
|
systemStatsRecord := core.NewRecord(systemStatsCollection)
|
||||||
if err := hub.SaveNoValidate(systemRecord); err != nil {
|
systemStatsRecord.Set("system", systemRecord.Id)
|
||||||
return nil, err
|
systemStatsRecord.Set("stats", data.Stats)
|
||||||
|
systemStatsRecord.Set("type", "1m")
|
||||||
|
if err := txApp.SaveNoValidate(systemStatsRecord); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(data.Containers) > 0 {
|
||||||
|
// add / update containers records
|
||||||
|
if data.Containers[0].Id != "" {
|
||||||
|
if err := createContainerRecords(txApp, data.Containers, sys.Id); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add new container_stats record
|
||||||
|
containerStatsCollection, err := txApp.FindCachedCollectionByNameOrId("container_stats")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
containerStatsRecord := core.NewRecord(containerStatsCollection)
|
||||||
|
containerStatsRecord.Set("system", systemRecord.Id)
|
||||||
|
containerStatsRecord.Set("stats", data.Containers)
|
||||||
|
containerStatsRecord.Set("type", "1m")
|
||||||
|
if err := txApp.SaveNoValidate(containerStatsRecord); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// update system record (do this last because it triggers alerts and we need above records to be inserted first)
|
||||||
|
systemRecord.Set("status", up)
|
||||||
|
|
||||||
|
systemRecord.Set("info", data.Info)
|
||||||
|
if err := txApp.SaveNoValidate(systemRecord); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return systemRecord, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// createContainerRecords creates container records
|
||||||
|
func createContainerRecords(app core.App, data []*container.Stats, systemId string) error {
|
||||||
|
if len(data) == 0 {
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return systemRecord, nil
|
params := dbx.Params{
|
||||||
|
"system": systemId,
|
||||||
|
"updated": time.Now().UTC().UnixMilli(),
|
||||||
|
}
|
||||||
|
valueStrings := make([]string, 0, len(data))
|
||||||
|
for i, container := range data {
|
||||||
|
suffix := fmt.Sprintf("%d", i)
|
||||||
|
valueStrings = append(valueStrings, fmt.Sprintf("({:id%[1]s}, {:system}, {:name%[1]s}, {:status%[1]s}, {:health%[1]s}, {:cpu%[1]s}, {:memory%[1]s}, {:net%[1]s}, {:updated})", suffix))
|
||||||
|
params["id"+suffix] = container.Id
|
||||||
|
params["name"+suffix] = container.Name
|
||||||
|
params["status"+suffix] = container.Status
|
||||||
|
params["health"+suffix] = container.Health
|
||||||
|
params["cpu"+suffix] = container.Cpu
|
||||||
|
params["memory"+suffix] = container.Mem
|
||||||
|
params["net"+suffix] = container.NetworkSent + container.NetworkRecv
|
||||||
|
}
|
||||||
|
queryString := fmt.Sprintf(
|
||||||
|
"INSERT INTO containers (id, system, name, status, health, cpu, memory, net, updated) VALUES %s ON CONFLICT(id) DO UPDATE SET system = excluded.system, name = excluded.name, status = excluded.status, health = excluded.health, cpu = excluded.cpu, memory = excluded.memory, net = excluded.net, updated = excluded.updated",
|
||||||
|
strings.Join(valueStrings, ","),
|
||||||
|
)
|
||||||
|
_, err := app.DB().NewQuery(queryString).Bind(params).Execute()
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// getRecord retrieves the system record from the database.
|
// getRecord retrieves the system record from the database.
|
||||||
@@ -242,37 +283,74 @@ func (sys *System) fetchDataViaWebSocket(options common.DataRequestOptions) (*sy
|
|||||||
return sys.data, nil
|
return sys.data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fetchStringFromAgentViaSSH is a generic function to fetch strings via SSH
|
||||||
|
func (sys *System) fetchStringFromAgentViaSSH(action common.WebSocketAction, requestData any, errorMsg string) (string, error) {
|
||||||
|
var result string
|
||||||
|
err := sys.runSSHOperation(4*time.Second, 1, func(session *ssh.Session) (bool, error) {
|
||||||
|
stdout, err := session.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
stdin, stdinErr := session.StdinPipe()
|
||||||
|
if stdinErr != nil {
|
||||||
|
return false, stdinErr
|
||||||
|
}
|
||||||
|
if err := session.Shell(); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
req := common.HubRequest[any]{Action: action, Data: requestData}
|
||||||
|
_ = cbor.NewEncoder(stdin).Encode(req)
|
||||||
|
_ = stdin.Close()
|
||||||
|
var resp common.AgentResponse
|
||||||
|
err = cbor.NewDecoder(stdout).Decode(&resp)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if resp.String == nil {
|
||||||
|
return false, errors.New(errorMsg)
|
||||||
|
}
|
||||||
|
result = *resp.String
|
||||||
|
return false, nil
|
||||||
|
})
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// FetchContainerInfoFromAgent fetches container info from the agent
|
||||||
|
func (sys *System) FetchContainerInfoFromAgent(containerID string) (string, error) {
|
||||||
|
// fetch via websocket
|
||||||
|
if sys.WsConn != nil && sys.WsConn.IsConnected() {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
return sys.WsConn.RequestContainerInfo(ctx, containerID)
|
||||||
|
}
|
||||||
|
// fetch via SSH
|
||||||
|
return sys.fetchStringFromAgentViaSSH(common.GetContainerInfo, common.ContainerInfoRequest{ContainerID: containerID}, "no info in response")
|
||||||
|
}
|
||||||
|
|
||||||
|
// FetchContainerLogsFromAgent fetches container logs from the agent
|
||||||
|
func (sys *System) FetchContainerLogsFromAgent(containerID string) (string, error) {
|
||||||
|
// fetch via websocket
|
||||||
|
if sys.WsConn != nil && sys.WsConn.IsConnected() {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
return sys.WsConn.RequestContainerLogs(ctx, containerID)
|
||||||
|
}
|
||||||
|
// fetch via SSH
|
||||||
|
return sys.fetchStringFromAgentViaSSH(common.GetContainerLogs, common.ContainerLogsRequest{ContainerID: containerID}, "no logs in response")
|
||||||
|
}
|
||||||
|
|
||||||
// fetchDataViaSSH handles fetching data using SSH.
|
// fetchDataViaSSH handles fetching data using SSH.
|
||||||
// This function encapsulates the original SSH logic.
|
// This function encapsulates the original SSH logic.
|
||||||
// It updates sys.data directly upon successful fetch.
|
// It updates sys.data directly upon successful fetch.
|
||||||
func (sys *System) fetchDataViaSSH(options common.DataRequestOptions) (*system.CombinedData, error) {
|
func (sys *System) fetchDataViaSSH(options common.DataRequestOptions) (*system.CombinedData, error) {
|
||||||
maxRetries := 1
|
err := sys.runSSHOperation(4*time.Second, 1, func(session *ssh.Session) (bool, error) {
|
||||||
for attempt := 0; attempt <= maxRetries; attempt++ {
|
|
||||||
if sys.client == nil || sys.Status == down {
|
|
||||||
if err := sys.createSSHClient(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
session, err := sys.createSessionWithTimeout(4 * time.Second)
|
|
||||||
if err != nil {
|
|
||||||
if attempt >= maxRetries {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
sys.manager.hub.Logger().Warn("Session closed. Retrying...", "host", sys.Host, "port", sys.Port, "err", err)
|
|
||||||
sys.closeSSHConnection()
|
|
||||||
// Reset format detection on connection failure - agent might have been upgraded
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
defer session.Close()
|
|
||||||
|
|
||||||
stdout, err := session.StdoutPipe()
|
stdout, err := session.StdoutPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return false, err
|
||||||
}
|
}
|
||||||
stdin, stdinErr := session.StdinPipe()
|
stdin, stdinErr := session.StdinPipe()
|
||||||
if err := session.Shell(); err != nil {
|
if err := session.Shell(); err != nil {
|
||||||
return nil, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
*sys.data = system.CombinedData{}
|
*sys.data = system.CombinedData{}
|
||||||
@@ -280,45 +358,82 @@ func (sys *System) fetchDataViaSSH(options common.DataRequestOptions) (*system.C
|
|||||||
if sys.agentVersion.GTE(beszel.MinVersionAgentResponse) && stdinErr == nil {
|
if sys.agentVersion.GTE(beszel.MinVersionAgentResponse) && stdinErr == nil {
|
||||||
req := common.HubRequest[any]{Action: common.GetData, Data: options}
|
req := common.HubRequest[any]{Action: common.GetData, Data: options}
|
||||||
_ = cbor.NewEncoder(stdin).Encode(req)
|
_ = cbor.NewEncoder(stdin).Encode(req)
|
||||||
// Close write side to signal end of request
|
|
||||||
_ = stdin.Close()
|
_ = stdin.Close()
|
||||||
|
|
||||||
var resp common.AgentResponse
|
var resp common.AgentResponse
|
||||||
if decErr := cbor.NewDecoder(stdout).Decode(&resp); decErr == nil && resp.SystemData != nil {
|
if decErr := cbor.NewDecoder(stdout).Decode(&resp); decErr == nil && resp.SystemData != nil {
|
||||||
*sys.data = *resp.SystemData
|
*sys.data = *resp.SystemData
|
||||||
// wait for the session to complete
|
|
||||||
if err := session.Wait(); err != nil {
|
if err := session.Wait(); err != nil {
|
||||||
return nil, err
|
return false, err
|
||||||
}
|
}
|
||||||
return sys.data, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
// If decoding failed, fall back below
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var decodeErr error
|
||||||
if sys.agentVersion.GTE(beszel.MinVersionCbor) {
|
if sys.agentVersion.GTE(beszel.MinVersionCbor) {
|
||||||
err = cbor.NewDecoder(stdout).Decode(sys.data)
|
decodeErr = cbor.NewDecoder(stdout).Decode(sys.data)
|
||||||
} else {
|
} else {
|
||||||
err = json.NewDecoder(stdout).Decode(sys.data)
|
decodeErr = json.NewDecoder(stdout).Decode(sys.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if decodeErr != nil {
|
||||||
sys.closeSSHConnection()
|
return true, decodeErr
|
||||||
if attempt < maxRetries {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// wait for the session to complete
|
|
||||||
if err := session.Wait(); err != nil {
|
if err := session.Wait(); err != nil {
|
||||||
return nil, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return sys.data, nil
|
return false, nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// this should never be reached due to the return in the loop
|
return sys.data, nil
|
||||||
return nil, fmt.Errorf("failed to fetch data")
|
}
|
||||||
|
|
||||||
|
// runSSHOperation establishes an SSH session and executes the provided operation.
|
||||||
|
// The operation can request a retry by returning true as the first return value.
|
||||||
|
func (sys *System) runSSHOperation(timeout time.Duration, retries int, operation func(*ssh.Session) (bool, error)) error {
|
||||||
|
for attempt := 0; attempt <= retries; attempt++ {
|
||||||
|
if sys.client == nil || sys.Status == down {
|
||||||
|
if err := sys.createSSHClient(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
session, err := sys.createSessionWithTimeout(timeout)
|
||||||
|
if err != nil {
|
||||||
|
if attempt >= retries {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
sys.manager.hub.Logger().Warn("Session closed. Retrying...", "host", sys.Host, "port", sys.Port, "err", err)
|
||||||
|
sys.closeSSHConnection()
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
retry, opErr := func() (bool, error) {
|
||||||
|
defer session.Close()
|
||||||
|
return operation(session)
|
||||||
|
}()
|
||||||
|
|
||||||
|
if opErr == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if retry {
|
||||||
|
sys.closeSSHConnection()
|
||||||
|
if attempt < retries {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opErr
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("ssh operation failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
// createSSHClient creates a new SSH client for the system
|
// createSSHClient creates a new SSH client for the system
|
||||||
|
|||||||
@@ -63,6 +63,15 @@ func NewSystemManager(hub hubLike) *SystemManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSystem returns a system by ID from the store
|
||||||
|
func (sm *SystemManager) GetSystem(systemID string) (*System, error) {
|
||||||
|
sys, ok := sm.systems.GetOk(systemID)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("system not found")
|
||||||
|
}
|
||||||
|
return sys, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize sets up the system manager by binding event hooks and starting existing systems.
|
// Initialize sets up the system manager by binding event hooks and starting existing systems.
|
||||||
// It configures SSH client settings and begins monitoring all non-paused systems from the database.
|
// It configures SSH client settings and begins monitoring all non-paused systems from the database.
|
||||||
// Systems are started with staggered delays to prevent overwhelming the hub during startup.
|
// Systems are started with staggered delays to prevent overwhelming the hub during startup.
|
||||||
|
|||||||
@@ -154,19 +154,20 @@ func (sm *SystemManager) startRealtimeWorker() {
|
|||||||
// fetchRealtimeDataAndNotify fetches realtime data for all active subscriptions and notifies the clients.
|
// fetchRealtimeDataAndNotify fetches realtime data for all active subscriptions and notifies the clients.
|
||||||
func (sm *SystemManager) fetchRealtimeDataAndNotify() {
|
func (sm *SystemManager) fetchRealtimeDataAndNotify() {
|
||||||
for systemId, info := range activeSubscriptions {
|
for systemId, info := range activeSubscriptions {
|
||||||
system, ok := sm.systems.GetOk(systemId)
|
system, err := sm.GetSystem(systemId)
|
||||||
if ok {
|
if err != nil {
|
||||||
go func() {
|
continue
|
||||||
data, err := system.fetchDataFromAgent(common.DataRequestOptions{CacheTimeMs: 1000})
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
bytes, err := json.Marshal(data)
|
|
||||||
if err == nil {
|
|
||||||
notify(sm.hub, info.subscription, bytes)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
}
|
||||||
|
go func() {
|
||||||
|
data, err := system.fetchDataFromAgent(common.DataRequestOptions{CacheTimeMs: 1000})
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
bytes, err := json.Marshal(data)
|
||||||
|
if err == nil {
|
||||||
|
notify(sm.hub, info.subscription, bytes)
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ type ResponseHandler interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BaseHandler provides a default implementation that can be embedded to make HandleLegacy optional
|
// BaseHandler provides a default implementation that can be embedded to make HandleLegacy optional
|
||||||
// type BaseHandler struct{}
|
type BaseHandler struct{}
|
||||||
|
|
||||||
// func (h *BaseHandler) HandleLegacy(rawData []byte) error {
|
func (h *BaseHandler) HandleLegacy(rawData []byte) error {
|
||||||
// return errors.New("legacy format not supported")
|
return errors.New("legacy format not supported")
|
||||||
// }
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -63,6 +63,58 @@ func (ws *WsConn) RequestSystemData(ctx context.Context, data *system.CombinedDa
|
|||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// stringResponseHandler is a generic handler for string responses from agents
|
||||||
|
type stringResponseHandler struct {
|
||||||
|
BaseHandler
|
||||||
|
value string
|
||||||
|
errorMsg string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *stringResponseHandler) Handle(agentResponse common.AgentResponse) error {
|
||||||
|
if agentResponse.String == nil {
|
||||||
|
return errors.New(h.errorMsg)
|
||||||
|
}
|
||||||
|
h.value = *agentResponse.String
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// requestContainerStringViaWS is a generic function to request container-related strings via WebSocket
|
||||||
|
func (ws *WsConn) requestContainerStringViaWS(ctx context.Context, action common.WebSocketAction, requestData any, errorMsg string) (string, error) {
|
||||||
|
if !ws.IsConnected() {
|
||||||
|
return "", gws.ErrConnClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := ws.requestManager.SendRequest(ctx, action, requestData)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
handler := &stringResponseHandler{errorMsg: errorMsg}
|
||||||
|
if err := ws.handleAgentRequest(req, handler); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return handler.value, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RequestContainerLogs requests logs for a specific container via WebSocket.
|
||||||
|
func (ws *WsConn) RequestContainerLogs(ctx context.Context, containerID string) (string, error) {
|
||||||
|
return ws.requestContainerStringViaWS(ctx, common.GetContainerLogs, common.ContainerLogsRequest{ContainerID: containerID}, "no logs in response")
|
||||||
|
}
|
||||||
|
|
||||||
|
// RequestContainerInfo requests information about a specific container via WebSocket.
|
||||||
|
func (ws *WsConn) RequestContainerInfo(ctx context.Context, containerID string) (string, error) {
|
||||||
|
return ws.requestContainerStringViaWS(ctx, common.GetContainerInfo, common.ContainerInfoRequest{ContainerID: containerID}, "no info in response")
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// fingerprintHandler implements ResponseHandler for fingerprint requests
|
// fingerprintHandler implements ResponseHandler for fingerprint requests
|
||||||
type fingerprintHandler struct {
|
type fingerprintHandler struct {
|
||||||
result *common.FingerprintResponse
|
result *common.FingerprintResponse
|
||||||
|
|||||||
@@ -181,6 +181,17 @@ func TestCommonActions(t *testing.T) {
|
|||||||
// Test that the actions we use exist and have expected values
|
// Test that the actions we use exist and have expected values
|
||||||
assert.Equal(t, common.WebSocketAction(0), common.GetData, "GetData should be action 0")
|
assert.Equal(t, common.WebSocketAction(0), common.GetData, "GetData should be action 0")
|
||||||
assert.Equal(t, common.WebSocketAction(1), common.CheckFingerprint, "CheckFingerprint should be action 1")
|
assert.Equal(t, common.WebSocketAction(1), common.CheckFingerprint, "CheckFingerprint should be action 1")
|
||||||
|
assert.Equal(t, common.WebSocketAction(2), common.GetContainerLogs, "GetLogs should be action 2")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLogsHandler(t *testing.T) {
|
||||||
|
h := &stringResponseHandler{errorMsg: "no logs in response"}
|
||||||
|
|
||||||
|
logValue := "test logs"
|
||||||
|
resp := common.AgentResponse{String: &logValue}
|
||||||
|
err := h.Handle(resp)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, logValue, h.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestHandler tests that we can create a Handler
|
// TestHandler tests that we can create a Handler
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package migrations
|
package migrations
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
m "github.com/pocketbase/pocketbase/migrations"
|
m "github.com/pocketbase/pocketbase/migrations"
|
||||||
)
|
)
|
||||||
@@ -860,6 +859,138 @@ func init() {
|
|||||||
"system": false,
|
"system": false,
|
||||||
"authRule": "verified=true",
|
"authRule": "verified=true",
|
||||||
"manageRule": null
|
"manageRule": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pbc_1864144027",
|
||||||
|
"listRule": "@request.auth.id != \"\" && system.users.id ?= @request.auth.id",
|
||||||
|
"viewRule": null,
|
||||||
|
"createRule": null,
|
||||||
|
"updateRule": null,
|
||||||
|
"deleteRule": null,
|
||||||
|
"name": "containers",
|
||||||
|
"type": "base",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"autogeneratePattern": "[a-f0-9]{6}",
|
||||||
|
"hidden": false,
|
||||||
|
"id": "text3208210256",
|
||||||
|
"max": 12,
|
||||||
|
"min": 6,
|
||||||
|
"name": "id",
|
||||||
|
"pattern": "^[a-f0-9]+$",
|
||||||
|
"presentable": false,
|
||||||
|
"primaryKey": true,
|
||||||
|
"required": true,
|
||||||
|
"system": true,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cascadeDelete": false,
|
||||||
|
"collectionId": "2hz5ncl8tizk5nx",
|
||||||
|
"hidden": false,
|
||||||
|
"id": "relation3377271179",
|
||||||
|
"maxSelect": 1,
|
||||||
|
"minSelect": 0,
|
||||||
|
"name": "system",
|
||||||
|
"presentable": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "relation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"autogeneratePattern": "",
|
||||||
|
"hidden": false,
|
||||||
|
"id": "text1579384326",
|
||||||
|
"max": 0,
|
||||||
|
"min": 0,
|
||||||
|
"name": "name",
|
||||||
|
"pattern": "",
|
||||||
|
"presentable": false,
|
||||||
|
"primaryKey": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"autogeneratePattern": "",
|
||||||
|
"hidden": false,
|
||||||
|
"id": "text2063623452",
|
||||||
|
"max": 0,
|
||||||
|
"min": 0,
|
||||||
|
"name": "status",
|
||||||
|
"pattern": "",
|
||||||
|
"presentable": false,
|
||||||
|
"primaryKey": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hidden": false,
|
||||||
|
"id": "number3470402323",
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"name": "health",
|
||||||
|
"onlyInt": false,
|
||||||
|
"presentable": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hidden": false,
|
||||||
|
"id": "number3128971310",
|
||||||
|
"max": 100,
|
||||||
|
"min": 0,
|
||||||
|
"name": "cpu",
|
||||||
|
"onlyInt": false,
|
||||||
|
"presentable": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hidden": false,
|
||||||
|
"id": "number3933025333",
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"name": "memory",
|
||||||
|
"onlyInt": false,
|
||||||
|
"presentable": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hidden": false,
|
||||||
|
"id": "number4075427327",
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"name": "net",
|
||||||
|
"onlyInt": false,
|
||||||
|
"presentable": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hidden": false,
|
||||||
|
"id": "number3332085495",
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"name": "updated",
|
||||||
|
"onlyInt": true,
|
||||||
|
"presentable": false,
|
||||||
|
"required": true,
|
||||||
|
"system": false,
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"indexes": [
|
||||||
|
"CREATE INDEX ` + "`" + `idx_JxWirjdhyO` + "`" + ` ON ` + "`" + `containers` + "`" + ` (` + "`" + `updated` + "`" + `)",
|
||||||
|
"CREATE INDEX ` + "`" + `idx_r3Ja0rs102` + "`" + ` ON ` + "`" + `containers` + "`" + ` (` + "`" + `system` + "`" + `)"
|
||||||
|
],
|
||||||
|
"system": false
|
||||||
}
|
}
|
||||||
]`
|
]`
|
||||||
|
|
||||||
@@ -868,31 +999,6 @@ func init() {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all systems that don't have fingerprint records
|
|
||||||
var systemIds []string
|
|
||||||
err = app.DB().NewQuery(`
|
|
||||||
SELECT s.id FROM systems s
|
|
||||||
LEFT JOIN fingerprints f ON s.id = f.system
|
|
||||||
WHERE f.system IS NULL
|
|
||||||
`).Column(&systemIds)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Create fingerprint records with unique UUID tokens for each system
|
|
||||||
for _, systemId := range systemIds {
|
|
||||||
token := uuid.New().String()
|
|
||||||
_, err = app.DB().NewQuery(`
|
|
||||||
INSERT INTO fingerprints (system, token)
|
|
||||||
VALUES ({:system}, {:token})
|
|
||||||
`).Bind(map[string]any{
|
|
||||||
"system": systemId,
|
|
||||||
"token": token,
|
|
||||||
}).Execute()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}, func(app core.App) error {
|
}, func(app core.App) error {
|
||||||
return nil
|
return nil
|
||||||
@@ -414,8 +414,6 @@ 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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,8 +425,6 @@ 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
|
||||||
@@ -441,6 +437,10 @@ func (rm *RecordManager) DeleteOldRecords() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
err = deleteOldContainerRecords(txApp)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
err = deleteOldAlertsHistory(txApp, 200, 250)
|
err = deleteOldAlertsHistory(txApp, 200, 250)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -510,6 +510,20 @@ func deleteOldSystemStats(app core.App) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deletes container records that haven't been updated in the last 10 minutes
|
||||||
|
func deleteOldContainerRecords(app core.App) error {
|
||||||
|
now := time.Now().UTC()
|
||||||
|
tenMinutesAgo := now.Add(-10 * time.Minute)
|
||||||
|
|
||||||
|
// Delete container records where updated < tenMinutesAgo
|
||||||
|
_, err := app.DB().NewQuery("DELETE FROM containers WHERE updated < {:updated}").Bind(dbx.Params{"updated": tenMinutesAgo.UnixMilli()}).Execute()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to delete old container records: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
/* Round float to two decimals */
|
/* Round float to two decimals */
|
||||||
func twoDecimals(value float64) float64 {
|
func twoDecimals(value float64) float64 {
|
||||||
return math.Round(value*100) / 100
|
return math.Round(value*100) / 100
|
||||||
|
|||||||
Binary file not shown.
599
internal/site/package-lock.json
generated
599
internal/site/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "beszel",
|
"name": "beszel",
|
||||||
"version": "0.13.2",
|
"version": "0.14.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "beszel",
|
"name": "beszel",
|
||||||
"version": "0.13.2",
|
"version": "0.14.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@henrygd/queue": "^1.0.7",
|
"@henrygd/queue": "^1.0.7",
|
||||||
"@henrygd/semaphore": "^0.0.2",
|
"@henrygd/semaphore": "^0.0.2",
|
||||||
@@ -42,11 +42,12 @@
|
|||||||
"react": "^19.1.1",
|
"react": "^19.1.1",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.1.1",
|
||||||
"recharts": "^2.15.4",
|
"recharts": "^2.15.4",
|
||||||
|
"shiki": "^3.13.0",
|
||||||
"tailwind-merge": "^3.3.1",
|
"tailwind-merge": "^3.3.1",
|
||||||
"valibot": "^0.42.1"
|
"valibot": "^0.42.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "2.2.3",
|
"@biomejs/biome": "2.2.4",
|
||||||
"@lingui/cli": "^5.4.1",
|
"@lingui/cli": "^5.4.1",
|
||||||
"@lingui/swc-plugin": "^5.6.1",
|
"@lingui/swc-plugin": "^5.6.1",
|
||||||
"@lingui/vite-plugin": "^5.4.1",
|
"@lingui/vite-plugin": "^5.4.1",
|
||||||
@@ -332,9 +333,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/biome": {
|
"node_modules/@biomejs/biome": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.4.tgz",
|
||||||
"integrity": "sha512-9w0uMTvPrIdvUrxazZ42Ib7t8Y2yoGLKLdNne93RLICmaHw7mcLv4PPb5LvZLJF3141gQHiCColOh/v6VWlWmg==",
|
"integrity": "sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT OR Apache-2.0",
|
"license": "MIT OR Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -348,20 +349,20 @@
|
|||||||
"url": "https://opencollective.com/biome"
|
"url": "https://opencollective.com/biome"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@biomejs/cli-darwin-arm64": "2.2.3",
|
"@biomejs/cli-darwin-arm64": "2.2.4",
|
||||||
"@biomejs/cli-darwin-x64": "2.2.3",
|
"@biomejs/cli-darwin-x64": "2.2.4",
|
||||||
"@biomejs/cli-linux-arm64": "2.2.3",
|
"@biomejs/cli-linux-arm64": "2.2.4",
|
||||||
"@biomejs/cli-linux-arm64-musl": "2.2.3",
|
"@biomejs/cli-linux-arm64-musl": "2.2.4",
|
||||||
"@biomejs/cli-linux-x64": "2.2.3",
|
"@biomejs/cli-linux-x64": "2.2.4",
|
||||||
"@biomejs/cli-linux-x64-musl": "2.2.3",
|
"@biomejs/cli-linux-x64-musl": "2.2.4",
|
||||||
"@biomejs/cli-win32-arm64": "2.2.3",
|
"@biomejs/cli-win32-arm64": "2.2.4",
|
||||||
"@biomejs/cli-win32-x64": "2.2.3"
|
"@biomejs/cli-win32-x64": "2.2.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-darwin-arm64": {
|
"node_modules/@biomejs/cli-darwin-arm64": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.4.tgz",
|
||||||
"integrity": "sha512-OrqQVBpadB5eqzinXN4+Q6honBz+tTlKVCsbEuEpljK8ASSItzIRZUA02mTikl3H/1nO2BMPFiJ0nkEZNy3B1w==",
|
"integrity": "sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -376,9 +377,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-darwin-x64": {
|
"node_modules/@biomejs/cli-darwin-x64": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.4.tgz",
|
||||||
"integrity": "sha512-OCdBpb1TmyfsTgBAM1kPMXyYKTohQ48WpiN9tkt9xvU6gKVKHY4oVwteBebiOqyfyzCNaSiuKIPjmHjUZ2ZNMg==",
|
"integrity": "sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -393,9 +394,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-arm64": {
|
"node_modules/@biomejs/cli-linux-arm64": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.4.tgz",
|
||||||
"integrity": "sha512-g/Uta2DqYpECxG+vUmTAmUKlVhnGEcY7DXWgKP8ruLRa8Si1QHsWknPY3B/wCo0KgYiFIOAZ9hjsHfNb9L85+g==",
|
"integrity": "sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -410,9 +411,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.4.tgz",
|
||||||
"integrity": "sha512-q3w9jJ6JFPZPeqyvwwPeaiS/6NEszZ+pXKF+IczNo8Xj6fsii45a4gEEicKyKIytalV+s829ACZujQlXAiVLBQ==",
|
"integrity": "sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -427,9 +428,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-x64": {
|
"node_modules/@biomejs/cli-linux-x64": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.4.tgz",
|
||||||
"integrity": "sha512-LEtyYL1fJsvw35CxrbQ0gZoxOG3oZsAjzfRdvRBRHxOpQ91Q5doRVjvWW/wepgSdgk5hlaNzfeqpyGmfSD0Eyw==",
|
"integrity": "sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -444,9 +445,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-x64-musl": {
|
"node_modules/@biomejs/cli-linux-x64-musl": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.4.tgz",
|
||||||
"integrity": "sha512-y76Dn4vkP1sMRGPFlNc+OTETBhGPJ90jY3il6jAfur8XWrYBQV3swZ1Jo0R2g+JpOeeoA0cOwM7mJG6svDz79w==",
|
"integrity": "sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -461,9 +462,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-win32-arm64": {
|
"node_modules/@biomejs/cli-win32-arm64": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.4.tgz",
|
||||||
"integrity": "sha512-Ms9zFYzjcJK7LV+AOMYnjN3pV3xL8Prxf9aWdDVL74onLn5kcvZ1ZMQswE5XHtnd/r/0bnUd928Rpbs14BzVmA==",
|
"integrity": "sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -478,9 +479,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-win32-x64": {
|
"node_modules/@biomejs/cli-win32-x64": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.4.tgz",
|
||||||
"integrity": "sha512-gvCpewE7mBwBIpqk1YrUqNR4mCiyJm6UI3YWQQXkedSSEwzRdodRpaKhbdbHw1/hmTWOVXQ+Eih5Qctf4TCVOQ==",
|
"integrity": "sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -2746,6 +2747,73 @@
|
|||||||
"win32"
|
"win32"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/@shikijs/core": {
|
||||||
|
"version": "3.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.13.0.tgz",
|
||||||
|
"integrity": "sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@shikijs/types": "3.13.0",
|
||||||
|
"@shikijs/vscode-textmate": "^10.0.2",
|
||||||
|
"@types/hast": "^3.0.4",
|
||||||
|
"hast-util-to-html": "^9.0.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@shikijs/engine-javascript": {
|
||||||
|
"version": "3.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.13.0.tgz",
|
||||||
|
"integrity": "sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@shikijs/types": "3.13.0",
|
||||||
|
"@shikijs/vscode-textmate": "^10.0.2",
|
||||||
|
"oniguruma-to-es": "^4.3.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@shikijs/engine-oniguruma": {
|
||||||
|
"version": "3.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.13.0.tgz",
|
||||||
|
"integrity": "sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@shikijs/types": "3.13.0",
|
||||||
|
"@shikijs/vscode-textmate": "^10.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@shikijs/langs": {
|
||||||
|
"version": "3.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.13.0.tgz",
|
||||||
|
"integrity": "sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@shikijs/types": "3.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@shikijs/themes": {
|
||||||
|
"version": "3.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.13.0.tgz",
|
||||||
|
"integrity": "sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@shikijs/types": "3.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@shikijs/types": {
|
||||||
|
"version": "3.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.13.0.tgz",
|
||||||
|
"integrity": "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@shikijs/vscode-textmate": "^10.0.2",
|
||||||
|
"@types/hast": "^3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@shikijs/vscode-textmate": {
|
||||||
|
"version": "10.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
|
||||||
|
"integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@sinclair/typebox": {
|
"node_modules/@sinclair/typebox": {
|
||||||
"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",
|
||||||
@@ -3416,6 +3484,15 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/hast": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/istanbul-lib-coverage": {
|
"node_modules/@types/istanbul-lib-coverage": {
|
||||||
"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",
|
||||||
@@ -3443,6 +3520,15 @@
|
|||||||
"@types/istanbul-lib-report": "*"
|
"@types/istanbul-lib-report": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/mdast": {
|
||||||
|
"version": "4.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
|
||||||
|
"integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"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",
|
||||||
@@ -3473,6 +3559,12 @@
|
|||||||
"@types/react": "^19.0.0"
|
"@types/react": "^19.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/unist": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@types/yargs": {
|
"node_modules/@types/yargs": {
|
||||||
"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",
|
||||||
@@ -3490,6 +3582,12 @@
|
|||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/@ungap/structured-clone": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
"node_modules/@vitejs/plugin-react-swc": {
|
"node_modules/@vitejs/plugin-react-swc": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.0.1.tgz",
|
||||||
@@ -3773,6 +3871,16 @@
|
|||||||
],
|
],
|
||||||
"license": "CC-BY-4.0"
|
"license": "CC-BY-4.0"
|
||||||
},
|
},
|
||||||
|
"node_modules/ccount": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/chalk": {
|
"node_modules/chalk": {
|
||||||
"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",
|
||||||
@@ -3790,6 +3898,26 @@
|
|||||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/character-entities-html4": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/character-entities-legacy": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/chownr": {
|
"node_modules/chownr": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
|
||||||
@@ -3915,6 +4043,16 @@
|
|||||||
"node": ">=0.1.90"
|
"node": ">=0.1.90"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/comma-separated-tokens": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/convert-source-map": {
|
"node_modules/convert-source-map": {
|
||||||
"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",
|
||||||
@@ -4139,6 +4277,15 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/dequal": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/detect-libc": {
|
"node_modules/detect-libc": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
|
||||||
@@ -4155,6 +4302,19 @@
|
|||||||
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
|
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/devlop": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"dequal": "^2.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/dom-helpers": {
|
"node_modules/dom-helpers": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
|
||||||
@@ -4393,6 +4553,52 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/hast-util-to-html": {
|
||||||
|
"version": "9.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
|
||||||
|
"integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/hast": "^3.0.0",
|
||||||
|
"@types/unist": "^3.0.0",
|
||||||
|
"ccount": "^2.0.0",
|
||||||
|
"comma-separated-tokens": "^2.0.0",
|
||||||
|
"hast-util-whitespace": "^3.0.0",
|
||||||
|
"html-void-elements": "^3.0.0",
|
||||||
|
"mdast-util-to-hast": "^13.0.0",
|
||||||
|
"property-information": "^7.0.0",
|
||||||
|
"space-separated-tokens": "^2.0.0",
|
||||||
|
"stringify-entities": "^4.0.0",
|
||||||
|
"zwitch": "^2.0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/hast-util-whitespace": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/hast": "^3.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/html-void-elements": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ieee754": {
|
"node_modules/ieee754": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||||
@@ -4973,6 +5179,116 @@
|
|||||||
"@jridgewell/sourcemap-codec": "^1.5.5"
|
"@jridgewell/sourcemap-codec": "^1.5.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/mdast-util-to-hast": {
|
||||||
|
"version": "13.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
|
||||||
|
"integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/hast": "^3.0.0",
|
||||||
|
"@types/mdast": "^4.0.0",
|
||||||
|
"@ungap/structured-clone": "^1.0.0",
|
||||||
|
"devlop": "^1.0.0",
|
||||||
|
"micromark-util-sanitize-uri": "^2.0.0",
|
||||||
|
"trim-lines": "^3.0.0",
|
||||||
|
"unist-util-position": "^5.0.0",
|
||||||
|
"unist-util-visit": "^5.0.0",
|
||||||
|
"vfile": "^6.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/micromark-util-character": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "GitHub Sponsors",
|
||||||
|
"url": "https://github.com/sponsors/unifiedjs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OpenCollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"micromark-util-symbol": "^2.0.0",
|
||||||
|
"micromark-util-types": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/micromark-util-encode": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "GitHub Sponsors",
|
||||||
|
"url": "https://github.com/sponsors/unifiedjs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OpenCollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/micromark-util-sanitize-uri": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "GitHub Sponsors",
|
||||||
|
"url": "https://github.com/sponsors/unifiedjs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OpenCollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"micromark-util-character": "^2.0.0",
|
||||||
|
"micromark-util-encode": "^2.0.0",
|
||||||
|
"micromark-util-symbol": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/micromark-util-symbol": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "GitHub Sponsors",
|
||||||
|
"url": "https://github.com/sponsors/unifiedjs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OpenCollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/micromark-util-types": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "GitHub Sponsors",
|
||||||
|
"url": "https://github.com/sponsors/unifiedjs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OpenCollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/micromatch": {
|
"node_modules/micromatch": {
|
||||||
"version": "4.0.8",
|
"version": "4.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
||||||
@@ -5138,6 +5454,23 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/oniguruma-parser": {
|
||||||
|
"version": "0.12.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
|
||||||
|
"integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/oniguruma-to-es": {
|
||||||
|
"version": "4.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz",
|
||||||
|
"integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"oniguruma-parser": "^0.12.1",
|
||||||
|
"regex": "^6.0.1",
|
||||||
|
"regex-recursion": "^6.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ora": {
|
"node_modules/ora": {
|
||||||
"version": "5.4.1",
|
"version": "5.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
|
||||||
@@ -5351,6 +5684,16 @@
|
|||||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
|
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/property-information": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pseudolocale": {
|
"node_modules/pseudolocale": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-2.1.0.tgz",
|
||||||
@@ -5567,6 +5910,30 @@
|
|||||||
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
|
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/regex": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"regex-utilities": "^2.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/regex-recursion": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"regex-utilities": "^2.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/regex-utilities": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/resolve-from": {
|
"node_modules/resolve-from": {
|
||||||
"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",
|
||||||
@@ -5698,6 +6065,22 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/shiki": {
|
||||||
|
"version": "3.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shiki/-/shiki-3.13.0.tgz",
|
||||||
|
"integrity": "sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@shikijs/core": "3.13.0",
|
||||||
|
"@shikijs/engine-javascript": "3.13.0",
|
||||||
|
"@shikijs/engine-oniguruma": "3.13.0",
|
||||||
|
"@shikijs/langs": "3.13.0",
|
||||||
|
"@shikijs/themes": "3.13.0",
|
||||||
|
"@shikijs/types": "3.13.0",
|
||||||
|
"@shikijs/vscode-textmate": "^10.0.2",
|
||||||
|
"@types/hast": "^3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/signal-exit": {
|
"node_modules/signal-exit": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
||||||
@@ -5734,6 +6117,16 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/space-separated-tokens": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/string_decoder": {
|
"node_modules/string_decoder": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||||
@@ -5808,6 +6201,20 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/stringify-entities": {
|
||||||
|
"version": "4.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
|
||||||
|
"integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"character-entities-html4": "^2.0.0",
|
||||||
|
"character-entities-legacy": "^3.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/strip-ansi": {
|
"node_modules/strip-ansi": {
|
||||||
"version": "7.1.0",
|
"version": "7.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
||||||
@@ -5966,6 +6373,16 @@
|
|||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/trim-lines": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tslib": {
|
"node_modules/tslib": {
|
||||||
"version": "2.6.3",
|
"version": "2.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
|
||||||
@@ -6003,6 +6420,74 @@
|
|||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/unist-util-is": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^3.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unist-util-position": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^3.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unist-util-stringify-position": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^3.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unist-util-visit": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^3.0.0",
|
||||||
|
"unist-util-is": "^6.0.0",
|
||||||
|
"unist-util-visit-parents": "^6.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unist-util-visit-parents": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^3.0.0",
|
||||||
|
"unist-util-is": "^6.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
"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",
|
||||||
@@ -6098,6 +6583,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vfile": {
|
||||||
|
"version": "6.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^3.0.0",
|
||||||
|
"vfile-message": "^4.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vfile-message": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^3.0.0",
|
||||||
|
"unist-util-stringify-position": "^4.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/victory-vendor": {
|
"node_modules/victory-vendor": {
|
||||||
"version": "36.9.2",
|
"version": "36.9.2",
|
||||||
"resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
|
"resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
|
||||||
@@ -6341,6 +6854,16 @@
|
|||||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/zwitch": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "beszel",
|
"name": "beszel",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.13.2",
|
"version": "0.14.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite --host",
|
"dev": "vite --host",
|
||||||
@@ -49,11 +49,12 @@
|
|||||||
"react": "^19.1.1",
|
"react": "^19.1.1",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.1.1",
|
||||||
"recharts": "^2.15.4",
|
"recharts": "^2.15.4",
|
||||||
|
"shiki": "^3.13.0",
|
||||||
"tailwind-merge": "^3.3.1",
|
"tailwind-merge": "^3.3.1",
|
||||||
"valibot": "^0.42.1"
|
"valibot": "^0.42.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "2.2.3",
|
"@biomejs/biome": "2.2.4",
|
||||||
"@lingui/cli": "^5.4.1",
|
"@lingui/cli": "^5.4.1",
|
||||||
"@lingui/swc-plugin": "^5.6.1",
|
"@lingui/swc-plugin": "^5.6.1",
|
||||||
"@lingui/vite-plugin": "^5.4.1",
|
"@lingui/vite-plugin": "^5.4.1",
|
||||||
@@ -76,4 +77,4 @@
|
|||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@esbuild/linux-arm64": "^0.21.5"
|
"@esbuild/linux-arm64": "^0.21.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
85
internal/site/src/components/active-alerts.tsx
Normal file
85
internal/site/src/components/active-alerts.tsx
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
import { alertInfo } from "@/lib/alerts"
|
||||||
|
import { $alerts, $allSystemsById } from "@/lib/stores"
|
||||||
|
import type { AlertRecord } from "@/types"
|
||||||
|
import { Plural, Trans } from "@lingui/react/macro"
|
||||||
|
import { useStore } from "@nanostores/react"
|
||||||
|
import { getPagePath } from "@nanostores/router"
|
||||||
|
import { useMemo } from "react"
|
||||||
|
import { $router, Link } from "./router"
|
||||||
|
import { Alert, AlertTitle, AlertDescription } from "./ui/alert"
|
||||||
|
import { Card, CardHeader, CardTitle, CardContent } from "./ui/card"
|
||||||
|
|
||||||
|
export const ActiveAlerts = () => {
|
||||||
|
const alerts = useStore($alerts)
|
||||||
|
const systems = useStore($allSystemsById)
|
||||||
|
|
||||||
|
const { activeAlerts, alertsKey } = useMemo(() => {
|
||||||
|
const activeAlerts: AlertRecord[] = []
|
||||||
|
// key to prevent re-rendering if alerts change but active alerts didn't
|
||||||
|
const alertsKey: string[] = []
|
||||||
|
|
||||||
|
for (const systemId of Object.keys(alerts)) {
|
||||||
|
for (const alert of alerts[systemId].values()) {
|
||||||
|
if (alert.triggered && alert.name in alertInfo) {
|
||||||
|
activeAlerts.push(alert)
|
||||||
|
alertsKey.push(`${alert.system}${alert.value}${alert.min}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { activeAlerts, alertsKey }
|
||||||
|
}, [alerts])
|
||||||
|
|
||||||
|
// biome-ignore lint/correctness/useExhaustiveDependencies: alertsKey is inclusive
|
||||||
|
return useMemo(() => {
|
||||||
|
if (activeAlerts.length === 0) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<Card>
|
||||||
|
<CardHeader className="pb-4 px-2 sm:px-6 max-sm:pt-5 max-sm:pb-1">
|
||||||
|
<div className="px-2 sm:px-1">
|
||||||
|
<CardTitle>
|
||||||
|
<Trans>Active Alerts</Trans>
|
||||||
|
</CardTitle>
|
||||||
|
</div>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent className="max-sm:p-2">
|
||||||
|
{activeAlerts.length > 0 && (
|
||||||
|
<div className="grid sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 gap-3">
|
||||||
|
{activeAlerts.map((alert) => {
|
||||||
|
const info = alertInfo[alert.name as keyof typeof alertInfo]
|
||||||
|
return (
|
||||||
|
<Alert
|
||||||
|
key={alert.id}
|
||||||
|
className="hover:-translate-y-px duration-200 bg-transparent border-foreground/10 hover:shadow-md shadow-black/5"
|
||||||
|
>
|
||||||
|
<info.icon className="h-4 w-4" />
|
||||||
|
<AlertTitle>
|
||||||
|
{systems[alert.system]?.name} {info.name().toLowerCase().replace("cpu", "CPU")}
|
||||||
|
</AlertTitle>
|
||||||
|
<AlertDescription>
|
||||||
|
{alert.name === "Status" ? (
|
||||||
|
<Trans>Connection is down</Trans>
|
||||||
|
) : (
|
||||||
|
<Trans>
|
||||||
|
Exceeds {alert.value}
|
||||||
|
{info.unit} in last <Plural value={alert.min} one="# minute" other="# minutes" />
|
||||||
|
</Trans>
|
||||||
|
)}
|
||||||
|
</AlertDescription>
|
||||||
|
<Link
|
||||||
|
href={getPagePath($router, "system", { id: systems[alert.system]?.id })}
|
||||||
|
className="absolute inset-0 w-full h-full"
|
||||||
|
aria-label="View system"
|
||||||
|
></Link>
|
||||||
|
</Alert>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
)
|
||||||
|
}, [alertsKey.join("")])
|
||||||
|
}
|
||||||
@@ -1,32 +1,20 @@
|
|||||||
// 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 React from "react"
|
import { Area, AreaChart, CartesianGrid, YAxis } from "recharts"
|
||||||
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 { $containerColors, $containerFilter, $stackFilter, $userSettings } from "@/lib/stores"
|
import { $containerFilter, $userSettings } from "@/lib/stores"
|
||||||
import {
|
import { chartMargin, cn, decimalString, formatBytes, formatShortDate, toFixedFloat } from "@/lib/utils"
|
||||||
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: propChartConfig,
|
chartConfig,
|
||||||
unit = "%",
|
unit = "%",
|
||||||
}: {
|
}: {
|
||||||
dataKey: string
|
dataKey: string
|
||||||
@@ -35,168 +23,13 @@ export default memo(function ContainerChart({
|
|||||||
chartConfig: ChartConfig
|
chartConfig: ChartConfig
|
||||||
unit?: string
|
unit?: string
|
||||||
}) {
|
}) {
|
||||||
const containerFilter = useStore($containerFilter)
|
const filter = 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(() => {
|
||||||
@@ -208,40 +41,9 @@ 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 = `${toFixedWithoutTrailingZeros(value, 2)}${unit}`
|
const val = toFixedFloat(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) => {
|
||||||
@@ -255,12 +57,7 @@ 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(
|
const { value: receivedValue, unit: receivedUnit } = formatBytes(received, true, userSettings.unitNet, true)
|
||||||
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">
|
||||||
@@ -275,74 +72,17 @@ 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
|
||||||
}
|
}
|
||||||
@@ -351,11 +91,15 @@ export default memo(function ContainerChart({
|
|||||||
|
|
||||||
// Filter with set lookup
|
// Filter with set lookup
|
||||||
const filteredKeys = useMemo(() => {
|
const filteredKeys = useMemo(() => {
|
||||||
if (!containerFilter || containerFilter.length === 0) {
|
if (!filter) {
|
||||||
return new Set<string>()
|
return new Set<string>()
|
||||||
}
|
}
|
||||||
return new Set(Object.keys(containerChartConfig).filter((key) => !containerFilter.includes(key)))
|
const filterTerms = filter.toLowerCase().split(" ").filter(term => term.length > 0)
|
||||||
}, [containerChartConfig, containerFilter])
|
return new Set(Object.keys(chartConfig).filter((key) => {
|
||||||
|
const keyLower = key.toLowerCase()
|
||||||
|
return !filterTerms.some(term => keyLower.includes(term))
|
||||||
|
}))
|
||||||
|
}, [chartConfig, filter])
|
||||||
|
|
||||||
// console.log('rendered at', new Date())
|
// console.log('rendered at', new Date())
|
||||||
|
|
||||||
@@ -363,228 +107,8 @@ 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 className="w-full h-full">
|
<div>
|
||||||
<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,
|
||||||
@@ -615,14 +139,9 @@ 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={
|
content={<ChartTooltipContent filter={filter} contentFormatter={toolTipFormatter} />}
|
||||||
<ChartTooltipContent
|
|
||||||
filter={containerFilter.length > 0 ? containerFilter.join(",") : undefined}
|
|
||||||
contentFormatter={toolTipFormatter}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
{filterableKeys.map((key) => {
|
{Object.keys(chartConfig).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
|
||||||
@@ -633,11 +152,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={containerChartConfig[key].color}
|
fill={chartConfig[key].color}
|
||||||
fillOpacity={fillOpacity}
|
fillOpacity={fillOpacity}
|
||||||
stroke={containerChartConfig[key].color}
|
stroke={chartConfig[key].color}
|
||||||
strokeOpacity={strokeOpacity}
|
strokeOpacity={strokeOpacity}
|
||||||
activeDot={{ opacity: 1 }}
|
activeDot={{ opacity: filtered ? 0 : 1 }}
|
||||||
stackId="a"
|
stackId="a"
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
@@ -647,358 +166,3 @@ 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>
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|||||||
@@ -1,257 +0,0 @@
|
|||||||
"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>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -91,7 +91,8 @@ export default memo(function TemperatureChart({ chartData }: { chartData: ChartD
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
{colors.map((key) => {
|
{colors.map((key) => {
|
||||||
const filtered = filter && !key.toLowerCase().includes(filter.toLowerCase())
|
const filterTerms = filter ? filter.toLowerCase().split(" ").filter(term => term.length > 0) : []
|
||||||
|
const filtered = filterTerms.length > 0 && !filterTerms.some(term => key.toLowerCase().includes(term))
|
||||||
const strokeOpacity = filtered ? 0.1 : 1
|
const strokeOpacity = filtered ? 0.1 : 1
|
||||||
return (
|
return (
|
||||||
<Line
|
<Line
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { DialogDescription } from "@radix-ui/react-dialog"
|
|||||||
import {
|
import {
|
||||||
AlertOctagonIcon,
|
AlertOctagonIcon,
|
||||||
BookIcon,
|
BookIcon,
|
||||||
|
ContainerIcon,
|
||||||
DatabaseBackupIcon,
|
DatabaseBackupIcon,
|
||||||
FingerprintIcon,
|
FingerprintIcon,
|
||||||
LayoutDashboard,
|
LayoutDashboard,
|
||||||
@@ -80,7 +81,7 @@ export default memo(function CommandPalette({ open, setOpen }: { open: boolean;
|
|||||||
)}
|
)}
|
||||||
<CommandGroup heading={t`Pages / Settings`}>
|
<CommandGroup heading={t`Pages / Settings`}>
|
||||||
<CommandItem
|
<CommandItem
|
||||||
keywords={["home"]}
|
keywords={["home", t`All Systems`]}
|
||||||
onSelect={() => {
|
onSelect={() => {
|
||||||
navigate(basePath)
|
navigate(basePath)
|
||||||
setOpen(false)
|
setOpen(false)
|
||||||
@@ -94,6 +95,20 @@ export default memo(function CommandPalette({ open, setOpen }: { open: boolean;
|
|||||||
<Trans>Page</Trans>
|
<Trans>Page</Trans>
|
||||||
</CommandShortcut>
|
</CommandShortcut>
|
||||||
</CommandItem>
|
</CommandItem>
|
||||||
|
<CommandItem
|
||||||
|
onSelect={() => {
|
||||||
|
navigate(getPagePath($router, "containers"))
|
||||||
|
setOpen(false)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<ContainerIcon className="me-2 size-4" />
|
||||||
|
<span>
|
||||||
|
<Trans>All Containers</Trans>
|
||||||
|
</span>
|
||||||
|
<CommandShortcut>
|
||||||
|
<Trans>Page</Trans>
|
||||||
|
</CommandShortcut>
|
||||||
|
</CommandItem>
|
||||||
<CommandItem
|
<CommandItem
|
||||||
onSelect={() => {
|
onSelect={() => {
|
||||||
navigate(getPagePath($router, "settings", { name: "general" }))
|
navigate(getPagePath($router, "settings", { name: "general" }))
|
||||||
|
|||||||
@@ -0,0 +1,152 @@
|
|||||||
|
import type { Column, ColumnDef } from "@tanstack/react-table"
|
||||||
|
import { Button } from "@/components/ui/button"
|
||||||
|
import { cn, decimalString, formatBytes, hourWithSeconds } from "@/lib/utils"
|
||||||
|
import type { ContainerRecord } from "@/types"
|
||||||
|
import { ContainerHealth, ContainerHealthLabels } from "@/lib/enums"
|
||||||
|
import {
|
||||||
|
ArrowUpDownIcon,
|
||||||
|
ClockIcon,
|
||||||
|
ContainerIcon,
|
||||||
|
CpuIcon,
|
||||||
|
HashIcon,
|
||||||
|
MemoryStickIcon,
|
||||||
|
ServerIcon,
|
||||||
|
ShieldCheckIcon,
|
||||||
|
} from "lucide-react"
|
||||||
|
import { EthernetIcon, HourglassIcon } from "../ui/icons"
|
||||||
|
import { Badge } from "../ui/badge"
|
||||||
|
import { t } from "@lingui/core/macro"
|
||||||
|
import { $allSystemsById } from "@/lib/stores"
|
||||||
|
import { useStore } from "@nanostores/react"
|
||||||
|
|
||||||
|
export const containerChartCols: ColumnDef<ContainerRecord>[] = [
|
||||||
|
{
|
||||||
|
id: "name",
|
||||||
|
sortingFn: (a, b) => a.original.name.localeCompare(b.original.name),
|
||||||
|
accessorFn: (record) => record.name,
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`Name`} Icon={ContainerIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
return <span className="ms-1.5 xl:w-45 block truncate">{getValue() as string}</span>
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "system",
|
||||||
|
accessorFn: (record) => record.system,
|
||||||
|
sortingFn: (a, b) => {
|
||||||
|
const allSystems = $allSystemsById.get()
|
||||||
|
const systemNameA = allSystems[a.original.system]?.name ?? ""
|
||||||
|
const systemNameB = allSystems[b.original.system]?.name ?? ""
|
||||||
|
return systemNameA.localeCompare(systemNameB)
|
||||||
|
},
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`System`} Icon={ServerIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
const allSystems = useStore($allSystemsById)
|
||||||
|
return <span className="ms-1.5 xl:w-32 block truncate">{allSystems[getValue() as string]?.name ?? ""}</span>
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "id",
|
||||||
|
accessorFn: (record) => record.id,
|
||||||
|
sortingFn: (a, b) => a.original.id.localeCompare(b.original.id),
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name="ID" Icon={HashIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
return <span className="ms-1.5 me-3 font-mono">{getValue() as string}</span>
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "cpu",
|
||||||
|
accessorFn: (record) => record.cpu,
|
||||||
|
invertSorting: true,
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`CPU`} Icon={CpuIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
const val = getValue() as number
|
||||||
|
return <span className="ms-1.5 tabular-nums">{`${decimalString(val, val >= 10 ? 1 : 2)}%`}</span>
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "memory",
|
||||||
|
accessorFn: (record) => record.memory,
|
||||||
|
invertSorting: true,
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`Memory`} Icon={MemoryStickIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
const val = getValue() as number
|
||||||
|
const formatted = formatBytes(val, false, undefined, true)
|
||||||
|
return (
|
||||||
|
<span className="ms-1.5 tabular-nums">{`${decimalString(formatted.value, formatted.value >= 10 ? 1 : 2)} ${formatted.unit}`}</span>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "net",
|
||||||
|
accessorFn: (record) => record.net,
|
||||||
|
invertSorting: true,
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`Net`} Icon={EthernetIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
const val = getValue() as number
|
||||||
|
const formatted = formatBytes(val, true, undefined, true)
|
||||||
|
return (
|
||||||
|
<span className="ms-1.5 tabular-nums">{`${decimalString(formatted.value, formatted.value >= 10 ? 1 : 2)} ${formatted.unit}`}</span>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "health",
|
||||||
|
invertSorting: true,
|
||||||
|
accessorFn: (record) => record.health,
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`Health`} Icon={ShieldCheckIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
const healthValue = getValue() as number
|
||||||
|
const healthStatus = ContainerHealthLabels[healthValue] || "Unknown"
|
||||||
|
return (
|
||||||
|
<Badge variant="outline" className="dark:border-white/12">
|
||||||
|
<span className={cn("size-2 me-1.5 rounded-full", {
|
||||||
|
"bg-green-500": healthValue === ContainerHealth.Healthy,
|
||||||
|
"bg-red-500": healthValue === ContainerHealth.Unhealthy,
|
||||||
|
"bg-yellow-500": healthValue === ContainerHealth.Starting,
|
||||||
|
"bg-zinc-500": healthValue === ContainerHealth.None,
|
||||||
|
})}>
|
||||||
|
</span>
|
||||||
|
{healthStatus}
|
||||||
|
</Badge>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "status",
|
||||||
|
accessorFn: (record) => record.status,
|
||||||
|
invertSorting: true,
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`Status`} Icon={HourglassIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
return <span className="ms-1.5 w-25 block truncate">{getValue() as string}</span>
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "updated",
|
||||||
|
invertSorting: true,
|
||||||
|
accessorFn: (record) => record.updated,
|
||||||
|
header: ({ column }) => <HeaderButton column={column} name={t`Updated`} Icon={ClockIcon} />,
|
||||||
|
cell: ({ getValue }) => {
|
||||||
|
const timestamp = getValue() as number
|
||||||
|
return (
|
||||||
|
<span className="ms-1.5 tabular-nums">
|
||||||
|
{hourWithSeconds(new Date(timestamp).toISOString())}
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
function HeaderButton({ column, name, Icon }: { column: Column<ContainerRecord>; name: string; Icon: React.ElementType }) {
|
||||||
|
const isSorted = column.getIsSorted()
|
||||||
|
return (
|
||||||
|
<Button
|
||||||
|
className={cn("h-9 px-3 flex items-center gap-2 duration-50", isSorted && "bg-accent/70 light:bg-accent text-accent-foreground/90")}
|
||||||
|
variant="ghost"
|
||||||
|
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
|
||||||
|
>
|
||||||
|
{Icon && <Icon className="size-4" />}
|
||||||
|
{name}
|
||||||
|
<ArrowUpDownIcon className="size-4" />
|
||||||
|
</Button>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,492 @@
|
|||||||
|
import { t } from "@lingui/core/macro"
|
||||||
|
import { Trans } from "@lingui/react/macro"
|
||||||
|
import {
|
||||||
|
type ColumnFiltersState,
|
||||||
|
flexRender,
|
||||||
|
getCoreRowModel,
|
||||||
|
getFilteredRowModel,
|
||||||
|
getSortedRowModel,
|
||||||
|
type Row,
|
||||||
|
type SortingState,
|
||||||
|
type Table as TableType,
|
||||||
|
useReactTable,
|
||||||
|
type VisibilityState,
|
||||||
|
} from "@tanstack/react-table"
|
||||||
|
import { useVirtualizer, type VirtualItem } from "@tanstack/react-virtual"
|
||||||
|
import { memo, RefObject, useEffect, useRef, useState } from "react"
|
||||||
|
import { Input } from "@/components/ui/input"
|
||||||
|
import { TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
||||||
|
import { pb } from "@/lib/api"
|
||||||
|
import type { ContainerRecord } from "@/types"
|
||||||
|
import { containerChartCols } from "@/components/containers-table/containers-table-columns"
|
||||||
|
import { Card, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
|
||||||
|
import { type ContainerHealth, ContainerHealthLabels } from "@/lib/enums"
|
||||||
|
import { cn, useBrowserStorage } from "@/lib/utils"
|
||||||
|
import { Sheet, SheetTitle, SheetHeader, SheetContent, SheetDescription } from "../ui/sheet"
|
||||||
|
import { Dialog, DialogContent, DialogTitle } from "../ui/dialog"
|
||||||
|
import { Button } from "@/components/ui/button"
|
||||||
|
import { $allSystemsById } from "@/lib/stores"
|
||||||
|
import { MaximizeIcon, RefreshCwIcon } from "lucide-react"
|
||||||
|
import { Separator } from "../ui/separator"
|
||||||
|
import { Link } from "../router"
|
||||||
|
import { listenKeys } from "nanostores"
|
||||||
|
|
||||||
|
const syntaxTheme = "github-dark-dimmed"
|
||||||
|
|
||||||
|
export default function ContainersTable({ systemId }: { systemId?: string }) {
|
||||||
|
const [data, setData] = useState<ContainerRecord[]>([])
|
||||||
|
const [sorting, setSorting] = useBrowserStorage<SortingState>(
|
||||||
|
`sort-c-${systemId ? 1 : 0}`,
|
||||||
|
[{ id: systemId ? "name" : "system", desc: false }],
|
||||||
|
sessionStorage
|
||||||
|
)
|
||||||
|
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])
|
||||||
|
const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({})
|
||||||
|
const [rowSelection, setRowSelection] = useState({})
|
||||||
|
const [globalFilter, setGlobalFilter] = useState("")
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const pbOptions = {
|
||||||
|
fields: "id,name,cpu,memory,net,health,status,system,updated",
|
||||||
|
}
|
||||||
|
|
||||||
|
const fetchData = (lastXMs: number) => {
|
||||||
|
const updated = Date.now() - lastXMs
|
||||||
|
let filter: string
|
||||||
|
if (systemId) {
|
||||||
|
filter = pb.filter("system={:system} && updated > {:updated}", { system: systemId, updated })
|
||||||
|
} else {
|
||||||
|
filter = pb.filter("updated > {:updated}", { updated })
|
||||||
|
}
|
||||||
|
pb.collection<ContainerRecord>("containers")
|
||||||
|
.getList(0, 2000, {
|
||||||
|
...pbOptions,
|
||||||
|
filter,
|
||||||
|
})
|
||||||
|
.then(({ items }) => setData((curItems) => {
|
||||||
|
const containerIds = new Set(items.map(item => item.id))
|
||||||
|
const now = Date.now()
|
||||||
|
for (const item of curItems) {
|
||||||
|
if (!containerIds.has(item.id) && now - item.updated < 70_000) {
|
||||||
|
items.push(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return items
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// initial load
|
||||||
|
fetchData(70_000)
|
||||||
|
|
||||||
|
// if no systemId, poll every 10 seconds
|
||||||
|
if (!systemId) {
|
||||||
|
// poll every 10 seconds
|
||||||
|
const intervalId = setInterval(() => fetchData(10_500), 10_000)
|
||||||
|
// clear interval on unmount
|
||||||
|
return () => clearInterval(intervalId)
|
||||||
|
}
|
||||||
|
|
||||||
|
// if systemId, fetch containers after the system is updated
|
||||||
|
return listenKeys($allSystemsById, [systemId], (_newSystems) => {
|
||||||
|
setTimeout(() => fetchData(1000), 100)
|
||||||
|
})
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const table = useReactTable({
|
||||||
|
data,
|
||||||
|
columns: containerChartCols.filter(col => systemId ? col.id !== "system" : true),
|
||||||
|
getCoreRowModel: getCoreRowModel(),
|
||||||
|
getSortedRowModel: getSortedRowModel(),
|
||||||
|
getFilteredRowModel: getFilteredRowModel(),
|
||||||
|
onSortingChange: setSorting,
|
||||||
|
onColumnFiltersChange: setColumnFilters,
|
||||||
|
onColumnVisibilityChange: setColumnVisibility,
|
||||||
|
onRowSelectionChange: setRowSelection,
|
||||||
|
defaultColumn: {
|
||||||
|
sortUndefined: "last",
|
||||||
|
size: 100,
|
||||||
|
minSize: 0,
|
||||||
|
},
|
||||||
|
state: {
|
||||||
|
sorting,
|
||||||
|
columnFilters,
|
||||||
|
columnVisibility,
|
||||||
|
rowSelection,
|
||||||
|
globalFilter,
|
||||||
|
},
|
||||||
|
onGlobalFilterChange: setGlobalFilter,
|
||||||
|
globalFilterFn: (row, _columnId, filterValue) => {
|
||||||
|
const container = row.original
|
||||||
|
const systemName = $allSystemsById.get()[container.system]?.name ?? ""
|
||||||
|
const id = container.id ?? ""
|
||||||
|
const name = container.name ?? ""
|
||||||
|
const status = container.status ?? ""
|
||||||
|
const healthLabel = ContainerHealthLabels[container.health as ContainerHealth] ?? ""
|
||||||
|
const searchString = `${systemName} ${id} ${name} ${healthLabel} ${status}`.toLowerCase()
|
||||||
|
|
||||||
|
return (filterValue as string)
|
||||||
|
.toLowerCase()
|
||||||
|
.split(" ")
|
||||||
|
.every((term) => searchString.includes(term))
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const rows = table.getRowModel().rows
|
||||||
|
const visibleColumns = table.getVisibleLeafColumns()
|
||||||
|
|
||||||
|
if (!rows.length) return null
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Card className="p-6 @container w-full">
|
||||||
|
<CardHeader className="p-0 mb-4">
|
||||||
|
<div className="grid md:flex gap-5 w-full items-end">
|
||||||
|
<div className="px-2 sm:px-1">
|
||||||
|
<CardTitle className="mb-2">
|
||||||
|
<Trans>All Containers</Trans>
|
||||||
|
</CardTitle>
|
||||||
|
<CardDescription className="flex">
|
||||||
|
<Trans>Click on a container to view more information.</Trans>
|
||||||
|
</CardDescription>
|
||||||
|
</div>
|
||||||
|
<Input
|
||||||
|
placeholder={t`Filter...`}
|
||||||
|
value={globalFilter}
|
||||||
|
onChange={(e) => setGlobalFilter(e.target.value)}
|
||||||
|
className="ms-auto px-4 w-full max-w-full md:w-64"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</CardHeader>
|
||||||
|
<div className="rounded-md">
|
||||||
|
<AllContainersTable table={table} rows={rows} colLength={visibleColumns.length} />
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const AllContainersTable = memo(
|
||||||
|
function AllContainersTable({ table, rows, colLength }: { table: TableType<ContainerRecord>; rows: Row<ContainerRecord>[]; colLength: number }) {
|
||||||
|
// The virtualizer will need a reference to the scrollable container element
|
||||||
|
const scrollRef = useRef<HTMLDivElement>(null)
|
||||||
|
const activeContainer = useRef<ContainerRecord | null>(null)
|
||||||
|
const [sheetOpen, setSheetOpen] = useState(false)
|
||||||
|
const openSheet = (container: ContainerRecord) => {
|
||||||
|
activeContainer.current = container
|
||||||
|
setSheetOpen(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
const virtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({
|
||||||
|
count: rows.length,
|
||||||
|
estimateSize: () => 54,
|
||||||
|
getScrollElement: () => scrollRef.current,
|
||||||
|
overscan: 5,
|
||||||
|
})
|
||||||
|
const virtualRows = virtualizer.getVirtualItems()
|
||||||
|
|
||||||
|
const paddingTop = Math.max(0, virtualRows[0]?.start ?? 0 - virtualizer.options.scrollMargin)
|
||||||
|
const paddingBottom = Math.max(0, virtualizer.getTotalSize() - (virtualRows[virtualRows.length - 1]?.end ?? 0))
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={cn(
|
||||||
|
"h-min max-h-[calc(100dvh-17rem)] max-w-full relative overflow-auto border rounded-md",
|
||||||
|
// don't set min height if there are less than 2 rows, do set if we need to display the empty state
|
||||||
|
(!rows.length || rows.length > 2) && "min-h-50"
|
||||||
|
)}
|
||||||
|
ref={scrollRef}
|
||||||
|
>
|
||||||
|
{/* add header height to table size */}
|
||||||
|
<div style={{ height: `${virtualizer.getTotalSize() + 50}px`, paddingTop, paddingBottom }}>
|
||||||
|
<table className="text-sm w-full h-full">
|
||||||
|
<ContainersTableHead table={table} />
|
||||||
|
<TableBody>
|
||||||
|
{rows.length ? (
|
||||||
|
virtualRows.map((virtualRow) => {
|
||||||
|
const row = rows[virtualRow.index]
|
||||||
|
return (
|
||||||
|
<ContainerTableRow
|
||||||
|
key={row.id}
|
||||||
|
row={row}
|
||||||
|
virtualRow={virtualRow}
|
||||||
|
openSheet={openSheet}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
) : (
|
||||||
|
<TableRow>
|
||||||
|
<TableCell colSpan={colLength} className="h-37 text-center pointer-events-none">
|
||||||
|
<Trans>No results.</Trans>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
)}
|
||||||
|
</TableBody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<ContainerSheet sheetOpen={sheetOpen} setSheetOpen={setSheetOpen} activeContainer={activeContainer} />
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async function getLogsHtml(container: ContainerRecord): Promise<string> {
|
||||||
|
try {
|
||||||
|
const [{ highlighter }, logsHtml] = await Promise.all([import('@/lib/shiki'), pb.send<{ logs: string }>("/api/beszel/containers/logs", {
|
||||||
|
system: container.system,
|
||||||
|
container: container.id,
|
||||||
|
})])
|
||||||
|
return highlighter.codeToHtml(logsHtml.logs, { lang: "log", theme: syntaxTheme })
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getInfoHtml(container: ContainerRecord): Promise<string> {
|
||||||
|
try {
|
||||||
|
let [{ highlighter }, { info }] = await Promise.all([import('@/lib/shiki'), pb.send<{ info: string }>("/api/beszel/containers/info", {
|
||||||
|
system: container.system,
|
||||||
|
container: container.id,
|
||||||
|
})])
|
||||||
|
try {
|
||||||
|
info = JSON.stringify(JSON.parse(info), null, 2)
|
||||||
|
} catch (_) { }
|
||||||
|
return highlighter.codeToHtml(info, { lang: "json", theme: syntaxTheme })
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ContainerSheet({ sheetOpen, setSheetOpen, activeContainer }: { sheetOpen: boolean, setSheetOpen: (open: boolean) => void, activeContainer: RefObject<ContainerRecord | null> }) {
|
||||||
|
const container = activeContainer.current
|
||||||
|
if (!container) return null
|
||||||
|
|
||||||
|
const [logsDisplay, setLogsDisplay] = useState<string>("")
|
||||||
|
const [infoDisplay, setInfoDisplay] = useState<string>("")
|
||||||
|
const [logsFullscreenOpen, setLogsFullscreenOpen] = useState<boolean>(false)
|
||||||
|
const [infoFullscreenOpen, setInfoFullscreenOpen] = useState<boolean>(false)
|
||||||
|
const [isRefreshingLogs, setIsRefreshingLogs] = useState<boolean>(false)
|
||||||
|
const logsContainerRef = useRef<HTMLDivElement>(null)
|
||||||
|
|
||||||
|
function scrollLogsToBottom() {
|
||||||
|
if (logsContainerRef.current) {
|
||||||
|
logsContainerRef.current.scrollTo({ top: logsContainerRef.current.scrollHeight })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const refreshLogs = async () => {
|
||||||
|
setIsRefreshingLogs(true)
|
||||||
|
const startTime = Date.now()
|
||||||
|
|
||||||
|
try {
|
||||||
|
const logsHtml = await getLogsHtml(container)
|
||||||
|
setLogsDisplay(logsHtml)
|
||||||
|
setTimeout(scrollLogsToBottom, 20)
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
} finally {
|
||||||
|
// Ensure minimum spin duration of 800ms
|
||||||
|
const elapsed = Date.now() - startTime
|
||||||
|
const remaining = Math.max(0, 500 - elapsed)
|
||||||
|
setTimeout(() => {
|
||||||
|
setIsRefreshingLogs(false)
|
||||||
|
}, remaining)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setLogsDisplay("")
|
||||||
|
setInfoDisplay("");
|
||||||
|
if (!container) return
|
||||||
|
(async () => {
|
||||||
|
const [logsHtml, infoHtml] = await Promise.all([getLogsHtml(container), getInfoHtml(container)])
|
||||||
|
setLogsDisplay(logsHtml)
|
||||||
|
setInfoDisplay(infoHtml)
|
||||||
|
setTimeout(scrollLogsToBottom, 20)
|
||||||
|
})()
|
||||||
|
}, [container])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<LogsFullscreenDialog
|
||||||
|
open={logsFullscreenOpen}
|
||||||
|
onOpenChange={setLogsFullscreenOpen}
|
||||||
|
logsDisplay={logsDisplay}
|
||||||
|
containerName={container.name}
|
||||||
|
onRefresh={refreshLogs}
|
||||||
|
isRefreshing={isRefreshingLogs}
|
||||||
|
/>
|
||||||
|
<InfoFullscreenDialog
|
||||||
|
open={infoFullscreenOpen}
|
||||||
|
onOpenChange={setInfoFullscreenOpen}
|
||||||
|
infoDisplay={infoDisplay}
|
||||||
|
containerName={container.name}
|
||||||
|
/>
|
||||||
|
<Sheet open={sheetOpen} onOpenChange={setSheetOpen}>
|
||||||
|
<SheetContent className="w-full sm:max-w-220 p-2">
|
||||||
|
<SheetHeader>
|
||||||
|
<SheetTitle>{container.name}</SheetTitle>
|
||||||
|
<SheetDescription className="flex items-center gap-2">
|
||||||
|
<Link className="hover:underline" href={`/system/${container.system}`}>{$allSystemsById.get()[container.system]?.name ?? ""}</Link>
|
||||||
|
<Separator orientation="vertical" className="h-2.5 bg-muted-foreground opacity-70" />
|
||||||
|
{container.status}
|
||||||
|
<Separator orientation="vertical" className="h-2.5 bg-muted-foreground opacity-70" />
|
||||||
|
{container.id}
|
||||||
|
<Separator orientation="vertical" className="h-2.5 bg-muted-foreground opacity-70" />
|
||||||
|
{ContainerHealthLabels[container.health as ContainerHealth]}
|
||||||
|
</SheetDescription>
|
||||||
|
</SheetHeader>
|
||||||
|
<div className="px-3 pb-3 -mt-4 flex flex-col gap-3 h-full items-start">
|
||||||
|
<div className="flex items-center w-full">
|
||||||
|
<h3>{t`Logs`}</h3>
|
||||||
|
<Button
|
||||||
|
variant="ghost"
|
||||||
|
size="sm"
|
||||||
|
onClick={refreshLogs}
|
||||||
|
className="h-8 w-8 p-0 ms-auto"
|
||||||
|
disabled={isRefreshingLogs}
|
||||||
|
>
|
||||||
|
<RefreshCwIcon
|
||||||
|
className={`size-4 transition-transform duration-300 ${isRefreshingLogs ? 'animate-spin' : ''}`}
|
||||||
|
/>
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant="ghost"
|
||||||
|
size="sm"
|
||||||
|
onClick={() => setLogsFullscreenOpen(true)}
|
||||||
|
className="h-8 w-8 p-0"
|
||||||
|
>
|
||||||
|
<MaximizeIcon className="size-4" />
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<div ref={logsContainerRef} className={cn("max-h-[calc(50dvh-10rem)] w-full overflow-auto p-3 rounded-md bg-gh-dark text-sm", !logsDisplay && ["animate-pulse", "h-full"])}>
|
||||||
|
<div dangerouslySetInnerHTML={{ __html: logsDisplay }} />
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center w-full">
|
||||||
|
<h3>{t`Detail`}</h3>
|
||||||
|
<Button
|
||||||
|
variant="ghost"
|
||||||
|
size="sm"
|
||||||
|
onClick={() => setInfoFullscreenOpen(true)}
|
||||||
|
className="h-8 w-8 p-0 ms-auto"
|
||||||
|
>
|
||||||
|
<MaximizeIcon className="size-4" />
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<div className={cn("grow h-[calc(50dvh-4rem)] w-full overflow-auto p-3 rounded-md bg-gh-dark text-sm", !infoDisplay && "animate-pulse")}>
|
||||||
|
<div dangerouslySetInnerHTML={{ __html: infoDisplay }} />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</SheetContent>
|
||||||
|
</Sheet>
|
||||||
|
</>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function ContainersTableHead({ table }: { table: TableType<ContainerRecord> }) {
|
||||||
|
return (
|
||||||
|
<TableHeader className="sticky top-0 z-50 w-full border-b-2">
|
||||||
|
{table.getHeaderGroups().map((headerGroup) => (
|
||||||
|
<tr key={headerGroup.id}>
|
||||||
|
{headerGroup.headers.map((header) => {
|
||||||
|
return (
|
||||||
|
<TableHead className="px-2" key={header.id}>
|
||||||
|
{header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}
|
||||||
|
</TableHead>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</tr>
|
||||||
|
))}
|
||||||
|
</TableHeader>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const ContainerTableRow = memo(
|
||||||
|
function ContainerTableRow({
|
||||||
|
row,
|
||||||
|
virtualRow,
|
||||||
|
openSheet,
|
||||||
|
}: {
|
||||||
|
row: Row<ContainerRecord>
|
||||||
|
virtualRow: VirtualItem
|
||||||
|
openSheet: (container: ContainerRecord) => void
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<TableRow
|
||||||
|
data-state={row.getIsSelected() && "selected"}
|
||||||
|
className="cursor-pointer transition-opacity"
|
||||||
|
onClick={() => openSheet(row.original)}
|
||||||
|
>
|
||||||
|
{row.getVisibleCells().map((cell) => (
|
||||||
|
<TableCell
|
||||||
|
key={cell.id}
|
||||||
|
style={{
|
||||||
|
height: virtualRow.size,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
||||||
|
</TableCell>
|
||||||
|
))}
|
||||||
|
</TableRow>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
function LogsFullscreenDialog({ open, onOpenChange, logsDisplay, containerName, onRefresh, isRefreshing }: { open: boolean, onOpenChange: (open: boolean) => void, logsDisplay: string, containerName: string, onRefresh: () => void | Promise<void>, isRefreshing: boolean }) {
|
||||||
|
const outerContainerRef = useRef<HTMLDivElement>(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (open && logsDisplay) {
|
||||||
|
// Scroll the outer container to bottom
|
||||||
|
const scrollToBottom = () => {
|
||||||
|
if (outerContainerRef.current) {
|
||||||
|
outerContainerRef.current.scrollTop = outerContainerRef.current.scrollHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setTimeout(scrollToBottom, 50)
|
||||||
|
}
|
||||||
|
}, [open, logsDisplay])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||||
|
<DialogContent className="w-[calc(100vw-20px)] h-[calc(100dvh-20px)] max-w-none p-0 bg-gh-dark border-0 text-white">
|
||||||
|
<DialogTitle className="sr-only">{containerName} logs</DialogTitle>
|
||||||
|
<div ref={outerContainerRef} className="h-full overflow-auto">
|
||||||
|
<div className="h-full w-full px-3 leading-relaxed rounded-md bg-gh-dark text-sm">
|
||||||
|
<div className="py-3" dangerouslySetInnerHTML={{ __html: logsDisplay }} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
void onRefresh()
|
||||||
|
}}
|
||||||
|
className="absolute top-3 right-11 opacity-60 hover:opacity-100 p-1"
|
||||||
|
disabled={isRefreshing}
|
||||||
|
title={t`Refresh`}
|
||||||
|
aria-label={t`Refresh`}
|
||||||
|
>
|
||||||
|
<RefreshCwIcon
|
||||||
|
className={`size-4 transition-transform duration-300 ${isRefreshing ? 'animate-spin' : ''}`}
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function InfoFullscreenDialog({ open, onOpenChange, infoDisplay, containerName }: { open: boolean, onOpenChange: (open: boolean) => void, infoDisplay: string, containerName: string }) {
|
||||||
|
return (
|
||||||
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||||
|
<DialogContent className="w-[calc(100vw-20px)] h-[calc(100dvh-20px)] max-w-none p-0 bg-gh-dark border-0 text-white">
|
||||||
|
<DialogTitle className="sr-only">{containerName} info</DialogTitle>
|
||||||
|
<div className="flex-1 overflow-auto">
|
||||||
|
<div className="h-full w-full overflow-auto p-3 rounded-md bg-gh-dark text-sm leading-relaxed">
|
||||||
|
<div dangerouslySetInnerHTML={{ __html: infoDisplay }} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
|
)
|
||||||
|
}
|
||||||
26
internal/site/src/components/footer-repo-link.tsx
Normal file
26
internal/site/src/components/footer-repo-link.tsx
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { GithubIcon } from "lucide-react"
|
||||||
|
import { Separator } from "./ui/separator"
|
||||||
|
|
||||||
|
export function FooterRepoLink() {
|
||||||
|
return (
|
||||||
|
<div className="flex gap-1.5 justify-end items-center pe-3 sm:pe-6 mt-3.5 mb-4 text-xs opacity-80">
|
||||||
|
<a
|
||||||
|
href="https://github.com/henrygd/beszel"
|
||||||
|
target="_blank"
|
||||||
|
className="flex items-center gap-0.5 text-muted-foreground hover:text-foreground duration-75"
|
||||||
|
rel="noopener"
|
||||||
|
>
|
||||||
|
<GithubIcon className="h-3 w-3" /> GitHub
|
||||||
|
</a>
|
||||||
|
<Separator orientation="vertical" className="h-2.5 bg-muted-foreground opacity-70" />
|
||||||
|
<a
|
||||||
|
href="https://github.com/henrygd/beszel/releases"
|
||||||
|
target="_blank"
|
||||||
|
className="text-muted-foreground hover:text-foreground duration-75"
|
||||||
|
rel="noopener"
|
||||||
|
>
|
||||||
|
Beszel {globalThis.BESZEL.HUB_VERSION}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ export function LangToggle() {
|
|||||||
return (
|
return (
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button variant={"ghost"} size="icon" className="hidden 450:flex">
|
<Button variant={"ghost"} size="icon" className="hidden sm:flex">
|
||||||
<LanguagesIcon className="absolute h-[1.2rem] w-[1.2rem] light:opacity-85" />
|
<LanguagesIcon className="absolute h-[1.2rem] w-[1.2rem] light:opacity-85" />
|
||||||
<span className="sr-only">Language</span>
|
<span className="sr-only">Language</span>
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -1,16 +1,27 @@
|
|||||||
|
import { useId } from "react"
|
||||||
|
|
||||||
|
const d = "M146.4 73.1h-30.5V59.8h30.5a3.2 3.2 0 0 0 2.3-1 3.2 3.2 0 0 0 1-2.3q0-.8-.3-1.3a1.5 1.5 0 0 0-.7-.6 4.7 4.7 0 0 0-1-.3l-1.3-.1h-13.9q-3.4 0-6.5-1.3-3-1.3-5.2-3.6a16.9 16.9 0 0 1-3.6-5.3 16.3 16.3 0 0 1-1.3-6.5 16.4 16.4 0 0 1 1.3-6.4q1.3-3.1 3.6-5.4 2.2-2.2 5.2-3.5a16.3 16.3 0 0 1 6.5-1.3h27v13.3h-27a3.2 3.2 0 0 0-2.3 1 3.2 3.2 0 0 0-1 2.3 3.3 3.3 0 0 0 1 2.4 3.3 3.3 0 0 0 1.2.8 3.2 3.2 0 0 0 1.1.2h13.9a18.1 18.1 0 0 1 6 1 17.3 17.3 0 0 1 .4.2q3 1.1 5.3 3.2a15.1 15.1 0 0 1 3.6 4.9 14.7 14.7 0 0 1 1.3 5.4 17.2 17.2 0 0 1 0 .9 16 16 0 0 1-1 5.8 15.4 15.4 0 0 1-.3.7 17.3 17.3 0 0 1-3.6 5.2 16.4 16.4 0 0 1-5.3 3.6 16.2 16.2 0 0 1-6.4 1.3Zm64.5-13.3v13.3h-43.6l22-39h-22V21h43.6l-22 39h22ZM35 73.1H0v-70h35q4.4 0 8.2 1.6a21.4 21.4 0 0 1 6.6 4.6q2.9 2.8 4.5 6.6 1.7 3.8 1.7 8.2a15.4 15.4 0 0 1-.3 3.2 17.6 17.6 0 0 1-.2.8 19.4 19.4 0 0 1-1.5 4 17 17 0 0 1-2.4 3.4 13.5 13.5 0 0 1-2.6 2.3 12.5 12.5 0 0 1-.4.3q1.7 1 3 2.5 1.4 1.6 2.4 3.5a18.3 18.3 0 0 1 1.5 4A17.4 17.4 0 0 1 56 51a15.3 15.3 0 0 1 0 1.1q0 4.3-1.7 8.2a21.4 21.4 0 0 1-4.5 6.6q-2.8 2.9-6.6 4.5-3.8 1.7-8.2 1.7Zm76-43L86 60.4l1.5.3a16.7 16.7 0 0 0 1.6 0q2 0 3.8-.4 1.8-.6 3.4-1.6 1.6-1 2.8-2.4a12.8 12.8 0 0 0 2-3.2l9.8 9.8q-1.9 2.6-4.3 4.7a27 27 0 0 1-5.2 3.6 26.1 26.1 0 0 1-6 2.2 26.8 26.8 0 0 1-6.3.8 26.4 26.4 0 0 1-10.4-2 26.2 26.2 0 0 1-8.5-5.8 26.7 26.7 0 0 1-5.5-8.3 30.4 30.4 0 0 1-.2-.4q-2.1-5-2.1-11.1a31.9 31.9 0 0 1 .7-7 27 27 0 0 1 1.4-4.3 27 27 0 0 1 3.8-6.6 24.5 24.5 0 0 1 2-2.2 26 26 0 0 1 8.4-5.6 27 27 0 0 1 10.4-2 26.3 26.3 0 0 1 6.4.8 26.9 26.9 0 0 1 6 2.2q2.7 1.5 5.2 3.6 2.4 2.1 4.3 4.8Zm152.3 0-25 30.2 1.5.3a16.7 16.7 0 0 0 1.6 0q2 0 3.8-.4 1.8-.6 3.4-1.6 1.5-1 2.8-2.4a12.8 12.8 0 0 0 2-3.2l9.8 9.8q-1.9 2.6-4.3 4.7a27 27 0 0 1-5.2 3.6 26.1 26.1 0 0 1-6 2.2 26.8 26.8 0 0 1-6.3.8 26.4 26.4 0 0 1-10.4-2 26.2 26.2 0 0 1-8.5-5.8A26.7 26.7 0 0 1 217 58a30.4 30.4 0 0 1-.2-.4q-2.1-5-2.1-11.1a31.9 31.9 0 0 1 .7-7 27 27 0 0 1 1.4-4.3 27 27 0 0 1 3.8-6.6 24.5 24.5 0 0 1 2-2.2 26 26 0 0 1 8.4-5.6 27 27 0 0 1 10.4-2 26.3 26.3 0 0 1 6.4.8 26.9 26.9 0 0 1 6 2.2q2.7 1.5 5.2 3.6 2.4 2.1 4.3 4.8ZM283.4 0v73.1H270V0h13.4ZM14 17v14.1h21a7 7 0 0 0 2.3-.4 6.6 6.6 0 0 0 .4-.1Q39 30 40 29a6.9 6.9 0 0 0 1.5-2.3q.5-1.3.5-2.7a7 7 0 0 0-.4-2.3 6.6 6.6 0 0 0-.1-.5q-.6-1.2-1.5-2.2a7 7 0 0 0-2.3-1.5 6.9 6.9 0 0 0-2.5-.5 7.9 7.9 0 0 0-.2 0H14Zm0 28.1v14h21a7 7 0 0 0 2.3-.4 6.6 6.6 0 0 0 .4-.2Q39 58 40 57.1a7 7 0 0 0 1.5-2.3 6.9 6.9 0 0 0 .5-2.5 7.9 7.9 0 0 0 0-.2 7 7 0 0 0-.4-2.3 6.6 6.6 0 0 0-.1-.4Q40.9 48 40 47a7 7 0 0 0-2.3-1.4 6.9 6.9 0 0 0-2.5-.6 7.9 7.9 0 0 0-.2 0H14Zm63.3 8.3 15.5-20.6a8 8 0 0 0-1.4-.4 7 7 0 0 0-.4 0 17.2 17.2 0 0 0-1.6-.1 19.2 19.2 0 0 0-.3 0 13.3 13.3 0 0 0-5.1 1q-2.5 1-4.2 2.8a13.1 13.1 0 0 0-2.5 3.6 15.5 15.5 0 0 0-.3.9 14.7 14.7 0 0 0-1 3.5 18.7 18.7 0 0 0 0 2.4 17.6 17.6 0 0 0 0 .7v.8a29.4 29.4 0 0 0 0 .1 19.2 19.2 0 0 0 .2 2 20.2 20.2 0 0 0 .4 1.6 18.6 18.6 0 0 0 0 .2 7.5 7.5 0 0 0 .4.9 6 6 0 0 0 .3.6Zm152.3 0L245 32.8a8 8 0 0 0-1.4-.4 7 7 0 0 0-.4 0 17.2 17.2 0 0 0-1.6-.1 19.2 19.2 0 0 0-.3 0 13.3 13.3 0 0 0-5.1 1q-2.5 1-4.2 2.8a13.1 13.1 0 0 0-2.5 3.6 15.5 15.5 0 0 0-.4.9 14.7 14.7 0 0 0-.8 3.5 18.7 18.7 0 0 0-.2 2.4 17.6 17.6 0 0 0 0 .7v.8a29.4 29.4 0 0 0 .1.1 19.2 19.2 0 0 0 .2 2 20.2 20.2 0 0 0 .4 1.6 18.6 18.6 0 0 0 0 .2 7.5 7.5 0 0 0 .4.9 6 6 0 0 0 .3.6Z"
|
||||||
|
|
||||||
export function Logo({ className }: { className?: string }) {
|
export function Logo({ className }: { className?: string }) {
|
||||||
|
const id = useId()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// Righteous
|
// Righteous font from Google Fonts
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 285 75" className={className}>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 285 75" className={className}>
|
||||||
{/* <defs>
|
<defs>
|
||||||
<linearGradient id="gradient" x1="0%" y1="20%" x2="100%" y2="120%">
|
<linearGradient id={id} x1="0%" y1="20%" x2="100%" y2="120%">
|
||||||
<stop offset="0%" style={{ stopColor: "#747bff" }} />
|
<stop offset="10%" style={{ stopColor: "#747bff" }} />
|
||||||
<stop offset="100%" style={{ stopColor: "#24eb5c" }} />
|
<stop offset="90%" style={{ stopColor: "#24eb5c" }} />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
</defs> */}
|
</defs>
|
||||||
<path
|
<path
|
||||||
// fill="url(#gradient)"
|
className="duration-250 group-hover:opacity-0 group-hover:ease-in ease-out"
|
||||||
d="M146.4 73.1h-30.5V59.8h30.5a3.2 3.2 0 0 0 2.3-1 3.2 3.2 0 0 0 1-2.3q0-.8-.3-1.3a1.5 1.5 0 0 0-.7-.6 4.7 4.7 0 0 0-1-.3l-1.3-.1h-13.9q-3.4 0-6.5-1.3-3-1.3-5.2-3.6a16.9 16.9 0 0 1-3.6-5.3 16.3 16.3 0 0 1-1.3-6.5 16.4 16.4 0 0 1 1.3-6.4q1.3-3.1 3.6-5.4 2.2-2.2 5.2-3.5a16.3 16.3 0 0 1 6.5-1.3h27v13.3h-27a3.2 3.2 0 0 0-2.3 1 3.2 3.2 0 0 0-1 2.3 3.3 3.3 0 0 0 1 2.4 3.3 3.3 0 0 0 1.2.8 3.2 3.2 0 0 0 1.1.2h13.9a18.1 18.1 0 0 1 6 1 17.3 17.3 0 0 1 .4.2q3 1.1 5.3 3.2a15.1 15.1 0 0 1 3.6 4.9 14.7 14.7 0 0 1 1.3 5.4 17.2 17.2 0 0 1 0 .9 16 16 0 0 1-1 5.8 15.4 15.4 0 0 1-.3.7 17.3 17.3 0 0 1-3.6 5.2 16.4 16.4 0 0 1-5.3 3.6 16.2 16.2 0 0 1-6.4 1.3Zm64.5-13.3v13.3h-43.6l22-39h-22V21h43.6l-22 39h22ZM35 73.1H0v-70h35q4.4 0 8.2 1.6a21.4 21.4 0 0 1 6.6 4.6q2.9 2.8 4.5 6.6 1.7 3.8 1.7 8.2a15.4 15.4 0 0 1-.3 3.2 17.6 17.6 0 0 1-.2.8 19.4 19.4 0 0 1-1.5 4 17 17 0 0 1-2.4 3.4 13.5 13.5 0 0 1-2.6 2.3 12.5 12.5 0 0 1-.4.3q1.7 1 3 2.5 1.4 1.6 2.4 3.5a18.3 18.3 0 0 1 1.5 4A17.4 17.4 0 0 1 56 51a15.3 15.3 0 0 1 0 1.1q0 4.3-1.7 8.2a21.4 21.4 0 0 1-4.5 6.6q-2.8 2.9-6.6 4.5-3.8 1.7-8.2 1.7Zm76-43L86 60.4l1.5.3a16.7 16.7 0 0 0 1.6 0q2 0 3.8-.4 1.8-.6 3.4-1.6 1.6-1 2.8-2.4a12.8 12.8 0 0 0 2-3.2l9.8 9.8q-1.9 2.6-4.3 4.7a27 27 0 0 1-5.2 3.6 26.1 26.1 0 0 1-6 2.2 26.8 26.8 0 0 1-6.3.8 26.4 26.4 0 0 1-10.4-2 26.2 26.2 0 0 1-8.5-5.8 26.7 26.7 0 0 1-5.5-8.3 30.4 30.4 0 0 1-.2-.4q-2.1-5-2.1-11.1a31.9 31.9 0 0 1 .7-7 27 27 0 0 1 1.4-4.3 27 27 0 0 1 3.8-6.6 24.5 24.5 0 0 1 2-2.2 26 26 0 0 1 8.4-5.6 27 27 0 0 1 10.4-2 26.3 26.3 0 0 1 6.4.8 26.9 26.9 0 0 1 6 2.2q2.7 1.5 5.2 3.6 2.4 2.1 4.3 4.8Zm152.3 0-25 30.2 1.5.3a16.7 16.7 0 0 0 1.6 0q2 0 3.8-.4 1.8-.6 3.4-1.6 1.5-1 2.8-2.4a12.8 12.8 0 0 0 2-3.2l9.8 9.8q-1.9 2.6-4.3 4.7a27 27 0 0 1-5.2 3.6 26.1 26.1 0 0 1-6 2.2 26.8 26.8 0 0 1-6.3.8 26.4 26.4 0 0 1-10.4-2 26.2 26.2 0 0 1-8.5-5.8A26.7 26.7 0 0 1 217 58a30.4 30.4 0 0 1-.2-.4q-2.1-5-2.1-11.1a31.9 31.9 0 0 1 .7-7 27 27 0 0 1 1.4-4.3 27 27 0 0 1 3.8-6.6 24.5 24.5 0 0 1 2-2.2 26 26 0 0 1 8.4-5.6 27 27 0 0 1 10.4-2 26.3 26.3 0 0 1 6.4.8 26.9 26.9 0 0 1 6 2.2q2.7 1.5 5.2 3.6 2.4 2.1 4.3 4.8ZM283.4 0v73.1H270V0h13.4ZM14 17v14.1h21a7 7 0 0 0 2.3-.4 6.6 6.6 0 0 0 .4-.1Q39 30 40 29a6.9 6.9 0 0 0 1.5-2.3q.5-1.3.5-2.7a7 7 0 0 0-.4-2.3 6.6 6.6 0 0 0-.1-.5q-.6-1.2-1.5-2.2a7 7 0 0 0-2.3-1.5 6.9 6.9 0 0 0-2.5-.5 7.9 7.9 0 0 0-.2 0H14Zm0 28.1v14h21a7 7 0 0 0 2.3-.4 6.6 6.6 0 0 0 .4-.2Q39 58 40 57.1a7 7 0 0 0 1.5-2.3 6.9 6.9 0 0 0 .5-2.5 7.9 7.9 0 0 0 0-.2 7 7 0 0 0-.4-2.3 6.6 6.6 0 0 0-.1-.4Q40.9 48 40 47a7 7 0 0 0-2.3-1.4 6.9 6.9 0 0 0-2.5-.6 7.9 7.9 0 0 0-.2 0H14Zm63.3 8.3 15.5-20.6a8 8 0 0 0-1.4-.4 7 7 0 0 0-.4 0 17.2 17.2 0 0 0-1.6-.1 19.2 19.2 0 0 0-.3 0 13.3 13.3 0 0 0-5.1 1q-2.5 1-4.2 2.8a13.1 13.1 0 0 0-2.5 3.6 15.5 15.5 0 0 0-.3.9 14.7 14.7 0 0 0-1 3.5 18.7 18.7 0 0 0 0 2.4 17.6 17.6 0 0 0 0 .7v.8a29.4 29.4 0 0 0 0 .1 19.2 19.2 0 0 0 .2 2 20.2 20.2 0 0 0 .4 1.6 18.6 18.6 0 0 0 0 .2 7.5 7.5 0 0 0 .4.9 6 6 0 0 0 .3.6Zm152.3 0L245 32.8a8 8 0 0 0-1.4-.4 7 7 0 0 0-.4 0 17.2 17.2 0 0 0-1.6-.1 19.2 19.2 0 0 0-.3 0 13.3 13.3 0 0 0-5.1 1q-2.5 1-4.2 2.8a13.1 13.1 0 0 0-2.5 3.6 15.5 15.5 0 0 0-.4.9 14.7 14.7 0 0 0-.8 3.5 18.7 18.7 0 0 0-.2 2.4 17.6 17.6 0 0 0 0 .7v.8a29.4 29.4 0 0 0 .1.1 19.2 19.2 0 0 0 .2 2 20.2 20.2 0 0 0 .4 1.6 18.6 18.6 0 0 0 0 .2 7.5 7.5 0 0 0 .4.9 6 6 0 0 0 .3.6Z"
|
d={d}
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
className="opacity-0 duration-250 group-hover:opacity-100 ease-in-out"
|
||||||
|
fill={`url(#${id})`}
|
||||||
|
d={d}
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Trans } from "@lingui/react/macro"
|
import { Trans } from "@lingui/react/macro"
|
||||||
import { getPagePath } from "@nanostores/router"
|
import { getPagePath } from "@nanostores/router"
|
||||||
import {
|
import {
|
||||||
|
ContainerIcon,
|
||||||
DatabaseBackupIcon,
|
DatabaseBackupIcon,
|
||||||
LogOutIcon,
|
LogOutIcon,
|
||||||
LogsIcon,
|
LogsIcon,
|
||||||
@@ -39,7 +40,7 @@ export default function Navbar() {
|
|||||||
<Link
|
<Link
|
||||||
href={basePath}
|
href={basePath}
|
||||||
aria-label="Home"
|
aria-label="Home"
|
||||||
className="p-2 ps-0 me-3"
|
className="p-2 ps-0 me-3 group"
|
||||||
onMouseEnter={runOnce(() => import("@/components/routes/home"))}
|
onMouseEnter={runOnce(() => import("@/components/routes/home"))}
|
||||||
>
|
>
|
||||||
<Logo className="h-[1.1rem] md:h-5 fill-foreground" />
|
<Logo className="h-[1.1rem] md:h-5 fill-foreground" />
|
||||||
@@ -47,18 +48,25 @@ export default function Navbar() {
|
|||||||
<SearchButton />
|
<SearchButton />
|
||||||
|
|
||||||
<div className="flex items-center ms-auto" onMouseEnter={() => import("@/components/routes/settings/general")}>
|
<div className="flex items-center ms-auto" onMouseEnter={() => import("@/components/routes/settings/general")}>
|
||||||
|
<Link
|
||||||
|
href={getPagePath($router, "containers")}
|
||||||
|
className={cn(buttonVariants({ variant: "ghost", size: "icon" }))}
|
||||||
|
aria-label="Containers"
|
||||||
|
>
|
||||||
|
<ContainerIcon className="h-[1.2rem] w-[1.2rem]" strokeWidth={1.5} />
|
||||||
|
</Link>
|
||||||
<LangToggle />
|
<LangToggle />
|
||||||
<ModeToggle />
|
<ModeToggle />
|
||||||
<Link
|
<Link
|
||||||
href={getPagePath($router, "settings", { name: "general" })}
|
href={getPagePath($router, "settings", { name: "general" })}
|
||||||
aria-label="Settings"
|
aria-label="Settings"
|
||||||
className={cn("", buttonVariants({ variant: "ghost", size: "icon" }))}
|
className={cn(buttonVariants({ variant: "ghost", size: "icon" }))}
|
||||||
>
|
>
|
||||||
<SettingsIcon className="h-[1.2rem] w-[1.2rem]" />
|
<SettingsIcon className="h-[1.2rem] w-[1.2rem]" />
|
||||||
</Link>
|
</Link>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<button aria-label="User Actions" className={cn("", buttonVariants({ variant: "ghost", size: "icon" }))}>
|
<button aria-label="User Actions" className={cn(buttonVariants({ variant: "ghost", size: "icon" }))}>
|
||||||
<UserIcon className="h-[1.2rem] w-[1.2rem]" />
|
<UserIcon className="h-[1.2rem] w-[1.2rem]" />
|
||||||
</button>
|
</button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
@@ -112,7 +120,7 @@ export default function Navbar() {
|
|||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
<AddSystemButton className="ms-2" />
|
<AddSystemButton className="ms-2 hidden 450:flex" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { createRouter } from "@nanostores/router"
|
|||||||
|
|
||||||
const routes = {
|
const routes = {
|
||||||
home: "/",
|
home: "/",
|
||||||
|
containers: "/containers",
|
||||||
system: `/system/:id`,
|
system: `/system/:id`,
|
||||||
settings: `/settings/:name?`,
|
settings: `/settings/:name?`,
|
||||||
forgot_password: `/forgot-password`,
|
forgot_password: `/forgot-password`,
|
||||||
|
|||||||
26
internal/site/src/components/routes/containers.tsx
Normal file
26
internal/site/src/components/routes/containers.tsx
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { useLingui } from "@lingui/react/macro"
|
||||||
|
import { memo, useEffect, useMemo } from "react"
|
||||||
|
import ContainersTable from "@/components/containers-table/containers-table"
|
||||||
|
import { ActiveAlerts } from "@/components/active-alerts"
|
||||||
|
import { FooterRepoLink } from "@/components/footer-repo-link"
|
||||||
|
|
||||||
|
export default memo(() => {
|
||||||
|
const { t } = useLingui()
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = `${t`All Containers`} / Beszel`
|
||||||
|
}, [t])
|
||||||
|
|
||||||
|
return useMemo(
|
||||||
|
() => (
|
||||||
|
<>
|
||||||
|
<div className="grid gap-4">
|
||||||
|
<ActiveAlerts />
|
||||||
|
<ContainersTable />
|
||||||
|
</div>
|
||||||
|
<FooterRepoLink />
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
})
|
||||||
@@ -1,128 +1,28 @@
|
|||||||
import { Plural, Trans, useLingui } from "@lingui/react/macro"
|
import { useLingui } from "@lingui/react/macro"
|
||||||
import { useStore } from "@nanostores/react"
|
|
||||||
import { getPagePath } from "@nanostores/router"
|
|
||||||
import { GithubIcon } from "lucide-react"
|
|
||||||
import { memo, Suspense, useEffect, useMemo } from "react"
|
import { memo, Suspense, useEffect, useMemo } from "react"
|
||||||
import { $router, Link } from "@/components/router"
|
|
||||||
import SystemsTable from "@/components/systems-table/systems-table"
|
import SystemsTable from "@/components/systems-table/systems-table"
|
||||||
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
|
import { ActiveAlerts } from "@/components/active-alerts"
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
|
import { FooterRepoLink } from "@/components/footer-repo-link"
|
||||||
import { Separator } from "@/components/ui/separator"
|
|
||||||
import { alertInfo } from "@/lib/alerts"
|
|
||||||
import { $alerts, $allSystemsById } from "@/lib/stores"
|
|
||||||
import type { AlertRecord } from "@/types"
|
|
||||||
|
|
||||||
export default memo(() => {
|
export default memo(() => {
|
||||||
const { t } = useLingui()
|
const { t } = useLingui()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = `${t`Dashboard`} / Beszel`
|
document.title = `${t`All Systems`} / Beszel`
|
||||||
}, [t])
|
}, [t])
|
||||||
|
|
||||||
return useMemo(
|
return useMemo(
|
||||||
() => (
|
() => (
|
||||||
<>
|
<>
|
||||||
<ActiveAlerts />
|
<div className="flex flex-col gap-4">
|
||||||
<Suspense>
|
<ActiveAlerts />
|
||||||
<SystemsTable />
|
<Suspense>
|
||||||
</Suspense>
|
<SystemsTable />
|
||||||
|
</Suspense>
|
||||||
<div className="flex gap-1.5 justify-end items-center pe-3 sm:pe-6 mt-3.5 mb-4 text-xs opacity-80">
|
|
||||||
<a
|
|
||||||
href="https://github.com/henrygd/beszel"
|
|
||||||
target="_blank"
|
|
||||||
className="flex items-center gap-0.5 text-muted-foreground hover:text-foreground duration-75"
|
|
||||||
rel="noopener"
|
|
||||||
>
|
|
||||||
<GithubIcon className="h-3 w-3" /> GitHub
|
|
||||||
</a>
|
|
||||||
<Separator orientation="vertical" className="h-2.5 bg-muted-foreground opacity-70" />
|
|
||||||
<a
|
|
||||||
href="https://github.com/henrygd/beszel/releases"
|
|
||||||
target="_blank"
|
|
||||||
className="text-muted-foreground hover:text-foreground duration-75"
|
|
||||||
rel="noopener"
|
|
||||||
>
|
|
||||||
Beszel {globalThis.BESZEL.HUB_VERSION}
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
<FooterRepoLink />
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
[]
|
[]
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const ActiveAlerts = () => {
|
|
||||||
const alerts = useStore($alerts)
|
|
||||||
const systems = useStore($allSystemsById)
|
|
||||||
|
|
||||||
const { activeAlerts, alertsKey } = useMemo(() => {
|
|
||||||
const activeAlerts: AlertRecord[] = []
|
|
||||||
// key to prevent re-rendering if alerts change but active alerts didn't
|
|
||||||
const alertsKey: string[] = []
|
|
||||||
|
|
||||||
for (const systemId of Object.keys(alerts)) {
|
|
||||||
for (const alert of alerts[systemId].values()) {
|
|
||||||
if (alert.triggered && alert.name in alertInfo) {
|
|
||||||
activeAlerts.push(alert)
|
|
||||||
alertsKey.push(`${alert.system}${alert.value}${alert.min}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return { activeAlerts, alertsKey }
|
|
||||||
}, [alerts])
|
|
||||||
|
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: alertsKey is inclusive
|
|
||||||
return useMemo(() => {
|
|
||||||
if (activeAlerts.length === 0) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
<Card className="mb-4">
|
|
||||||
<CardHeader className="pb-4 px-2 sm:px-6 max-sm:pt-5 max-sm:pb-1">
|
|
||||||
<div className="px-2 sm:px-1">
|
|
||||||
<CardTitle>
|
|
||||||
<Trans>Active Alerts</Trans>
|
|
||||||
</CardTitle>
|
|
||||||
</div>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="max-sm:p-2">
|
|
||||||
{activeAlerts.length > 0 && (
|
|
||||||
<div className="grid sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 gap-3">
|
|
||||||
{activeAlerts.map((alert) => {
|
|
||||||
const info = alertInfo[alert.name as keyof typeof alertInfo]
|
|
||||||
return (
|
|
||||||
<Alert
|
|
||||||
key={alert.id}
|
|
||||||
className="hover:-translate-y-px duration-200 bg-transparent border-foreground/10 hover:shadow-md shadow-black/5"
|
|
||||||
>
|
|
||||||
<info.icon className="h-4 w-4" />
|
|
||||||
<AlertTitle>
|
|
||||||
{systems[alert.system]?.name} {info.name().toLowerCase().replace("cpu", "CPU")}
|
|
||||||
</AlertTitle>
|
|
||||||
<AlertDescription>
|
|
||||||
{alert.name === "Status" ? (
|
|
||||||
<Trans>Connection is down</Trans>
|
|
||||||
) : (
|
|
||||||
<Trans>
|
|
||||||
Exceeds {alert.value}
|
|
||||||
{info.unit} in last <Plural value={alert.min} one="# minute" other="# minutes" />
|
|
||||||
</Trans>
|
|
||||||
)}
|
|
||||||
</AlertDescription>
|
|
||||||
<Link
|
|
||||||
href={getPagePath($router, "system", { id: systems[alert.system]?.id })}
|
|
||||||
className="absolute inset-0 w-full h-full"
|
|
||||||
aria-label="View system"
|
|
||||||
></Link>
|
|
||||||
</Alert>
|
|
||||||
)
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
)
|
|
||||||
}, [alertsKey.join("")])
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -6,16 +6,14 @@ 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"
|
||||||
import React, { type JSX, memo, useCallback, useEffect, useMemo, useRef, useState } from "react"
|
import React, { type JSX, lazy, memo, useCallback, useEffect, useMemo, useRef, useState } from "react"
|
||||||
import AreaChartDefault, { type DataPoint } from "@/components/charts/area-chart"
|
import AreaChartDefault, { type DataPoint } from "@/components/charts/area-chart"
|
||||||
import ContainerChart from "@/components/charts/container-chart"
|
import ContainerChart from "@/components/charts/container-chart"
|
||||||
import DiskChart from "@/components/charts/disk-chart"
|
import DiskChart from "@/components/charts/disk-chart"
|
||||||
@@ -32,11 +30,9 @@ import {
|
|||||||
$allSystemsById,
|
$allSystemsById,
|
||||||
$allSystemsByName,
|
$allSystemsByName,
|
||||||
$chartTime,
|
$chartTime,
|
||||||
$containerColors,
|
|
||||||
$containerFilter,
|
$containerFilter,
|
||||||
$direction,
|
$direction,
|
||||||
$maxValues,
|
$maxValues,
|
||||||
$stackFilter,
|
|
||||||
$systems,
|
$systems,
|
||||||
$temperatureFilter,
|
$temperatureFilter,
|
||||||
$userSettings,
|
$userSettings,
|
||||||
@@ -73,11 +69,12 @@ 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"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
type ChartTimeData = {
|
type ChartTimeData = {
|
||||||
time: number
|
time: number
|
||||||
data: {
|
data: {
|
||||||
@@ -175,7 +172,6 @@ export default memo(function SystemDetail({ id }: { id: string }) {
|
|||||||
const [containerData, setContainerData] = useState([] as ChartData["containerData"])
|
const [containerData, setContainerData] = useState([] as ChartData["containerData"])
|
||||||
const netCardRef = useRef<HTMLDivElement>(null)
|
const netCardRef = useRef<HTMLDivElement>(null)
|
||||||
const persistChartTime = useRef(false)
|
const persistChartTime = useRef(false)
|
||||||
const [bottomSpacing, setBottomSpacing] = useState(0)
|
|
||||||
const [chartLoading, setChartLoading] = useState(true)
|
const [chartLoading, setChartLoading] = useState(true)
|
||||||
const isLongerChart = !["1m", "1h"].includes(chartTime) // true if chart time is not 1m or 1h
|
const isLongerChart = !["1m", "1h"].includes(chartTime) // true if chart time is not 1m or 1h
|
||||||
const userSettings = $userSettings.get()
|
const userSettings = $userSettings.get()
|
||||||
@@ -219,7 +215,7 @@ export default memo(function SystemDetail({ id }: { id: string }) {
|
|||||||
// subscribe to realtime metrics if chart time is 1m
|
// subscribe to realtime metrics if chart time is 1m
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: not necessary
|
// biome-ignore lint/correctness/useExhaustiveDependencies: not necessary
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let unsub = () => {}
|
let unsub = () => { }
|
||||||
if (!system.id || chartTime !== "1m") {
|
if (!system.id || chartTime !== "1m") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -400,77 +396,6 @@ export default memo(function SystemDetail({ id }: { id: string }) {
|
|||||||
}[]
|
}[]
|
||||||
}, [system, t])
|
}, [system, t])
|
||||||
|
|
||||||
/** Space for tooltip if more than 12 containers */
|
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: filters accessed via .get()
|
|
||||||
useEffect(() => {
|
|
||||||
const calculateSpacing = () => {
|
|
||||||
if (!netCardRef.current || !containerData.length) {
|
|
||||||
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()
|
|
||||||
}
|
|
||||||
}, [containerData])
|
|
||||||
|
|
||||||
// keyboard navigation between systems
|
// keyboard navigation between systems
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!systems.length) {
|
if (!systems.length) {
|
||||||
@@ -516,14 +441,7 @@ 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 containerData={containerData} /> : null
|
const containerFilterBar = containerData.length ? <FilterBar /> : 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 ?? {})
|
||||||
@@ -638,22 +556,6 @@ 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
|
||||||
@@ -679,6 +581,23 @@ 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}
|
||||||
@@ -689,6 +608,23 @@ 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>
|
||||||
@@ -791,6 +727,29 @@ 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
|
||||||
@@ -1015,129 +974,10 @@ export default memo(function SystemDetail({ id }: { id: string }) {
|
|||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</TabsContent>
|
{id && containerData.length > 0 && (
|
||||||
|
<LazyContainersTable systemId={id} />
|
||||||
{/* 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 */}
|
|
||||||
{bottomSpacing > 0 && <span className="block" style={{ height: bottomSpacing }} />}
|
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@@ -1164,121 +1004,38 @@ function GpuEnginesChart({ chartData }: { chartData: ChartData }) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function FilterBar({
|
function FilterBar({ store = $containerFilter }: { store?: typeof $containerFilter }) {
|
||||||
store = $containerFilter,
|
const containerFilter = useStore(store)
|
||||||
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)
|
|
||||||
|
|
||||||
// Extract all unique container names or stack names from current data
|
const debouncedStoreSet = useMemo(() => debounce((value: string) => store.set(value), 80), [store])
|
||||||
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 toggleItem = useCallback((item: string) => {
|
const handleChange = useCallback(
|
||||||
const current = store.get()
|
(e: React.ChangeEvent<HTMLInputElement>) => debouncedStoreSet(e.target.value),
|
||||||
if (current.includes(item)) {
|
[debouncedStoreSet]
|
||||||
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>
|
<>
|
||||||
<Button
|
<Input
|
||||||
variant="outline"
|
placeholder={t`Filter...`}
|
||||||
size="sm"
|
className="ps-4 pe-8 w-full sm:w-44"
|
||||||
className="h-9 w-full sm:w-44 justify-between"
|
onChange={handleChange}
|
||||||
onClick={() => setOpen(!open)}
|
value={containerFilter}
|
||||||
>
|
/>
|
||||||
<span className="truncate">
|
{containerFilter && (
|
||||||
{selected.length === 0
|
<Button
|
||||||
? (mode === "stack" ? t`Filter stacks...` : t`Filter containers...`)
|
type="button"
|
||||||
: `${selected.length} selected`
|
variant="ghost"
|
||||||
}
|
size="icon"
|
||||||
</span>
|
aria-label="Clear"
|
||||||
<ChevronRightSquareIcon className="ml-2 h-4 w-4 opacity-50" />
|
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"
|
||||||
</Button>
|
onClick={() => store.set("")}
|
||||||
{open && (
|
>
|
||||||
<div className="absolute z-50 mt-1 w-full sm:w-64 bg-popover border rounded-md shadow-md">
|
<XIcon className="h-4 w-4" />
|
||||||
<div className="p-2 space-y-1 max-h-64 overflow-y-auto">
|
</Button>
|
||||||
{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>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1346,3 +1103,14 @@ export function ChartCard({
|
|||||||
</Card>
|
</Card>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ContainersTable = lazy(() => import("../containers-table/containers-table"))
|
||||||
|
|
||||||
|
function LazyContainersTable({ systemId }: { systemId: string }) {
|
||||||
|
const { isIntersecting, ref } = useIntersectionObserver()
|
||||||
|
return (
|
||||||
|
<div ref={ref}>
|
||||||
|
{isIntersecting && <ContainersTable systemId={systemId} />}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -91,16 +91,16 @@ const ChartTooltip = RechartsPrimitive.Tooltip
|
|||||||
const ChartTooltipContent = React.forwardRef<
|
const ChartTooltipContent = React.forwardRef<
|
||||||
HTMLDivElement,
|
HTMLDivElement,
|
||||||
React.ComponentProps<typeof RechartsPrimitive.Tooltip> &
|
React.ComponentProps<typeof RechartsPrimitive.Tooltip> &
|
||||||
React.ComponentProps<"div"> & {
|
React.ComponentProps<"div"> & {
|
||||||
hideLabel?: boolean
|
hideLabel?: boolean
|
||||||
indicator?: "line" | "dot" | "dashed"
|
indicator?: "line" | "dot" | "dashed"
|
||||||
nameKey?: string
|
nameKey?: string
|
||||||
labelKey?: string
|
labelKey?: string
|
||||||
unit?: string
|
unit?: string
|
||||||
filter?: string | string[]
|
filter?: string
|
||||||
contentFormatter?: (item: any, key: string) => React.ReactNode | string
|
contentFormatter?: (item: any, key: string) => React.ReactNode | string
|
||||||
truncate?: boolean
|
truncate?: boolean
|
||||||
}
|
}
|
||||||
>(
|
>(
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
@@ -129,19 +129,17 @@ const ChartTooltipContent = React.forwardRef<
|
|||||||
|
|
||||||
React.useMemo(() => {
|
React.useMemo(() => {
|
||||||
if (filter) {
|
if (filter) {
|
||||||
if (Array.isArray(filter)) {
|
const filterTerms = filter.toLowerCase().split(" ").filter(term => term.length > 0)
|
||||||
// Array filter: only show items that are in the filter array
|
payload = payload?.filter((item) => {
|
||||||
payload = payload?.filter((item) => filter.includes(item.name as string))
|
const itemName = (item.name as string)?.toLowerCase()
|
||||||
} else {
|
return filterTerms.some(term => itemName?.includes(term))
|
||||||
// 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, filter])
|
}, [itemSorter, payload])
|
||||||
|
|
||||||
const tooltipLabel = React.useMemo(() => {
|
const tooltipLabel = React.useMemo(() => {
|
||||||
if (hideLabel || !payload?.length) {
|
if (hideLabel || !payload?.length) {
|
||||||
@@ -256,10 +254,10 @@ const ChartLegend = RechartsPrimitive.Legend
|
|||||||
const ChartLegendContent = React.forwardRef<
|
const ChartLegendContent = React.forwardRef<
|
||||||
HTMLDivElement,
|
HTMLDivElement,
|
||||||
React.ComponentProps<"div"> &
|
React.ComponentProps<"div"> &
|
||||||
Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
|
Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
|
||||||
hideIcon?: boolean
|
hideIcon?: boolean
|
||||||
nameKey?: string
|
nameKey?: string
|
||||||
}
|
}
|
||||||
>(({ className, payload, verticalAlign = "bottom" }, ref) => {
|
>(({ className, payload, verticalAlign = "bottom" }, ref) => {
|
||||||
// const { config } = useChart()
|
// const { config } = useChart()
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,8 @@
|
|||||||
--color-green-900: hsl(140 54% 12%);
|
--color-green-900: hsl(140 54% 12%);
|
||||||
--color-green-950: hsl(140 57% 6%);
|
--color-green-950: hsl(140 57% 6%);
|
||||||
|
|
||||||
|
--color-gh-dark: #22272e;
|
||||||
|
|
||||||
--color-background: var(--background);
|
--color-background: var(--background);
|
||||||
--color-foreground: var(--foreground);
|
--color-foreground: var(--foreground);
|
||||||
--color-card: var(--card);
|
--color-card: var(--card);
|
||||||
@@ -110,12 +112,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@layer utilities {
|
@layer utilities {
|
||||||
|
|
||||||
/* Fonts */
|
/* Fonts */
|
||||||
@supports (font-variation-settings: normal) {
|
@supports (font-variation-settings: normal) {
|
||||||
:root {
|
:root {
|
||||||
font-family: Inter, InterVariable, sans-serif;
|
font-family: Inter, InterVariable, sans-serif;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: InterVariable;
|
font-family: InterVariable;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
@@ -130,9 +134,11 @@
|
|||||||
@apply border-border outline-ring/50;
|
@apply border-border outline-ring/50;
|
||||||
overflow-anchor: none;
|
overflow-anchor: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@apply bg-background text-foreground;
|
@apply bg-background text-foreground;
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
@@ -149,16 +155,17 @@
|
|||||||
@utility ns-dialog {
|
@utility ns-dialog {
|
||||||
/* New system dialog width */
|
/* New system dialog width */
|
||||||
min-width: 30.3rem;
|
min-width: 30.3rem;
|
||||||
|
|
||||||
:where(:lang(zh), :lang(zh-CN), :lang(ko)) & {
|
:where(:lang(zh), :lang(zh-CN), :lang(ko)) & {
|
||||||
min-width: 27.9rem;
|
min-width: 27.9rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.recharts-tooltip-wrapper {
|
.recharts-tooltip-wrapper {
|
||||||
z-index: 1;
|
z-index: 51;
|
||||||
@apply tabular-nums;
|
@apply tabular-nums;
|
||||||
}
|
}
|
||||||
|
|
||||||
.recharts-yAxis {
|
.recharts-yAxis {
|
||||||
@apply tabular-nums;
|
@apply tabular-nums;
|
||||||
}
|
}
|
||||||
@@ -12,11 +12,6 @@ export enum ChartType {
|
|||||||
Disk,
|
Disk,
|
||||||
Network,
|
Network,
|
||||||
CPU,
|
CPU,
|
||||||
Volume,
|
|
||||||
Health,
|
|
||||||
Uptime,
|
|
||||||
HealthUptime,
|
|
||||||
DiskIO,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Unit of measurement */
|
/** Unit of measurement */
|
||||||
@@ -59,6 +54,16 @@ export enum HourFormat {
|
|||||||
"24h" = "24h",
|
"24h" = "24h",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Container health status */
|
||||||
|
export enum ContainerHealth {
|
||||||
|
None,
|
||||||
|
Starting,
|
||||||
|
Healthy,
|
||||||
|
Unhealthy,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ContainerHealthLabels = ["None", "Starting", "Healthy", "Unhealthy"] as const
|
||||||
|
|
||||||
/** Connection type */
|
/** Connection type */
|
||||||
export enum ConnectionType {
|
export enum ConnectionType {
|
||||||
SSH = 1,
|
SSH = 1,
|
||||||
|
|||||||
28
internal/site/src/lib/shiki.ts
Normal file
28
internal/site/src/lib/shiki.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
// https://shiki.style/guide/bundles#fine-grained-bundle
|
||||||
|
|
||||||
|
// directly import the theme and language modules, only the ones you imported will be bundled.
|
||||||
|
import githubDarkDimmed from '@shikijs/themes/github-dark-dimmed'
|
||||||
|
|
||||||
|
// `shiki/core` entry does not include any themes or languages or the wasm binary.
|
||||||
|
import { createHighlighterCore } from 'shiki/core'
|
||||||
|
import { createOnigurumaEngine } from 'shiki/engine/oniguruma'
|
||||||
|
|
||||||
|
export const highlighter = await createHighlighterCore({
|
||||||
|
themes: [
|
||||||
|
// instead of strings, you need to pass the imported module
|
||||||
|
githubDarkDimmed,
|
||||||
|
// or a dynamic import if you want to do chunk splitting
|
||||||
|
// import('@shikijs/themes/material-theme-ocean')
|
||||||
|
],
|
||||||
|
langs: [
|
||||||
|
import('@shikijs/langs/log'),
|
||||||
|
import('@shikijs/langs/json'),
|
||||||
|
// shiki will try to interop the module with the default export
|
||||||
|
// () => import('@shikijs/langs/css'),
|
||||||
|
],
|
||||||
|
// `shiki/wasm` contains the wasm binary inlined as base64 string.
|
||||||
|
engine: createOnigurumaEngine(import('shiki/wasm'))
|
||||||
|
})
|
||||||
|
|
||||||
|
// optionally, load themes and languages after creation
|
||||||
|
// await highlighter.loadTheme(import('@shikijs/themes/vitesse-light'))
|
||||||
@@ -53,13 +53,7 @@ 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<string[]>([])
|
export const $containerFilter = atom("")
|
||||||
|
|
||||||
/** 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,45 +290,6 @@ 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
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "إجراءات"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "نشط"
|
msgstr "نشط"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "التنبيهات النشطة"
|
msgstr "التنبيهات النشطة"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "سجل التنبيهات"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "التنبيهات"
|
msgstr "التنبيهات"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "جميع الحاويات"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "تحقق من السجلات لمزيد من التفاصيل."
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "تحقق من خدمة الإشعارات الخاصة بك"
|
msgstr "تحقق من خدمة الإشعارات الخاصة بك"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "هيئ التنبيهات الواردة"
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "تأكيد كلمة المرور"
|
msgstr "تأكيد كلمة المرور"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "انسخ محتوى <0>docker-compose.yml</0> للوكيل أدناه،
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "نسخ YAML"
|
msgstr "نسخ YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "المعالج"
|
msgstr "المعالج"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "الحالة الحالية"
|
msgstr "الحالة الحالية"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "لوحة التحكم"
|
msgstr "لوحة التحكم"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "حذف"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "حذف البصمة"
|
msgstr "حذف البصمة"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "التفاصيل"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "وحدة القرص"
|
||||||
@@ -445,14 +449,6 @@ 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 "استخدام الذاكرة للدوكر"
|
||||||
@@ -461,14 +457,6 @@ 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 "التوثيق"
|
||||||
@@ -536,7 +524,7 @@ msgstr "خطأ"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "يتجاوز {0}{1} في آخر {2, plural, one {# دقيقة} other {# دقائق}}"
|
msgstr "يتجاوز {0}{1} في آخر {2, plural, one {# دقيقة} other {# دقائق}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "فشل في إرسال إشعار الاختبار"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "فشل في تحديث التنبيه"
|
msgstr "فشل في تحديث التنبيه"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "تصفية..."
|
msgstr "تصفية..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "استهلاك طاقة وحدة معالجة الرسوميات"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "شبكة"
|
msgstr "شبكة"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "الصحة"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "فشل محاولة تسجيل الدخول"
|
msgstr "فشل محاولة تسجيل الدخول"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "السجلات"
|
msgstr "السجلات"
|
||||||
@@ -724,6 +711,7 @@ msgstr "تعليمات الإعداد اليدوي"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "الحد الأقصى دقيقة"
|
msgstr "الحد الأقصى دقيقة"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "الذاكرة"
|
msgstr "الذاكرة"
|
||||||
@@ -739,9 +727,11 @@ msgstr "استخدام الذاكرة لحاويات دوكر"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "الاسم"
|
msgstr "الاسم"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "الشبكة"
|
msgstr "الشبكة"
|
||||||
@@ -762,14 +752,11 @@ 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 "لم يتم العثور على نتائج."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "لا توجد نتائج."
|
msgstr "لا توجد نتائج."
|
||||||
@@ -811,6 +798,7 @@ msgstr "أو المتابعة باستخدام"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "الكتابة فوق التنبيهات الحالية"
|
msgstr "الكتابة فوق التنبيهات الحالية"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "صفحة"
|
msgstr "صفحة"
|
||||||
@@ -915,6 +903,11 @@ msgstr "قراءة"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "تم الاستلام"
|
msgstr "تم الاستلام"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "تحديث"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "طلب كلمة مرور لمرة واحدة"
|
msgstr "طلب كلمة مرور لمرة واحدة"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "الترتيب حسب"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "الحالة"
|
msgstr "الحالة"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "استخدام التبديل"
|
msgstr "استخدام التبديل"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "الأنظمة"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "قيد التشغيل"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "قيد التشغيل ({upSystemsLength})"
|
msgstr "قيد التشغيل ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "تم التحديث"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "رفع"
|
msgstr "رفع"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "في انتظار وجود سجلات كافية للعرض"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Действия"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Активен"
|
msgstr "Активен"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Активни тревоги"
|
msgstr "Активни тревоги"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "История на нотификациите"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Тревоги"
|
msgstr "Тревоги"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Всички контейнери"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "Провери log-овете за повече информация."
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "Провери услугата си за удостоверяване"
|
msgstr "Провери услугата си за удостоверяване"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Настрой как получаваш нотификации за т
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Потвърди парола"
|
msgstr "Потвърди парола"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Копирайте съдържанието на<0>docker-compose.yml</0
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Копирай YAML"
|
msgstr "Копирай YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "Процесор"
|
msgstr "Процесор"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Текущо състояние"
|
msgstr "Текущо състояние"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Табло"
|
msgstr "Табло"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Изтрий"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Изтрий пръстов отпечатък"
|
msgstr "Изтрий пръстов отпечатък"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Подробности"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "Единица за диск"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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 "Документация"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Грешка"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Надвишава {0}{1} в последните {2, plural, one {# минута} other {# минути}}"
|
msgstr "Надвишава {0}{1} в последните {2, plural, one {# минута} other {# минути}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "Неуспешно изпрати тестова нотификация"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "Неуспешно обнови тревога"
|
msgstr "Неуспешно обнови тревога"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Филтрирай..."
|
msgstr "Филтрирай..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Консумация на ток от графична карта"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Мрежово"
|
msgstr "Мрежово"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Здраве"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Неуспешен опит за вход"
|
msgstr "Неуспешен опит за вход"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Логове"
|
msgstr "Логове"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Инструкции за ръчна настройка"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Максимум 1 минута"
|
msgstr "Максимум 1 минута"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Памет"
|
msgstr "Памет"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Използването на памет от docker контейнер
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Име"
|
msgstr "Име"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Мрежа"
|
msgstr "Мрежа"
|
||||||
@@ -762,14 +752,11 @@ 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 "Няма намерени резултати."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Няма резултати."
|
msgstr "Няма резултати."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Или продължи с"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Презапиши съществуващи тревоги"
|
msgstr "Презапиши съществуващи тревоги"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Страница"
|
msgstr "Страница"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Прочети"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Получени"
|
msgstr "Получени"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Опресни"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Заявка за еднократна парола"
|
msgstr "Заявка за еднократна парола"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Сортиране по"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Състояние"
|
msgstr "Състояние"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Използване на swap"
|
msgstr "Използване на swap"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "Системи"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Нагоре"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Нагоре ({upSystemsLength})"
|
msgstr "Нагоре ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Актуализирано"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Качване"
|
msgstr "Качване"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "Изчаква се за достатъчно записи за показване"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Akce"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktivní"
|
msgstr "Aktivní"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktivní výstrahy"
|
msgstr "Aktivní výstrahy"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Historie upozornění"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Výstrahy"
|
msgstr "Výstrahy"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Všechny kontejnery"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Klikněte na kontejner pro zobrazení dalších informací."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Konfigurace způsobu přijímání upozornění."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Potvrdit heslo"
|
msgstr "Potvrdit heslo"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Zkopírujte obsah <0>docker-compose.yml</0> pro agenta níže nebo autom
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Kopírovat YAML"
|
msgstr "Kopírovat YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "Procesor"
|
msgstr "Procesor"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Aktuální stav"
|
msgstr "Aktuální stav"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Přehled"
|
msgstr "Přehled"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Odstranit"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Smazat identifikátor"
|
msgstr "Smazat identifikátor"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detail"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Chyba"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Překračuje {0}{1} za {2, plural, one {poslední # minutu} few {poslední # minuty} other {posledních # minut}}"
|
msgstr "Překračuje {0}{1} za {2, plural, one {poslední # minutu} few {poslední # minuty} other {posledních # minut}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtr..."
|
msgstr "Filtr..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Spotřeba energie GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Mřížka"
|
msgstr "Mřížka"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Zdraví"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Pokus o přihlášení selhal"
|
msgstr "Pokus o přihlášení selhal"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logy"
|
msgstr "Logy"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Pokyny k manuálnímu nastavení"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Max. 1 min"
|
msgstr "Max. 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Paměť"
|
msgstr "Paměť"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Využití paměti docker kontejnerů"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Název"
|
msgstr "Název"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Síť"
|
msgstr "Síť"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Žádné výsledky."
|
msgstr "Žádné výsledky."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Nebo pokračujte s"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Přepsat existující upozornění"
|
msgstr "Přepsat existující upozornění"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Stránka"
|
msgstr "Stránka"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Číst"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Přijato"
|
msgstr "Přijato"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Aktualizovat"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Požádat o jednorázové heslo"
|
msgstr "Požádat o jednorázové heslo"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Seřadit podle"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Stav"
|
msgstr "Stav"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap využití"
|
msgstr "Swap využití"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Funkční"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Funkční ({upSystemsLength})"
|
msgstr "Funkční ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Aktualizováno"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Odeslání"
|
msgstr "Odeslání"
|
||||||
@@ -1246,10 +1241,6 @@ 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í"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Handlinger"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktive Alarmer"
|
msgstr "Aktive Alarmer"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr ""
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Alarmer"
|
msgstr "Alarmer"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Alle containere"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Klik på en container for at se mere information."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Konfigurer hvordan du modtager advarselsmeddelelser."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Bekræft adgangskode"
|
msgstr "Bekræft adgangskode"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr ""
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Nuværende tilstand"
|
msgstr "Nuværende tilstand"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Oversigtspanel"
|
msgstr "Oversigtspanel"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Slet"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detalje"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 ""
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Fejl"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Overskrider {0}{1} i sidste {2, plural, one {# minut} other {# minutter}}"
|
msgstr "Overskrider {0}{1} i sidste {2, plural, one {# minut} other {# minutter}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filter..."
|
msgstr "Filter..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Gpu Strøm Træk"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Gitter"
|
msgstr "Gitter"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Sundhed"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Loginforsøg mislykkedes"
|
msgstr "Loginforsøg mislykkedes"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logs"
|
msgstr "Logs"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Manuel opsætningsvejledning"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Maks. 1 min"
|
msgstr "Maks. 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Hukommelse"
|
msgstr "Hukommelse"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Hukommelsesforbrug af dockercontainere"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Navn"
|
msgstr "Navn"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Net"
|
msgstr "Net"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -811,6 +798,7 @@ msgstr "Eller fortsæt med"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Overskriv eksisterende alarmer"
|
msgstr "Overskriv eksisterende alarmer"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Side"
|
msgstr "Side"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Læs"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Modtaget"
|
msgstr "Modtaget"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Opdater"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Anmod om engangsadgangskode"
|
msgstr "Anmod om engangsadgangskode"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sorter efter"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap forbrug"
|
msgstr "Swap forbrug"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Oppe"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Opdateret"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Upload"
|
msgstr "Upload"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Aktionen"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktiv"
|
msgstr "Aktiv"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktive Warnungen"
|
msgstr "Aktive Warnungen"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Alarm-Verlauf"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Warnungen"
|
msgstr "Warnungen"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Alle Container"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Klicken Sie auf einen Container, um weitere Informationen zu sehen."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Konfiguriere, wie du Warnbenachrichtigungen erhältst."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Passwort bestätigen"
|
msgstr "Passwort bestätigen"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Kopieren Sie den<0>docker-compose.yml</0> Inhalt für den Agent unten od
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "YAML kopieren"
|
msgstr "YAML kopieren"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Aktueller Zustand"
|
msgstr "Aktueller Zustand"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Dashboard"
|
msgstr "Dashboard"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Löschen"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Fingerabdruck löschen"
|
msgstr "Fingerabdruck löschen"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detail"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Fehler"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Überschreitet {0}{1} in den letzten {2, plural, one {# Minute} other {# Minuten}}"
|
msgstr "Überschreitet {0}{1} in den letzten {2, plural, one {# Minute} other {# Minuten}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filter..."
|
msgstr "Filter..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU-Leistungsaufnahme"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Raster"
|
msgstr "Raster"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Gesundheit"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Anmeldeversuch fehlgeschlagen"
|
msgstr "Anmeldeversuch fehlgeschlagen"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Protokolle"
|
msgstr "Protokolle"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Anleitung zur manuellen Einrichtung"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Max 1 Min"
|
msgstr "Max 1 Min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Arbeitsspeicher"
|
msgstr "Arbeitsspeicher"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Arbeitsspeichernutzung der Docker-Container"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Netz"
|
msgstr "Netz"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Keine Ergebnisse."
|
msgstr "Keine Ergebnisse."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Oder fortfahren mit"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Bestehende Warnungen überschreiben"
|
msgstr "Bestehende Warnungen überschreiben"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Seite"
|
msgstr "Seite"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Lesen"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Empfangen"
|
msgstr "Empfangen"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Aktualisieren"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Einmalpasswort anfordern"
|
msgstr "Einmalpasswort anfordern"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sortieren nach"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Status"
|
msgstr "Status"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap-Nutzung"
|
msgstr "Swap-Nutzung"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "aktiv"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "aktiv ({upSystemsLength})"
|
msgstr "aktiv ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Aktualisiert"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Hochladen"
|
msgstr "Hochladen"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ msgstr "Actions"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Active"
|
msgstr "Active"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Active Alerts"
|
msgstr "Active Alerts"
|
||||||
|
|
||||||
@@ -128,7 +128,15 @@ msgstr "Alert History"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Alerts"
|
msgstr "Alerts"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "All Containers"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -262,9 +270,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr "Clear all"
|
msgstr "Click on a container to view more information."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -288,14 +296,10 @@ msgstr "Configure how you receive alert notifications."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Confirm password"
|
msgstr "Confirm password"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -351,6 +355,7 @@ msgstr "Copy the<0>docker-compose.yml</0> content for the agent below, or regist
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Copy YAML"
|
msgstr "Copy YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -388,7 +393,6 @@ msgid "Current state"
|
|||||||
msgstr "Current state"
|
msgstr "Current state"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Dashboard"
|
msgstr "Dashboard"
|
||||||
|
|
||||||
@@ -405,6 +409,10 @@ msgstr "Delete"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Delete fingerprint"
|
msgstr "Delete fingerprint"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detail"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -418,10 +426,6 @@ 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"
|
||||||
@@ -440,14 +444,6 @@ 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"
|
||||||
@@ -456,14 +452,6 @@ 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"
|
||||||
@@ -531,7 +519,7 @@ msgstr "Error"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgstr "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
|
|
||||||
@@ -572,15 +560,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filter..."
|
msgstr "Filter..."
|
||||||
@@ -626,6 +608,10 @@ msgstr "GPU Power Draw"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Grid"
|
msgstr "Grid"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Health"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -697,6 +683,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Login attempt failed"
|
msgstr "Login attempt failed"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logs"
|
msgstr "Logs"
|
||||||
@@ -719,6 +706,7 @@ msgstr "Manual setup instructions"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Max 1 min"
|
msgstr "Max 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Memory"
|
msgstr "Memory"
|
||||||
@@ -734,9 +722,11 @@ msgstr "Memory usage of docker containers"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Net"
|
msgstr "Net"
|
||||||
@@ -757,14 +747,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "No results."
|
msgstr "No results."
|
||||||
@@ -806,6 +793,7 @@ msgstr "Or continue with"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Overwrite existing alerts"
|
msgstr "Overwrite existing alerts"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Page"
|
msgstr "Page"
|
||||||
@@ -910,6 +898,11 @@ msgstr "Read"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Received"
|
msgstr "Received"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Refresh"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Request a one-time password"
|
msgstr "Request a one-time password"
|
||||||
@@ -1001,6 +994,7 @@ msgstr "Sort By"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "State"
|
msgstr "State"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1015,6 +1009,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap Usage"
|
msgstr "Swap Usage"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1025,10 +1020,6 @@ 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"
|
||||||
@@ -1192,6 +1183,10 @@ msgstr "Up"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Up ({upSystemsLength})"
|
msgstr "Up ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Updated"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Upload"
|
msgstr "Upload"
|
||||||
@@ -1241,10 +1236,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Acciones"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Activo"
|
msgstr "Activo"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Alertas Activas"
|
msgstr "Alertas Activas"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Historial de Alertas"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Alertas"
|
msgstr "Alertas"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Todos los contenedores"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Haga clic en un contenedor para ver más información."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Configure cómo recibe las notificaciones de alertas."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Confirmar contraseña"
|
msgstr "Confirmar contraseña"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Copia el contenido del<0>docker-compose.yml</0> para el agente a continu
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Copiar YAML"
|
msgstr "Copiar YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Estado actual"
|
msgstr "Estado actual"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Tablero"
|
msgstr "Tablero"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Eliminar"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Eliminar huella digital"
|
msgstr "Eliminar huella digital"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detalle"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Error"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Excede {0}{1} en el último {2, plural, one {# minuto} other {# minutos}}"
|
msgstr "Excede {0}{1} en el último {2, plural, one {# minuto} other {# minutos}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtrar..."
|
msgstr "Filtrar..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Consumo de energía de la GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Cuadrícula"
|
msgstr "Cuadrícula"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Estado"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Intento de inicio de sesión fallido"
|
msgstr "Intento de inicio de sesión fallido"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Registros"
|
msgstr "Registros"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Instrucciones manuales de configuración"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Máx 1 min"
|
msgstr "Máx 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Memoria"
|
msgstr "Memoria"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Uso de memoria de los contenedores de Docker"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nombre"
|
msgstr "Nombre"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Red"
|
msgstr "Red"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Sin resultados."
|
msgstr "Sin resultados."
|
||||||
@@ -811,6 +798,7 @@ msgstr "O continuar con"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Sobrescribir alertas existentes"
|
msgstr "Sobrescribir alertas existentes"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Página"
|
msgstr "Página"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Lectura"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Recibido"
|
msgstr "Recibido"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Actualizar"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Solicitar contraseña de un solo uso"
|
msgstr "Solicitar contraseña de un solo uso"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Ordenar por"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Estado"
|
msgstr "Estado"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Uso de Swap"
|
msgstr "Uso de Swap"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Activo"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Activo ({upSystemsLength})"
|
msgstr "Activo ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Actualizado"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Cargar"
|
msgstr "Cargar"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "عملیات"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "فعال"
|
msgstr "فعال"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr " هشدارهای فعال"
|
msgstr " هشدارهای فعال"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "تاریخچه هشدارها"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "هشدارها"
|
msgstr "هشدارها"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "همه کانتینرها"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "برای جزئیات بیشتر، لاگها را بررسی کنی
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "سرویس اطلاعرسانی خود را بررسی کنید"
|
msgstr "سرویس اطلاعرسانی خود را بررسی کنید"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "نحوه دریافت هشدارهای اطلاعرسانی را پی
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "تأیید رمز عبور"
|
msgstr "تأیید رمز عبور"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "محتوای <0>docker-compose.yml</0> عامل زیر را کپی کن
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "کپی YAML"
|
msgstr "کپی YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "پردازنده"
|
msgstr "پردازنده"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "وضعیت فعلی"
|
msgstr "وضعیت فعلی"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "داشبورد"
|
msgstr "داشبورد"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "حذف"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "حذف اثر انگشت"
|
msgstr "حذف اثر انگشت"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "جزئیات"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "واحد دیسک"
|
||||||
@@ -445,14 +449,6 @@ 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 "میزان استفاده از حافظه داکر"
|
||||||
@@ -461,14 +457,6 @@ 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 "مستندات"
|
||||||
@@ -536,7 +524,7 @@ msgstr "خطا"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "در {2, plural, one {# دقیقه} other {# دقیقه}} گذشته از {0}{1} بیشتر است"
|
msgstr "در {2, plural, one {# دقیقه} other {# دقیقه}} گذشته از {0}{1} بیشتر است"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "ارسال اعلان آزمایشی ناموفق بود"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "بهروزرسانی هشدار ناموفق بود"
|
msgstr "بهروزرسانی هشدار ناموفق بود"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "فیلتر..."
|
msgstr "فیلتر..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "مصرف برق پردازنده گرافیکی"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "جدول"
|
msgstr "جدول"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "سلامتی"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "تلاش برای ورود ناموفق بود"
|
msgstr "تلاش برای ورود ناموفق بود"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "لاگها"
|
msgstr "لاگها"
|
||||||
@@ -724,6 +711,7 @@ msgstr "دستورالعملهای راهاندازی دستی"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "حداکثر ۱ دقیقه"
|
msgstr "حداکثر ۱ دقیقه"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "حافظه"
|
msgstr "حافظه"
|
||||||
@@ -739,9 +727,11 @@ msgstr "میزان استفاده از حافظه کانتینرهای داکر"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "نام"
|
msgstr "نام"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "شبکه"
|
msgstr "شبکه"
|
||||||
@@ -762,14 +752,11 @@ 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 "هیچ نتیجهای یافت نشد."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "نتیجهای یافت نشد."
|
msgstr "نتیجهای یافت نشد."
|
||||||
@@ -811,6 +798,7 @@ msgstr "یا ادامه با"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "بازنویسی هشدارهای موجود"
|
msgstr "بازنویسی هشدارهای موجود"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "صفحه"
|
msgstr "صفحه"
|
||||||
@@ -915,6 +903,11 @@ msgstr "خواندن"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "دریافت شد"
|
msgstr "دریافت شد"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "تازهسازی"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "درخواست رمز عبور یکبار مصرف"
|
msgstr "درخواست رمز عبور یکبار مصرف"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "مرتبسازی بر اساس"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "وضعیت"
|
msgstr "وضعیت"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "میزان استفاده از Swap"
|
msgstr "میزان استفاده از Swap"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "سیستمها"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "فعال"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "فعال ({upSystemsLength})"
|
msgstr "فعال ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "بهروزرسانی شد"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "آپلود"
|
msgstr "آپلود"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "در انتظار رکوردهای کافی برای نمایش"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Actions"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Alertes actives"
|
msgstr "Alertes actives"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr ""
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Alertes"
|
msgstr "Alertes"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Tous les conteneurs"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Cliquez sur un conteneur pour voir plus d'informations."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Configurez comment vous recevez les notifications d'alerte."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Confirmer le mot de passe"
|
msgstr "Confirmer le mot de passe"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Copiez le contenu du<0>docker-compose.yml</0> pour l'agent ci-dessous, o
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Copier YAML"
|
msgstr "Copier YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "État actuel"
|
msgstr "État actuel"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Tableau de bord"
|
msgstr "Tableau de bord"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Supprimer"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Supprimer l'empreinte"
|
msgstr "Supprimer l'empreinte"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Détail"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 ""
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Erreur"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Dépasse {0}{1} dans {2, plural, one {la dernière # minute} other {les dernières # minutes}}"
|
msgstr "Dépasse {0}{1} dans {2, plural, one {la dernière # minute} other {les dernières # minutes}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtrer..."
|
msgstr "Filtrer..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Consommation du GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Grille"
|
msgstr "Grille"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Santé"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Échec de la tentative de connexion"
|
msgstr "Échec de la tentative de connexion"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Journaux"
|
msgstr "Journaux"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Guide pour une installation manuelle"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Max 1 min"
|
msgstr "Max 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Mémoire"
|
msgstr "Mémoire"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Utilisation de la mémoire des conteneurs Docker"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nom"
|
msgstr "Nom"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Net"
|
msgstr "Net"
|
||||||
@@ -762,14 +752,11 @@ 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é."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -811,6 +798,7 @@ msgstr "Ou continuer avec"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Écraser les alertes existantes"
|
msgstr "Écraser les alertes existantes"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Page"
|
msgstr "Page"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Lecture"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Reçu"
|
msgstr "Reçu"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Actualiser"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Demander un mot de passe à usage unique"
|
msgstr "Demander un mot de passe à usage unique"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Trier par"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Utilisation du swap"
|
msgstr "Utilisation du swap"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Joignable"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Mis à jour"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Téléverser"
|
msgstr "Téléverser"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Akcije"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktivan"
|
msgstr "Aktivan"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktivna upozorenja"
|
msgstr "Aktivna upozorenja"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr ""
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Upozorenja"
|
msgstr "Upozorenja"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Svi spremnici"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Kliknite na spremnik za prikaz više informacija."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Konfigurirajte način primanja obavijesti upozorenja."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Potvrdite lozinku"
|
msgstr "Potvrdite lozinku"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr ""
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "Procesor"
|
msgstr "Procesor"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Trenutno stanje"
|
msgstr "Trenutno stanje"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Nadzorna ploča"
|
msgstr "Nadzorna ploča"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Izbriši"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detalj"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 ""
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Greška"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Premašuje {0}{1} u posljednjih {2, plural, one {# minuta} other {# minute}}"
|
msgstr "Premašuje {0}{1} u posljednjih {2, plural, one {# minuta} other {# minute}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtriraj..."
|
msgstr "Filtriraj..."
|
||||||
@@ -631,6 +613,10 @@ msgstr ""
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Mreža"
|
msgstr "Mreža"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Zdravlje"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Pokušaj prijave nije uspio"
|
msgstr "Pokušaj prijave nije uspio"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logovi"
|
msgstr "Logovi"
|
||||||
@@ -724,6 +711,7 @@ msgstr ""
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Maksimalno 1 minuta"
|
msgstr "Maksimalno 1 minuta"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Memorija"
|
msgstr "Memorija"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Upotreba memorije Docker spremnika"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Ime"
|
msgstr "Ime"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Mreža"
|
msgstr "Mreža"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Nema rezultata."
|
msgstr "Nema rezultata."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Ili nastavi sa"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Prebrišite postojeća upozorenja"
|
msgstr "Prebrišite postojeća upozorenja"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Stranica"
|
msgstr "Stranica"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Pročitaj"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Primljeno"
|
msgstr "Primljeno"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Osvježi"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Zatraži jednokratnu lozinku"
|
msgstr "Zatraži jednokratnu lozinku"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sortiraj po"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap Iskorištenost"
|
msgstr "Swap Iskorištenost"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr ""
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Ažurirano"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Otpremi"
|
msgstr "Otpremi"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -8,15 +8,15 @@ msgstr ""
|
|||||||
"Language: hu\n"
|
"Language: hu\n"
|
||||||
"Project-Id-Version: beszel\n"
|
"Project-Id-Version: beszel\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"PO-Revision-Date: 2025-08-28 23:21\n"
|
"PO-Revision-Date: 2025-10-14 23:40\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Hungarian\n"
|
"Language-Team: Hungarian\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Crowdin-Project: beszel\n"
|
"X-Crowdin-Project: beszel\n"
|
||||||
"X-Crowdin-Project-ID: 733311\n"
|
"X-Crowdin-Project-ID: 733311\n"
|
||||||
"X-Crowdin-Language: hu\n"
|
"X-Crowdin-Language: hu\n"
|
||||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
"X-Crowdin-File: /main/internal/site/src/locales/en/en.po\n"
|
||||||
"X-Crowdin-File-ID: 16\n"
|
"X-Crowdin-File-ID: 32\n"
|
||||||
|
|
||||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
@@ -31,13 +31,13 @@ msgstr "{0, plural, one {# óra} other {# óra}}"
|
|||||||
#. placeholder {0}: Math.trunc(system.info.u / 60)
|
#. placeholder {0}: Math.trunc(system.info.u / 60)
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "{0, plural, one {# minute} few {# minutes} many {# minutes} other {# minutes}}"
|
msgid "{0, plural, one {# minute} few {# minutes} many {# minutes} other {# minutes}}"
|
||||||
msgstr ""
|
msgstr "{0, plural, one {# perc} few {# perc} many {# perc} other {# perc}}"
|
||||||
|
|
||||||
#. placeholder {0}: table.getFilteredSelectedRowModel().rows.length
|
#. placeholder {0}: table.getFilteredSelectedRowModel().rows.length
|
||||||
#. placeholder {1}: table.getFilteredRowModel().rows.length
|
#. placeholder {1}: table.getFilteredRowModel().rows.length
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "{0} of {1} row(s) selected."
|
msgid "{0} of {1} row(s) selected."
|
||||||
msgstr ""
|
msgstr "{0} a(z) {1} sorból kiválasztva."
|
||||||
|
|
||||||
#: src/lib/utils.ts
|
#: src/lib/utils.ts
|
||||||
msgid "1 hour"
|
msgid "1 hour"
|
||||||
@@ -46,7 +46,7 @@ msgstr "1 óra"
|
|||||||
#. Load average
|
#. Load average
|
||||||
#: src/components/charts/load-average-chart.tsx
|
#: src/components/charts/load-average-chart.tsx
|
||||||
msgid "1 min"
|
msgid "1 min"
|
||||||
msgstr ""
|
msgstr "1 perc"
|
||||||
|
|
||||||
#: src/lib/utils.ts
|
#: src/lib/utils.ts
|
||||||
msgid "1 minute"
|
msgid "1 minute"
|
||||||
@@ -63,7 +63,7 @@ msgstr "12 óra"
|
|||||||
#. Load average
|
#. Load average
|
||||||
#: src/components/charts/load-average-chart.tsx
|
#: src/components/charts/load-average-chart.tsx
|
||||||
msgid "15 min"
|
msgid "15 min"
|
||||||
msgstr ""
|
msgstr "15 perc"
|
||||||
|
|
||||||
#: src/lib/utils.ts
|
#: src/lib/utils.ts
|
||||||
msgid "24 hours"
|
msgid "24 hours"
|
||||||
@@ -76,7 +76,7 @@ msgstr "30 nap"
|
|||||||
#. Load average
|
#. Load average
|
||||||
#: src/components/charts/load-average-chart.tsx
|
#: src/components/charts/load-average-chart.tsx
|
||||||
msgid "5 min"
|
msgid "5 min"
|
||||||
msgstr ""
|
msgstr "5 perc"
|
||||||
|
|
||||||
#. Table column
|
#. Table column
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
@@ -87,9 +87,9 @@ msgstr "Műveletek"
|
|||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr ""
|
msgstr "Aktív"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktív riasztások"
|
msgstr "Aktív riasztások"
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ msgstr "Állítsa be a diagram megjelenítését."
|
|||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
msgstr "Admin"
|
msgstr "Adminisztráció"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Agent"
|
msgid "Agent"
|
||||||
@@ -126,14 +126,22 @@ msgstr "Ügynök"
|
|||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
#: src/components/routes/settings/layout.tsx
|
#: src/components/routes/settings/layout.tsx
|
||||||
msgid "Alert History"
|
msgid "Alert History"
|
||||||
msgstr ""
|
msgstr "Riasztási előzmények"
|
||||||
|
|
||||||
#: src/components/alerts/alert-button.tsx
|
#: src/components/alerts/alert-button.tsx
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Riasztások"
|
msgstr "Riasztások"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Összes konténer"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -145,7 +153,7 @@ msgstr "Biztosan törölni szeretnéd {name}-t?"
|
|||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr "Biztos vagy benne?"
|
||||||
|
|
||||||
#: src/components/copy-to-clipboard.tsx
|
#: src/components/copy-to-clipboard.tsx
|
||||||
msgid "Automatic copy requires a secure context."
|
msgid "Automatic copy requires a secure context."
|
||||||
@@ -210,12 +218,12 @@ msgstr "Bináris"
|
|||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Bits (Kbps, Mbps, Gbps)"
|
msgid "Bits (Kbps, Mbps, Gbps)"
|
||||||
msgstr ""
|
msgstr "Bitek (Kbps, Mbps, Gbps)"
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Bytes (KB/s, MB/s, GB/s)"
|
msgid "Bytes (KB/s, MB/s, GB/s)"
|
||||||
msgstr ""
|
msgstr "Byte-ok (KB/s, MB/s, GB/s)"
|
||||||
|
|
||||||
#: src/components/charts/mem-chart.tsx
|
#: src/components/charts/mem-chart.tsx
|
||||||
msgid "Cache / Buffers"
|
msgid "Cache / Buffers"
|
||||||
@@ -232,11 +240,11 @@ msgstr "Figyelem - potenciális adatvesztés"
|
|||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Celsius (°C)"
|
msgid "Celsius (°C)"
|
||||||
msgstr ""
|
msgstr "Celsius (°C)"
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Change display units for metrics."
|
msgid "Change display units for metrics."
|
||||||
msgstr ""
|
msgstr "A mértékegységek megjelenítésének megváltoztatása."
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Change general application options."
|
msgid "Change general application options."
|
||||||
@@ -267,13 +275,13 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Kattintson egy konténerre a további információk megtekintéséhez."
|
||||||
|
|
||||||
#: 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 "További információkért kattints egy rendszerre."
|
||||||
|
|
||||||
#: src/components/ui/input-copy.tsx
|
#: src/components/ui/input-copy.tsx
|
||||||
msgid "Click to copy"
|
msgid "Click to copy"
|
||||||
@@ -293,13 +301,9 @@ msgstr "Konfiguráld, hogyan kapod az értesítéseket."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Jelszó megerősítése"
|
msgstr "Jelszó megerősítése"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Connection is down"
|
msgid "Connection is down"
|
||||||
msgstr ""
|
msgstr "Kapcsolat megszakadt"
|
||||||
|
|
||||||
#: 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
|
||||||
@@ -325,7 +329,7 @@ msgstr "Docker run másolása"
|
|||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Environment variables"
|
msgctxt "Environment variables"
|
||||||
msgid "Copy env"
|
msgid "Copy env"
|
||||||
msgstr ""
|
msgstr "Környezet másolása"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Copy host"
|
msgid "Copy host"
|
||||||
@@ -354,8 +358,9 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr ""
|
msgstr "YAML másolása"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -373,7 +378,7 @@ msgstr "Fiók létrehozása"
|
|||||||
#. Context: date created
|
#. Context: date created
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "Created"
|
msgid "Created"
|
||||||
msgstr ""
|
msgstr "Létrehozva"
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Critical (%)"
|
msgid "Critical (%)"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Jelenlegi állapot"
|
msgstr "Jelenlegi állapot"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Áttekintés"
|
msgstr "Áttekintés"
|
||||||
|
|
||||||
@@ -408,7 +412,11 @@ msgstr "Törlés"
|
|||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr ""
|
msgstr "Ujjlenyomat törlése"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Részlet"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
@@ -423,13 +431,9 @@ 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 "Lemez mértékegysége"
|
||||||
|
|
||||||
#: src/components/charts/disk-chart.tsx
|
#: src/components/charts/disk-chart.tsx
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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ó"
|
||||||
@@ -479,11 +467,11 @@ msgstr "Dokumentáció"
|
|||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Down"
|
msgid "Down"
|
||||||
msgstr ""
|
msgstr "Offline"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Down ({downSystemsLength})"
|
msgid "Down ({downSystemsLength})"
|
||||||
msgstr ""
|
msgstr "Offline ({downSystemsLength})"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Download"
|
msgid "Download"
|
||||||
@@ -491,12 +479,12 @@ msgstr "Letöltés"
|
|||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
msgstr ""
|
msgstr "Időtartam"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr ""
|
msgstr "Szerkesztés"
|
||||||
|
|
||||||
#: src/components/login/auth-form.tsx
|
#: src/components/login/auth-form.tsx
|
||||||
#: src/components/login/forgot-pass-form.tsx
|
#: src/components/login/forgot-pass-form.tsx
|
||||||
@@ -536,7 +524,7 @@ msgstr "Hiba"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Túllépi a {0}{1} értéket az elmúlt {2, plural, one {# percben} other {# percben}}"
|
msgstr "Túllépi a {0}{1} értéket az elmúlt {2, plural, one {# percben} other {# percben}}"
|
||||||
|
|
||||||
@@ -546,7 +534,7 @@ msgstr "A <0>config.yml</0> fájlban nem definiált meglévő rendszerek törlé
|
|||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Export"
|
msgid "Export"
|
||||||
msgstr ""
|
msgstr "Exportálás"
|
||||||
|
|
||||||
#: src/components/routes/settings/config-yaml.tsx
|
#: src/components/routes/settings/config-yaml.tsx
|
||||||
msgid "Export configuration"
|
msgid "Export configuration"
|
||||||
@@ -558,7 +546,7 @@ msgstr "Exportálja a jelenlegi rendszerkonfigurációt."
|
|||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Fahrenheit (°F)"
|
msgid "Fahrenheit (°F)"
|
||||||
msgstr ""
|
msgstr "Fahrenheit (°F)"
|
||||||
|
|
||||||
#: src/lib/api.ts
|
#: src/lib/api.ts
|
||||||
msgid "Failed to authenticate"
|
msgid "Failed to authenticate"
|
||||||
@@ -577,22 +565,16 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.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ő..."
|
||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Fingerprint"
|
msgid "Fingerprint"
|
||||||
msgstr ""
|
msgstr "Ujjlenyomat"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU áramfelvétele"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Rács"
|
msgstr "Rács"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Egészség"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -669,24 +655,24 @@ msgstr "Elrendezés"
|
|||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "Load Average"
|
msgid "Load Average"
|
||||||
msgstr ""
|
msgstr "Terhelési átlag"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Load Average 15m"
|
msgid "Load Average 15m"
|
||||||
msgstr ""
|
msgstr "Terhelési átlag 15p"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Load Average 1m"
|
msgid "Load Average 1m"
|
||||||
msgstr ""
|
msgstr "Terhelési átlag 1p"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Load Average 5m"
|
msgid "Load Average 5m"
|
||||||
msgstr ""
|
msgstr "Terhelési átlag 5p"
|
||||||
|
|
||||||
#. Short label for load average
|
#. Short label for load average
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Load Avg"
|
msgid "Load Avg"
|
||||||
msgstr ""
|
msgstr "Terhelési átlag"
|
||||||
|
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Bejelentkezés sikertelen"
|
msgstr "Bejelentkezés sikertelen"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Naplók"
|
msgstr "Naplók"
|
||||||
@@ -717,13 +704,14 @@ msgstr "A megjelenítési és értesítési beállítások kezelése."
|
|||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Manual setup instructions"
|
msgid "Manual setup instructions"
|
||||||
msgstr ""
|
msgstr "Manuális beállítási lépések"
|
||||||
|
|
||||||
#. Chart select field. Please try to keep this short.
|
#. Chart select field. Please try to keep this short.
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Maximum 1 perc"
|
msgstr "Maximum 1 perc"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "RAM"
|
msgstr "RAM"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Docker konténerek memória használata"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Név"
|
msgstr "Név"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Hálózat"
|
msgstr "Hálózat"
|
||||||
@@ -760,19 +750,16 @@ msgstr "Nyilvános interfészek hálózati forgalma"
|
|||||||
#. Context: Bytes or bits
|
#. Context: Bytes or bits
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Network unit"
|
msgid "Network unit"
|
||||||
msgstr ""
|
msgstr "Sávszélesség mértékegysége"
|
||||||
|
|
||||||
#: 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr ""
|
msgstr "Nincs találat."
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
@@ -811,6 +798,7 @@ msgstr "Vagy folytasd ezzel"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Felülírja a meglévő riasztásokat"
|
msgstr "Felülírja a meglévő riasztásokat"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Oldal"
|
msgstr "Oldal"
|
||||||
@@ -819,7 +807,7 @@ msgstr "Oldal"
|
|||||||
#. placeholder {1}: table.getPageCount()
|
#. placeholder {1}: table.getPageCount()
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Page {0} of {1}"
|
msgid "Page {0} of {1}"
|
||||||
msgstr ""
|
msgstr "{0}/{1} oldal"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Pages / Settings"
|
msgid "Pages / Settings"
|
||||||
@@ -836,7 +824,7 @@ msgstr "A jelszónak legalább 8 karakternek kell lennie."
|
|||||||
|
|
||||||
#: src/components/login/auth-form.tsx
|
#: src/components/login/auth-form.tsx
|
||||||
msgid "Password must be less than 72 bytes."
|
msgid "Password must be less than 72 bytes."
|
||||||
msgstr ""
|
msgstr "A jelszó legfeljebb 72 byte lehet."
|
||||||
|
|
||||||
#: src/components/login/forgot-pass-form.tsx
|
#: src/components/login/forgot-pass-form.tsx
|
||||||
msgid "Password reset request received"
|
msgid "Password reset request received"
|
||||||
@@ -852,7 +840,7 @@ msgstr "Szüneteltetve"
|
|||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Paused ({pausedSystemsLength})"
|
msgid "Paused ({pausedSystemsLength})"
|
||||||
msgstr ""
|
msgstr "Szüneteltetve ({pausedSystemsLength})"
|
||||||
|
|
||||||
#: src/components/routes/settings/notifications.tsx
|
#: src/components/routes/settings/notifications.tsx
|
||||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||||
@@ -915,6 +903,11 @@ msgstr "Olvasás"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Fogadott"
|
msgstr "Fogadott"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Frissítés"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Egyszeri jelszó kérése"
|
msgstr "Egyszeri jelszó kérése"
|
||||||
@@ -931,7 +924,7 @@ msgstr "Jelszó visszaállítása"
|
|||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Resolved"
|
msgid "Resolved"
|
||||||
msgstr ""
|
msgstr "Megoldva"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Resume"
|
msgid "Resume"
|
||||||
@@ -939,11 +932,11 @@ msgstr "Folytatás"
|
|||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Rotate token"
|
msgid "Rotate token"
|
||||||
msgstr ""
|
msgstr "Tokenváltás"
|
||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Rows per page"
|
msgid "Rows per page"
|
||||||
msgstr ""
|
msgstr "Sorok száma oldalanként"
|
||||||
|
|
||||||
#: src/components/routes/settings/notifications.tsx
|
#: src/components/routes/settings/notifications.tsx
|
||||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||||
@@ -956,7 +949,7 @@ msgstr "Beállítások mentése"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
msgid "Save system"
|
msgid "Save system"
|
||||||
msgstr ""
|
msgstr "Rendszer mentése"
|
||||||
|
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
@@ -1004,8 +997,9 @@ msgstr "Rendezés"
|
|||||||
#. Context: alert state (active or resolved)
|
#. Context: alert state (active or resolved)
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr "Állapot"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap használat"
|
msgstr "Swap használat"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1028,11 +1023,7 @@ msgstr "Rendszer"
|
|||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "System load averages over time"
|
msgid "System load averages over time"
|
||||||
msgstr ""
|
msgstr "Rendszer terhelési átlaga"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
|
||||||
msgid "System Stats"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Systems"
|
msgid "Systems"
|
||||||
@@ -1049,7 +1040,7 @@ msgstr "Tábla"
|
|||||||
#. Temperature label in systems table
|
#. Temperature label in systems table
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Temp"
|
msgid "Temp"
|
||||||
msgstr ""
|
msgstr "Hőmérséklet"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1058,7 +1049,7 @@ msgstr "Hőmérséklet"
|
|||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Temperature unit"
|
msgid "Temperature unit"
|
||||||
msgstr ""
|
msgstr "Hőmérséklet mértékegysége"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "Temperatures of system sensors"
|
msgid "Temperatures of system sensors"
|
||||||
@@ -1082,7 +1073,7 @@ msgstr "Ezt a műveletet nem lehet visszavonni! Véglegesen törli a {name} öss
|
|||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "This will permanently delete all selected records from the database."
|
msgid "This will permanently delete all selected records from the database."
|
||||||
msgstr ""
|
msgstr "Ez véglegesen törli az összes kijelölt bejegyzést az adatbázisból."
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "Throughput of {extraFsName}"
|
msgid "Throughput of {extraFsName}"
|
||||||
@@ -1112,13 +1103,13 @@ msgstr "Téma váltása"
|
|||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Token"
|
msgid "Token"
|
||||||
msgstr ""
|
msgstr "Token"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/settings/layout.tsx
|
#: src/components/routes/settings/layout.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Tokens & Fingerprints"
|
msgid "Tokens & Fingerprints"
|
||||||
msgstr ""
|
msgstr "Tokenek & Ujjlenyomatok"
|
||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Tokens allow agents to connect and register. Fingerprints are stable identifiers unique to each system, set on first connection."
|
msgid "Tokens allow agents to connect and register. Fingerprints are stable identifiers unique to each system, set on first connection."
|
||||||
@@ -1138,15 +1129,15 @@ msgstr "Összes elküldött adat minden interfészenként"
|
|||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when 1 minute load average exceeds a threshold"
|
msgid "Triggers when 1 minute load average exceeds a threshold"
|
||||||
msgstr ""
|
msgstr "Riaszt, ha az 1 perces terhelési átlag túllép egy küszöbértéket"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when 15 minute load average exceeds a threshold"
|
msgid "Triggers when 15 minute load average exceeds a threshold"
|
||||||
msgstr ""
|
msgstr "Riaszt, ha a 15 perces terhelési átlag túllép egy küszöbértéket"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when 5 minute load average exceeds a threshold"
|
msgid "Triggers when 5 minute load average exceeds a threshold"
|
||||||
msgstr ""
|
msgstr "Riaszt, ha az 5 perces terhelési átlag túllép egy küszöbértéket"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when any sensor exceeds a threshold"
|
msgid "Triggers when any sensor exceeds a threshold"
|
||||||
@@ -1175,12 +1166,12 @@ msgstr "Bekapcsol, ha a lemez érzékelő túllép egy küszöbértéket"
|
|||||||
#. Temperature / network units
|
#. Temperature / network units
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Unit preferences"
|
msgid "Unit preferences"
|
||||||
msgstr ""
|
msgstr "Mértékegység beállítások"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Universal token"
|
msgid "Universal token"
|
||||||
msgstr ""
|
msgstr "Univerzális token"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
@@ -1191,11 +1182,15 @@ msgstr "Ismeretlen"
|
|||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Up"
|
msgid "Up"
|
||||||
msgstr ""
|
msgstr "Online"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr "Online ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Frissítve"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
@@ -1228,7 +1223,7 @@ msgstr "Felhasználók"
|
|||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr ""
|
msgstr "Érték"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "View"
|
msgid "View"
|
||||||
@@ -1240,16 +1235,12 @@ msgstr "Továbbiak megjelenítése"
|
|||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "View your 200 most recent alerts."
|
msgid "View your 200 most recent alerts."
|
||||||
msgstr ""
|
msgstr "Legfrissebb 200 riasztásod áttekintése."
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Aðgerðir"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Virkar tilkynningar"
|
msgstr "Virkar tilkynningar"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr ""
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Tilkynningar"
|
msgstr "Tilkynningar"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Allar gámar"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Smelltu á gám til að sjá frekari upplýsingar."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Stilltu hvernig þú vilt fá tilkynningar."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Staðfestu lykilorð"
|
msgstr "Staðfestu lykilorð"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr ""
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "Örgjörvi"
|
msgstr "Örgjörvi"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Núverandi ástand"
|
msgstr "Núverandi ástand"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Yfirlitssíða"
|
msgstr "Yfirlitssíða"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Eyða"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Nánar"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 ""
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Villa"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Fór yfir {0}{1} á síðustu {2, plural, one {# mínútu} other {# mínútum}}"
|
msgstr "Fór yfir {0}{1} á síðustu {2, plural, one {# mínútu} other {# mínútum}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.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..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Skjákorts rafmagnsnotkun"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Heilsa"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Innskránings tilraun misheppnaðist"
|
msgstr "Innskránings tilraun misheppnaðist"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Loggar"
|
msgstr "Loggar"
|
||||||
@@ -724,6 +711,7 @@ msgstr ""
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Mest 1 mínúta"
|
msgstr "Mest 1 mínúta"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Minni"
|
msgstr "Minni"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Minnisnotkun docker kerfa"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nafn"
|
msgstr "Nafn"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Net"
|
msgstr "Net"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -811,6 +798,7 @@ msgstr "Eða halda áfram með"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Yfirskrifa núverandi tilkynningu"
|
msgstr "Yfirskrifa núverandi tilkynningu"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Síða"
|
msgstr "Síða"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Lesa"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Móttekið"
|
msgstr "Móttekið"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Endurhlaða"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Raða eftir"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Skipti minni"
|
msgstr "Skipti minni"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr ""
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Uppfært"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Azioni"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Attivo"
|
msgstr "Attivo"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Avvisi Attivi"
|
msgstr "Avvisi Attivi"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Cronologia Avvisi"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Avvisi"
|
msgstr "Avvisi"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Tutti i contenitori"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Fare clic su un contenitore per visualizzare ulteriori informazioni."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Configura come ricevere le notifiche di avviso."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Conferma password"
|
msgstr "Conferma password"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Copia il contenuto<0>docker-compose.yml</0> per l'agente qui sotto, o re
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Copia YAML"
|
msgstr "Copia YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Stato attuale"
|
msgstr "Stato attuale"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Cruscotto"
|
msgstr "Cruscotto"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Elimina"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Elimina impronta digitale"
|
msgstr "Elimina impronta digitale"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Dettagli"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Errore"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Supera {0}{1} negli ultimi {2, plural, one {# minuto} other {# minuti}}"
|
msgstr "Supera {0}{1} negli ultimi {2, plural, one {# minuto} other {# minuti}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtra..."
|
msgstr "Filtra..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Consumo della GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Griglia"
|
msgstr "Griglia"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Stato"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Tentativo di accesso fallito"
|
msgstr "Tentativo di accesso fallito"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Log"
|
msgstr "Log"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Istruzioni di configurazione manuale"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Max 1 min"
|
msgstr "Max 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Memoria"
|
msgstr "Memoria"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Utilizzo della memoria dei container Docker"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nome"
|
msgstr "Nome"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Rete"
|
msgstr "Rete"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Nessun risultato."
|
msgstr "Nessun risultato."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Oppure continua con"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Sovrascrivi avvisi esistenti"
|
msgstr "Sovrascrivi avvisi esistenti"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Pagina"
|
msgstr "Pagina"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Lettura"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Ricevuto"
|
msgstr "Ricevuto"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Aggiorna"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Richiedi una password monouso"
|
msgstr "Richiedi una password monouso"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Ordina per"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Stato"
|
msgstr "Stato"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Utilizzo Swap"
|
msgstr "Utilizzo Swap"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Attivo"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Attivo ({upSystemsLength})"
|
msgstr "Attivo ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Aggiornato"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Carica"
|
msgstr "Carica"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "アクション"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "アクティブ"
|
msgstr "アクティブ"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "アクティブなアラート"
|
msgstr "アクティブなアラート"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "アラート履歴"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "アラート"
|
msgstr "アラート"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "すべてのコンテナ"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "詳細についてはログを確認してください。"
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "通知サービスを確認してください"
|
msgstr "通知サービスを確認してください"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "アラート通知の受信方法を設定します。"
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "パスワードを確認"
|
msgstr "パスワードを確認"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "下記のエージェントの<0>docker-compose.yml</0>内容をコピ
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "YAMLをコピー"
|
msgstr "YAMLをコピー"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "現在の状態"
|
msgstr "現在の状態"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "ダッシュボード"
|
msgstr "ダッシュボード"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "削除"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "フィンガープリントを削除"
|
msgstr "フィンガープリントを削除"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "詳細"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "ディスク単位"
|
||||||
@@ -445,14 +449,6 @@ 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メモリ使用率"
|
||||||
@@ -461,14 +457,6 @@ 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 "ドキュメント"
|
||||||
@@ -536,7 +524,7 @@ msgstr "エラー"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "過去{2, plural, one {# 分} other {# 分}}で{0}{1}を超えています"
|
msgstr "過去{2, plural, one {# 分} other {# 分}}で{0}{1}を超えています"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "テスト通知の送信に失敗しました"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "アラートの更新に失敗しました"
|
msgstr "アラートの更新に失敗しました"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "フィルター..."
|
msgstr "フィルター..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPUの消費電力"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "グリッド"
|
msgstr "グリッド"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "ヘルス"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "ログイン試行に失敗しました"
|
msgstr "ログイン試行に失敗しました"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "ログ"
|
msgstr "ログ"
|
||||||
@@ -724,6 +711,7 @@ msgstr "手動セットアップの手順"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "最大1分"
|
msgstr "最大1分"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "メモリ"
|
msgstr "メモリ"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Dockerコンテナのメモリ使用率"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "名前"
|
msgstr "名前"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "帯域"
|
msgstr "帯域"
|
||||||
@@ -762,14 +752,11 @@ 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 "結果が見つかりませんでした。"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "結果がありません。"
|
msgstr "結果がありません。"
|
||||||
@@ -811,6 +798,7 @@ msgstr "または、以下の方法でログイン"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "既存のアラートを上書き"
|
msgstr "既存のアラートを上書き"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "ページ"
|
msgstr "ページ"
|
||||||
@@ -915,6 +903,11 @@ msgstr "読み取り"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "受信"
|
msgstr "受信"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "更新"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "ワンタイムパスワードをリクエスト"
|
msgstr "ワンタイムパスワードをリクエスト"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "並び替え基準"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "状態"
|
msgstr "状態"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "スワップ使用量"
|
msgstr "スワップ使用量"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "システム"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "正常"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "正常 ({upSystemsLength})"
|
msgstr "正常 ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "更新済み"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "アップロード"
|
msgstr "アップロード"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "表示するのに十分なレコードを待っています"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "작업"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "활성"
|
msgstr "활성"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "활성화된 알림들"
|
msgstr "활성화된 알림들"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "알림 기록"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "알림"
|
msgstr "알림"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "모든 컨테이너"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "자세한 내용은 로그를 확인하세요."
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "알림 서비스를 확인하세요."
|
msgstr "알림 서비스를 확인하세요."
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "알림을 수신할 방법을 설정하세요."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "비밀번호 확인"
|
msgstr "비밀번호 확인"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "아래 에이전트의 <0>docker-compose.yml</0> 내용을 복사하거
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "YAML 복사"
|
msgstr "YAML 복사"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "현재 상태"
|
msgstr "현재 상태"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "대시보드"
|
msgstr "대시보드"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "삭제"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "지문 삭제"
|
msgstr "지문 삭제"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "세부사항"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "디스크 단위"
|
||||||
@@ -445,14 +449,6 @@ 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 메모리 사용량"
|
||||||
@@ -461,14 +457,6 @@ 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 "문서"
|
||||||
@@ -536,7 +524,7 @@ msgstr "오류"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "마지막 {2, plural, one {# 분} other {# 분}} 동안 {0}{1} 초과"
|
msgstr "마지막 {2, plural, one {# 분} other {# 분}} 동안 {0}{1} 초과"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "테스트 알림 전송 실패"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "알림 수정 실패"
|
msgstr "알림 수정 실패"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "필터..."
|
msgstr "필터..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU 전원 사용량"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "그리드"
|
msgstr "그리드"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "상태"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "로그인 실패"
|
msgstr "로그인 실패"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "로그"
|
msgstr "로그"
|
||||||
@@ -724,6 +711,7 @@ msgstr "수동 설정 방법"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "1분간 최댓값"
|
msgstr "1분간 최댓값"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "메모리"
|
msgstr "메모리"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Docker 컨테이너의 메모리 사용량"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "이름"
|
msgstr "이름"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "네트워크"
|
msgstr "네트워크"
|
||||||
@@ -762,14 +752,11 @@ 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 "결과가 없습니다."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "결과 없음."
|
msgstr "결과 없음."
|
||||||
@@ -811,6 +798,7 @@ msgstr "또는 아래 항목으로 진행하기"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "기존 알림 덮어쓰기"
|
msgstr "기존 알림 덮어쓰기"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "페이지"
|
msgstr "페이지"
|
||||||
@@ -915,6 +903,11 @@ msgstr "읽기"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "수신됨"
|
msgstr "수신됨"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "새로고침"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "OTP 요청"
|
msgstr "OTP 요청"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "정렬 기준"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "상태"
|
msgstr "상태"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "스왑 사용량"
|
msgstr "스왑 사용량"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "시스템"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "온라인"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "온라인 ({upSystemsLength})"
|
msgstr "온라인 ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "업데이트됨"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "업로드"
|
msgstr "업로드"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "표시할 충분한 기록을 기다리는 중"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Acties"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Actief"
|
msgstr "Actief"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Actieve waarschuwingen"
|
msgstr "Actieve waarschuwingen"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Melding geschiedenis"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Waarschuwingen"
|
msgstr "Waarschuwingen"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Alle containers"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Klik op een container om meer informatie te zien."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Configureer hoe je waarschuwingsmeldingen ontvangt."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Bevestig wachtwoord"
|
msgstr "Bevestig wachtwoord"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Kopieer de<0>docker-compose.yml</0> inhoud voor de agent hieronder, of r
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "YAML kopiëren"
|
msgstr "YAML kopiëren"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Huidige status"
|
msgstr "Huidige status"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Dashboard"
|
msgstr "Dashboard"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Verwijderen"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Vingerafdruk verwijderen"
|
msgstr "Vingerafdruk verwijderen"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detail"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Fout"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Overschrijdt {0}{1} in de laatste {2, plural, one {# minuut} other {# minuten}}"
|
msgstr "Overschrijdt {0}{1} in de laatste {2, plural, one {# minuut} other {# minuten}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filter..."
|
msgstr "Filter..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU stroomverbruik"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Raster"
|
msgstr "Raster"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Gezondheid"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Aanmelding mislukt"
|
msgstr "Aanmelding mislukt"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logs"
|
msgstr "Logs"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Handmatige installatie-instructies"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Max 1 min"
|
msgstr "Max 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Geheugen"
|
msgstr "Geheugen"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Geheugengebruik van docker containers"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Naam"
|
msgstr "Naam"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Net"
|
msgstr "Net"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Geen resultaten."
|
msgstr "Geen resultaten."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Of ga verder met"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Overschrijf bestaande waarschuwingen"
|
msgstr "Overschrijf bestaande waarschuwingen"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Pagina"
|
msgstr "Pagina"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Lezen"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Ontvangen"
|
msgstr "Ontvangen"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Vernieuwen"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Eenmalig wachtwoord aanvragen"
|
msgstr "Eenmalig wachtwoord aanvragen"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sorteren op"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Status"
|
msgstr "Status"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap gebruik"
|
msgstr "Swap gebruik"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Online"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Online ({upSystemsLength})"
|
msgstr "Online ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Bijgewerkt"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Uploaden"
|
msgstr "Uploaden"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -8,15 +8,15 @@ msgstr ""
|
|||||||
"Language: no\n"
|
"Language: no\n"
|
||||||
"Project-Id-Version: beszel\n"
|
"Project-Id-Version: beszel\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"PO-Revision-Date: 2025-10-06 07:37\n"
|
"PO-Revision-Date: 2025-10-13 17:31\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Norwegian\n"
|
"Language-Team: Norwegian\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Crowdin-Project: beszel\n"
|
"X-Crowdin-Project: beszel\n"
|
||||||
"X-Crowdin-Project-ID: 733311\n"
|
"X-Crowdin-Project-ID: 733311\n"
|
||||||
"X-Crowdin-Language: no\n"
|
"X-Crowdin-Language: no\n"
|
||||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
"X-Crowdin-File: /main/internal/site/src/locales/en/en.po\n"
|
||||||
"X-Crowdin-File-ID: 16\n"
|
"X-Crowdin-File-ID: 32\n"
|
||||||
|
|
||||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
@@ -31,13 +31,13 @@ msgstr "{0, plural, one {# time} other {# timer}}"
|
|||||||
#. placeholder {0}: Math.trunc(system.info.u / 60)
|
#. placeholder {0}: Math.trunc(system.info.u / 60)
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "{0, plural, one {# minute} few {# minutes} many {# minutes} other {# minutes}}"
|
msgid "{0, plural, one {# minute} few {# minutes} many {# minutes} other {# minutes}}"
|
||||||
msgstr ""
|
msgstr "{0, plural, one {# minutt} other {# minutter}}"
|
||||||
|
|
||||||
#. placeholder {0}: table.getFilteredSelectedRowModel().rows.length
|
#. placeholder {0}: table.getFilteredSelectedRowModel().rows.length
|
||||||
#. placeholder {1}: table.getFilteredRowModel().rows.length
|
#. placeholder {1}: table.getFilteredRowModel().rows.length
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "{0} of {1} row(s) selected."
|
msgid "{0} of {1} row(s) selected."
|
||||||
msgstr ""
|
msgstr "{0} av {1} rad(er) valgt."
|
||||||
|
|
||||||
#: src/lib/utils.ts
|
#: src/lib/utils.ts
|
||||||
msgid "1 hour"
|
msgid "1 hour"
|
||||||
@@ -63,7 +63,7 @@ msgstr "12 timer"
|
|||||||
#. Load average
|
#. Load average
|
||||||
#: src/components/charts/load-average-chart.tsx
|
#: src/components/charts/load-average-chart.tsx
|
||||||
msgid "15 min"
|
msgid "15 min"
|
||||||
msgstr ""
|
msgstr "15 min"
|
||||||
|
|
||||||
#: src/lib/utils.ts
|
#: src/lib/utils.ts
|
||||||
msgid "24 hours"
|
msgid "24 hours"
|
||||||
@@ -76,7 +76,7 @@ msgstr "30 dager"
|
|||||||
#. Load average
|
#. Load average
|
||||||
#: src/components/charts/load-average-chart.tsx
|
#: src/components/charts/load-average-chart.tsx
|
||||||
msgid "5 min"
|
msgid "5 min"
|
||||||
msgstr ""
|
msgstr "5 min"
|
||||||
|
|
||||||
#. Table column
|
#. Table column
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
@@ -87,9 +87,9 @@ msgstr "Handlinger"
|
|||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr ""
|
msgstr "Aktiv"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktive Alarmer"
|
msgstr "Aktive Alarmer"
|
||||||
|
|
||||||
@@ -126,14 +126,22 @@ msgstr "Agent"
|
|||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
#: src/components/routes/settings/layout.tsx
|
#: src/components/routes/settings/layout.tsx
|
||||||
msgid "Alert History"
|
msgid "Alert History"
|
||||||
msgstr ""
|
msgstr "Varselhistorikk"
|
||||||
|
|
||||||
#: src/components/alerts/alert-button.tsx
|
#: src/components/alerts/alert-button.tsx
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Alarmer"
|
msgstr "Alarmer"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Alle containere"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -145,7 +153,7 @@ msgstr "Er du sikker på at du vil slette {name}?"
|
|||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr "Er du sikker?"
|
||||||
|
|
||||||
#: src/components/copy-to-clipboard.tsx
|
#: src/components/copy-to-clipboard.tsx
|
||||||
msgid "Automatic copy requires a secure context."
|
msgid "Automatic copy requires a secure context."
|
||||||
@@ -210,12 +218,12 @@ msgstr "Binær"
|
|||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Bits (Kbps, Mbps, Gbps)"
|
msgid "Bits (Kbps, Mbps, Gbps)"
|
||||||
msgstr ""
|
msgstr "Bits (Kbps, Mbps, Gbps)"
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Bytes (KB/s, MB/s, GB/s)"
|
msgid "Bytes (KB/s, MB/s, GB/s)"
|
||||||
msgstr ""
|
msgstr "Bytes (KB/s, MB/s, GB/s)"
|
||||||
|
|
||||||
#: src/components/charts/mem-chart.tsx
|
#: src/components/charts/mem-chart.tsx
|
||||||
msgid "Cache / Buffers"
|
msgid "Cache / Buffers"
|
||||||
@@ -232,11 +240,11 @@ msgstr "Advarsel - potensielt tap av data"
|
|||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Celsius (°C)"
|
msgid "Celsius (°C)"
|
||||||
msgstr ""
|
msgstr "Celsius (°C)"
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Change display units for metrics."
|
msgid "Change display units for metrics."
|
||||||
msgstr ""
|
msgstr "Endre måleenheter for målinger."
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Change general application options."
|
msgid "Change general application options."
|
||||||
@@ -267,13 +275,13 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Klikk på en container for å se mer informasjon."
|
||||||
|
|
||||||
#: 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 "Klikk på et system for å se mer informasjon."
|
||||||
|
|
||||||
#: src/components/ui/input-copy.tsx
|
#: src/components/ui/input-copy.tsx
|
||||||
msgid "Click to copy"
|
msgid "Click to copy"
|
||||||
@@ -293,13 +301,9 @@ msgstr "Konfigurer hvordan du vil motta alarmvarsler."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Bekreft passord"
|
msgstr "Bekreft passord"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Connection is down"
|
msgid "Connection is down"
|
||||||
msgstr ""
|
msgstr "Tilkoblingen er nede"
|
||||||
|
|
||||||
#: 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
|
||||||
@@ -325,7 +329,7 @@ msgstr "Kopier docker run"
|
|||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Environment variables"
|
msgctxt "Environment variables"
|
||||||
msgid "Copy env"
|
msgid "Copy env"
|
||||||
msgstr ""
|
msgstr "Kopier env"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Copy host"
|
msgid "Copy host"
|
||||||
@@ -346,16 +350,17 @@ msgstr "Kopier tekst"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
msgid "Copy the installation command for the agent below, or register agents automatically with a <0>universal token</0>."
|
msgid "Copy the installation command for the agent below, or register agents automatically with a <0>universal token</0>."
|
||||||
msgstr ""
|
msgstr "Kopier installasjonskommandoen for agenten nedenfor, eller registrer agenter automatisk med en <0>universal token</0>."
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
msgid "Copy the<0>docker-compose.yml</0> content for the agent below, or register agents automatically with a <1>universal token</1>."
|
msgid "Copy the<0>docker-compose.yml</0> content for the agent below, or register agents automatically with a <1>universal token</1>."
|
||||||
msgstr ""
|
msgstr "Kopier <0>docker-compose.yml</0> for agenten nedenfor, eller registrer agenter automatisk med en <0>universal token</0>."
|
||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr ""
|
msgstr "Kopier YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -373,7 +378,7 @@ msgstr "Opprett konto"
|
|||||||
#. Context: date created
|
#. Context: date created
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "Created"
|
msgid "Created"
|
||||||
msgstr ""
|
msgstr "Opprettet"
|
||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Critical (%)"
|
msgid "Critical (%)"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Nåværende tilstand"
|
msgstr "Nåværende tilstand"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Dashbord"
|
msgstr "Dashbord"
|
||||||
|
|
||||||
@@ -408,7 +412,11 @@ msgstr "Slett"
|
|||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr ""
|
msgstr "Slett fingeravtrykk"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detalj"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
@@ -423,13 +431,9 @@ 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 "Diskenhet"
|
||||||
|
|
||||||
#: src/components/charts/disk-chart.tsx
|
#: src/components/charts/disk-chart.tsx
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -483,7 +471,7 @@ msgstr "Nede"
|
|||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Down ({downSystemsLength})"
|
msgid "Down ({downSystemsLength})"
|
||||||
msgstr ""
|
msgstr "Nede ({downSystemsLength})"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Download"
|
msgid "Download"
|
||||||
@@ -491,7 +479,7 @@ msgstr "Last ned"
|
|||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
msgstr ""
|
msgstr "Varighet"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
@@ -536,7 +524,7 @@ msgstr "Feil"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Overstiger {0}{1} {2, plural, one {det siste minuttet} other {de siste # minuttene}}"
|
msgstr "Overstiger {0}{1} {2, plural, one {det siste minuttet} other {de siste # minuttene}}"
|
||||||
|
|
||||||
@@ -546,7 +534,7 @@ msgstr "Eksisterende systemer som ikke er er definert i <0>config.yml</0> vil bl
|
|||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Export"
|
msgid "Export"
|
||||||
msgstr ""
|
msgstr "Eksporter"
|
||||||
|
|
||||||
#: src/components/routes/settings/config-yaml.tsx
|
#: src/components/routes/settings/config-yaml.tsx
|
||||||
msgid "Export configuration"
|
msgid "Export configuration"
|
||||||
@@ -558,7 +546,7 @@ msgstr "Eksporter din nåværende systemkonfigurasjon"
|
|||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Fahrenheit (°F)"
|
msgid "Fahrenheit (°F)"
|
||||||
msgstr ""
|
msgstr "Fahrenheit (°F)"
|
||||||
|
|
||||||
#: src/lib/api.ts
|
#: src/lib/api.ts
|
||||||
msgid "Failed to authenticate"
|
msgid "Failed to authenticate"
|
||||||
@@ -577,22 +565,16 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filter..."
|
msgstr "Filter..."
|
||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Fingerprint"
|
msgid "Fingerprint"
|
||||||
msgstr ""
|
msgstr "Fingeravtrykk"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||||
@@ -611,7 +593,7 @@ msgstr "FreeBSD kommando"
|
|||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Full"
|
msgid "Full"
|
||||||
msgstr "Full"
|
msgstr "Fullt"
|
||||||
|
|
||||||
#. Context: General settings
|
#. Context: General settings
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU Effektforbruk"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Rutenett"
|
msgstr "Rutenett"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Helse"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -665,28 +651,28 @@ msgstr "Språk"
|
|||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Layout"
|
msgid "Layout"
|
||||||
msgstr "Layout"
|
msgstr "Oppsett"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "Load Average"
|
msgid "Load Average"
|
||||||
msgstr ""
|
msgstr "Snittbelastning Last"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Load Average 15m"
|
msgid "Load Average 15m"
|
||||||
msgstr ""
|
msgstr "Snittbelastning 15m"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Load Average 1m"
|
msgid "Load Average 1m"
|
||||||
msgstr ""
|
msgstr "Snittbelastning 1m"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Load Average 5m"
|
msgid "Load Average 5m"
|
||||||
msgstr ""
|
msgstr "Snittbelastning 5m"
|
||||||
|
|
||||||
#. Short label for load average
|
#. Short label for load average
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Load Avg"
|
msgid "Load Avg"
|
||||||
msgstr ""
|
msgstr "Snittbelastning"
|
||||||
|
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Innlogging mislyktes"
|
msgstr "Innlogging mislyktes"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logger"
|
msgstr "Logger"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Instruks for Manuell Installasjon"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Maks 1 min"
|
msgstr "Maks 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Minne"
|
msgstr "Minne"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Minnebruk av docker-konteinere"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Navn"
|
msgstr "Navn"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Nett"
|
msgstr "Nett"
|
||||||
@@ -760,19 +750,16 @@ msgstr "Nettverkstrafikk av eksterne nettverksgrensesnitt"
|
|||||||
#. Context: Bytes or bits
|
#. Context: Bytes or bits
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Network unit"
|
msgid "Network unit"
|
||||||
msgstr ""
|
msgstr "Nettverksenhet"
|
||||||
|
|
||||||
#: 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr ""
|
msgstr "Ingen resultater."
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
@@ -811,6 +798,7 @@ msgstr "Eller fortsett med"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Overskriv eksisterende alarmer"
|
msgstr "Overskriv eksisterende alarmer"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Side"
|
msgstr "Side"
|
||||||
@@ -819,7 +807,7 @@ msgstr "Side"
|
|||||||
#. placeholder {1}: table.getPageCount()
|
#. placeholder {1}: table.getPageCount()
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Page {0} of {1}"
|
msgid "Page {0} of {1}"
|
||||||
msgstr ""
|
msgstr "Side {0} av {1}"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Pages / Settings"
|
msgid "Pages / Settings"
|
||||||
@@ -852,7 +840,7 @@ msgstr "Satt på Pause"
|
|||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Paused ({pausedSystemsLength})"
|
msgid "Paused ({pausedSystemsLength})"
|
||||||
msgstr ""
|
msgstr "Pauset ({pausedSystemsLength})"
|
||||||
|
|
||||||
#: src/components/routes/settings/notifications.tsx
|
#: src/components/routes/settings/notifications.tsx
|
||||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||||
@@ -915,6 +903,11 @@ msgstr "Lesing"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Mottatt"
|
msgstr "Mottatt"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Oppdater"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Be om engangspassord"
|
msgstr "Be om engangspassord"
|
||||||
@@ -931,7 +924,7 @@ msgstr "Nullstill Passord"
|
|||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Resolved"
|
msgid "Resolved"
|
||||||
msgstr ""
|
msgstr "Løst"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Resume"
|
msgid "Resume"
|
||||||
@@ -939,11 +932,11 @@ msgstr "Gjenoppta"
|
|||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Rotate token"
|
msgid "Rotate token"
|
||||||
msgstr ""
|
msgstr "Forny token"
|
||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "Rows per page"
|
msgid "Rows per page"
|
||||||
msgstr ""
|
msgstr "Rader per side"
|
||||||
|
|
||||||
#: src/components/routes/settings/notifications.tsx
|
#: src/components/routes/settings/notifications.tsx
|
||||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||||
@@ -1004,8 +997,9 @@ msgstr "Sorter Etter"
|
|||||||
#. Context: alert state (active or resolved)
|
#. Context: alert state (active or resolved)
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr "Tilstand"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap-bruk"
|
msgstr "Swap-bruk"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1058,7 +1049,7 @@ msgstr "Temperatur"
|
|||||||
|
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Temperature unit"
|
msgid "Temperature unit"
|
||||||
msgstr ""
|
msgstr "Temperaturenhet"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "Temperatures of system sensors"
|
msgid "Temperatures of system sensors"
|
||||||
@@ -1082,7 +1073,7 @@ msgstr "Denne handlingen kan ikke omgjøres. Dette vil slette alle poster for {n
|
|||||||
|
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "This will permanently delete all selected records from the database."
|
msgid "This will permanently delete all selected records from the database."
|
||||||
msgstr ""
|
msgstr "Dette vil permanent slette alle valgte oppføringer fra databasen."
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
msgid "Throughput of {extraFsName}"
|
msgid "Throughput of {extraFsName}"
|
||||||
@@ -1112,21 +1103,21 @@ msgstr "Tema av/på"
|
|||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Token"
|
msgid "Token"
|
||||||
msgstr ""
|
msgstr "Token"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/settings/layout.tsx
|
#: src/components/routes/settings/layout.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Tokens & Fingerprints"
|
msgid "Tokens & Fingerprints"
|
||||||
msgstr ""
|
msgstr "Tokens & Fingeravtrykk"
|
||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Tokens allow agents to connect and register. Fingerprints are stable identifiers unique to each system, set on first connection."
|
msgid "Tokens allow agents to connect and register. Fingerprints are stable identifiers unique to each system, set on first connection."
|
||||||
msgstr ""
|
msgstr "Tokens lar agenter koble til og registrere seg selv. Fingeravtrykk er stabile identifikatorer som er unike for hvert system, og blir satt ved første tilkobling."
|
||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Tokens and fingerprints are used to authenticate WebSocket connections to the hub."
|
msgid "Tokens and fingerprints are used to authenticate WebSocket connections to the hub."
|
||||||
msgstr ""
|
msgstr "Tokens og fingeravtrykk blir brukt for å autentisere WebSocket-tilkoblinger til huben."
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Total data received for each interface"
|
msgid "Total data received for each interface"
|
||||||
@@ -1138,15 +1129,15 @@ msgstr "Totalt sendt data for hvert grensesnitt"
|
|||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when 1 minute load average exceeds a threshold"
|
msgid "Triggers when 1 minute load average exceeds a threshold"
|
||||||
msgstr ""
|
msgstr "Slår inn når gjennomsnittsbelastningen over 1 minutt overstiger en grenseverdi"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when 15 minute load average exceeds a threshold"
|
msgid "Triggers when 15 minute load average exceeds a threshold"
|
||||||
msgstr ""
|
msgstr "Slår inn når gjennomsnittsbelastningen over 15 minutter overstiger en grenseverdi"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when 5 minute load average exceeds a threshold"
|
msgid "Triggers when 5 minute load average exceeds a threshold"
|
||||||
msgstr ""
|
msgstr "Slår inn når gjennomsnittsbelastningen over 5 minutter overstiger en grenseverdi"
|
||||||
|
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Triggers when any sensor exceeds a threshold"
|
msgid "Triggers when any sensor exceeds a threshold"
|
||||||
@@ -1175,12 +1166,12 @@ msgstr "Slår inn når forbruk av hvilken som helst disk overstiger en grensever
|
|||||||
#. Temperature / network units
|
#. Temperature / network units
|
||||||
#: src/components/routes/settings/general.tsx
|
#: src/components/routes/settings/general.tsx
|
||||||
msgid "Unit preferences"
|
msgid "Unit preferences"
|
||||||
msgstr ""
|
msgstr "Enhetspreferanser"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "Universal token"
|
msgid "Universal token"
|
||||||
msgstr ""
|
msgstr "Universal token"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
@@ -1195,7 +1186,11 @@ msgstr "Oppe"
|
|||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr "Oppe ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Oppdatert"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
@@ -1228,7 +1223,7 @@ msgstr "Brukere"
|
|||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr ""
|
msgstr "Verdi"
|
||||||
|
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "View"
|
msgid "View"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
@@ -1272,7 +1263,7 @@ msgstr "Webhook / Push-varslinger"
|
|||||||
|
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgid "When enabled, this token allows agents to self-register without prior system creation. Expires after one hour or on hub restart."
|
msgid "When enabled, this token allows agents to self-register without prior system creation. Expires after one hour or on hub restart."
|
||||||
msgstr ""
|
msgstr "Når aktivert lar denne tokenen agenter registrere seg selv uten å opprettes på systemet først. Utløper etter én time eller når huben starter på nytt."
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Akcje"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktywny"
|
msgstr "Aktywny"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktywne alerty"
|
msgstr "Aktywne alerty"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Historia alertów"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Alerty"
|
msgstr "Alerty"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Wszystkie kontenery"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Kliknij na kontener, aby wyświetlić więcej informacji."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Skonfiguruj sposób otrzymywania powiadomień."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Potwierdź hasło"
|
msgstr "Potwierdź hasło"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Skopiuj poniżej zawartość pliku <0>docker-compose.yml</0> dla agenta
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Kopiuj YAML"
|
msgstr "Kopiuj YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "Procesor"
|
msgstr "Procesor"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Aktualny stan"
|
msgstr "Aktualny stan"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Panel kontrolny"
|
msgstr "Panel kontrolny"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Usuń"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Usuń odcisk palca"
|
msgstr "Usuń odcisk palca"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Szczegół"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Błąd"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Przekracza {0}{1} w ciągu ostatnich {2, plural, one {# minuty} other {# minut}}"
|
msgstr "Przekracza {0}{1} w ciągu ostatnich {2, plural, one {# minuty} other {# minut}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtruj..."
|
msgstr "Filtruj..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Moc GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Siatka"
|
msgstr "Siatka"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Zdrowie"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Próba logowania nie powiodła się"
|
msgstr "Próba logowania nie powiodła się"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logi"
|
msgstr "Logi"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Instrukcja ręcznej konfiguracji"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Maks. 1 min"
|
msgstr "Maks. 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Pamięć"
|
msgstr "Pamięć"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Użycie pamięci przez kontenery Docker."
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nazwa"
|
msgstr "Nazwa"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Sieć"
|
msgstr "Sieć"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Brak wyników."
|
msgstr "Brak wyników."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Lub kontynuuj z"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Nadpisz istniejące alerty"
|
msgstr "Nadpisz istniejące alerty"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Strona"
|
msgstr "Strona"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Odczyt"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Otrzymane"
|
msgstr "Otrzymane"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Odśwież"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Zażądaj jednorazowego hasła"
|
msgstr "Zażądaj jednorazowego hasła"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sortuj według"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Stan"
|
msgstr "Stan"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Użycie pamięci wymiany"
|
msgstr "Użycie pamięci wymiany"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Działa"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Działa ({upSystemsLength})"
|
msgstr "Działa ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Zaktualizowano"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Wysyłanie"
|
msgstr "Wysyłanie"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Ações"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Ativo"
|
msgstr "Ativo"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Alertas Ativos"
|
msgstr "Alertas Ativos"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Histórico de alertas"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Alertas"
|
msgstr "Alertas"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Todos os contentores"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Clique num contentor para ver mais informações."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Configure como você recebe notificações de alerta."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Confirmar senha"
|
msgstr "Confirmar senha"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Copie o conteúdo do <0>docker-compose.yml</0> do agente abaixo, ou regi
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Copiar YAML"
|
msgstr "Copiar YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Estado atual"
|
msgstr "Estado atual"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Painel"
|
msgstr "Painel"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Excluir"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Excluir impressão digital"
|
msgstr "Excluir impressão digital"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detalhe"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Erro"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Excede {0}{1} no último {2, plural, one {# minuto} other {# minutos}}"
|
msgstr "Excede {0}{1} no último {2, plural, one {# minuto} other {# minutos}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtrar..."
|
msgstr "Filtrar..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Consumo de Energia da GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Grade"
|
msgstr "Grade"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Saúde"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Tentativa de login falhou"
|
msgstr "Tentativa de login falhou"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Logs"
|
msgstr "Logs"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Instruções de configuração manual"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Máx 1 min"
|
msgstr "Máx 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Memória"
|
msgstr "Memória"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Uso de memória dos contêineres Docker"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nome"
|
msgstr "Nome"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Rede"
|
msgstr "Rede"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Sem resultados."
|
msgstr "Sem resultados."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Ou continue com"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Sobrescrever alertas existentes"
|
msgstr "Sobrescrever alertas existentes"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Página"
|
msgstr "Página"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Ler"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Recebido"
|
msgstr "Recebido"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Atualizar"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Solicitar senha de uso único"
|
msgstr "Solicitar senha de uso único"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Ordenar Por"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Estado"
|
msgstr "Estado"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Uso de Swap"
|
msgstr "Uso de Swap"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "“Ligado”"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Ativo ({upSystemsLength})"
|
msgstr "Ativo ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Atualizado"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Carregar"
|
msgstr "Carregar"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Действия"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Активно"
|
msgstr "Активно"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Активные оповещения"
|
msgstr "Активные оповещения"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "История оповещений"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Оповещения"
|
msgstr "Оповещения"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Все контейнеры"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "Проверьте журналы для получения более
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "Проверьте ваш сервис уведомлений"
|
msgstr "Проверьте ваш сервис уведомлений"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Настройте, как вы получаете уведомлени
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Подтвердите пароль"
|
msgstr "Подтвердите пароль"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Скопируйте содержимое <0>docker-compose.yml</0> дл
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Скопировать YAML"
|
msgstr "Скопировать YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "ЦП"
|
msgstr "ЦП"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Текущее состояние"
|
msgstr "Текущее состояние"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Панель управления"
|
msgstr "Панель управления"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Удалить"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Удалить отпечаток"
|
msgstr "Удалить отпечаток"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Подробности"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "Единицы измерения температуры"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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 "Документация"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Ошибка"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Превышает {0}{1} за последние {2, plural, one {# минуту} other {# минут}}"
|
msgstr "Превышает {0}{1} за последние {2, plural, one {# минуту} other {# минут}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "Не удалось отправить тестовое уведомле
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "Не удалось обновить оповещение"
|
msgstr "Не удалось обновить оповещение"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Фильтр..."
|
msgstr "Фильтр..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Потребляемая мощность GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Сетка"
|
msgstr "Сетка"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Здоровье"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Попытка входа не удалась"
|
msgstr "Попытка входа не удалась"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Журналы"
|
msgstr "Журналы"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Инструкции по ручной настройке"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Макс 1 мин"
|
msgstr "Макс 1 мин"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Память"
|
msgstr "Память"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Использование памяти контейнерами Docker"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Имя"
|
msgstr "Имя"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Сеть"
|
msgstr "Сеть"
|
||||||
@@ -762,14 +752,11 @@ 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 "Результаты не найдены."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Нет результатов."
|
msgstr "Нет результатов."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Или продолжить с"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Перезаписать существующие оповещения"
|
msgstr "Перезаписать существующие оповещения"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Страница"
|
msgstr "Страница"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Чтение"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Получено"
|
msgstr "Получено"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Обновить"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Запросить одноразовый пароль"
|
msgstr "Запросить одноразовый пароль"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Сортировать по"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Состояние"
|
msgstr "Состояние"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Использование подкачки"
|
msgstr "Использование подкачки"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "Системы"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "В сети"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "В сети ({upSystemsLength})"
|
msgstr "В сети ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Обновлено"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Загрузить"
|
msgstr "Загрузить"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "Ожидание достаточного количества записей для отображения"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Dejanja"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktivna opozorila"
|
msgstr "Aktivna opozorila"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr ""
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Opozorila"
|
msgstr "Opozorila"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Vsi kontejnerji"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Kliknite na kontejner za več informacij."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Nastavi način prejemanja opozorilnih obvestil."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Potrdite geslo"
|
msgstr "Potrdite geslo"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr ""
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Trenutno stanje"
|
msgstr "Trenutno stanje"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Nadzorna plošča"
|
msgstr "Nadzorna plošča"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Izbriši"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Podrobnost"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 ""
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Napaka"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Preseženo {0}{1} v zadnjih {2, plural, one {# minuti} other {# minutah}}"
|
msgstr "Preseženo {0}{1} v zadnjih {2, plural, one {# minuti} other {# minutah}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filter..."
|
msgstr "Filter..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU poraba moči"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Mreža"
|
msgstr "Mreža"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Zdravje"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Poskus prijave ni uspel"
|
msgstr "Poskus prijave ni uspel"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Dnevniki"
|
msgstr "Dnevniki"
|
||||||
@@ -724,6 +711,7 @@ msgstr ""
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Največ 1 min"
|
msgstr "Največ 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Pomnilnik"
|
msgstr "Pomnilnik"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Poraba pomnilnika docker kontejnerjev"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Naziv"
|
msgstr "Naziv"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Mreža"
|
msgstr "Mreža"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -811,6 +798,7 @@ msgstr "Ali nadaljuj z"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Prepiši obstoječe alarme"
|
msgstr "Prepiši obstoječe alarme"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Stran"
|
msgstr "Stran"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Preberano"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Prejeto"
|
msgstr "Prejeto"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Osveži"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Zahtevaj enkratno geslo"
|
msgstr "Zahtevaj enkratno geslo"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Razvrsti po"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap uporaba"
|
msgstr "Swap uporaba"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr ""
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Posodobljeno"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Naloži"
|
msgstr "Naloži"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Åtgärder"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktiv"
|
msgstr "Aktiv"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktiva larm"
|
msgstr "Aktiva larm"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr ""
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Larm"
|
msgstr "Larm"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Alla behållare"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Klicka på en behållare för att visa mer information."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Konfigurera hur du tar emot larmaviseringar."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Bekräfta lösenord"
|
msgstr "Bekräfta lösenord"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr ""
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Kopiera YAML"
|
msgstr "Kopiera YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Aktuellt tillstånd"
|
msgstr "Aktuellt tillstånd"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Dashboard"
|
msgstr "Dashboard"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Ta bort"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Detalj"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 ""
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Fel"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Överskrider {0}{1} under de senaste {2, plural, one {# minuten} other {# minuterna}}"
|
msgstr "Överskrider {0}{1} under de senaste {2, plural, one {# minuten} other {# minuterna}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtrera..."
|
msgstr "Filtrera..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU-strömförbrukning"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Rutnät"
|
msgstr "Rutnät"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Hälsa"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Inloggningsförsök misslyckades"
|
msgstr "Inloggningsförsök misslyckades"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Loggar"
|
msgstr "Loggar"
|
||||||
@@ -724,6 +711,7 @@ msgstr ""
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Max 1 min"
|
msgstr "Max 1 min"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Minne"
|
msgstr "Minne"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Minnesanvändning för dockercontainrar"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Namn"
|
msgstr "Namn"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Nät"
|
msgstr "Nät"
|
||||||
@@ -762,14 +752,11 @@ 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."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -811,6 +798,7 @@ msgstr "Eller fortsätt med"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Skriv över befintliga larm"
|
msgstr "Skriv över befintliga larm"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Sida"
|
msgstr "Sida"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Läs"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Mottaget"
|
msgstr "Mottaget"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Uppdatera"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Begär engångslösenord"
|
msgstr "Begär engångslösenord"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sortera efter"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Swap-användning"
|
msgstr "Swap-användning"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr ""
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Uppdaterad"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Ladda upp"
|
msgstr "Ladda upp"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Eylemler"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktif"
|
msgstr "Aktif"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Aktif Uyarılar"
|
msgstr "Aktif Uyarılar"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Uyarı Geçmişi"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Uyarılar"
|
msgstr "Uyarılar"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Tüm Konteynerler"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Daha fazla bilgi görüntülemek için bir konteynere tıklayın."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Uyarı bildirimlerini nasıl alacağınızı yapılandırın."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Şifreyi onayla"
|
msgstr "Şifreyi onayla"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Aşağıdaki agent için <0>docker-compose.yml</0> içeriğini kopyalay
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "YAML'ı kopyala"
|
msgstr "YAML'ı kopyala"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Mevcut durum"
|
msgstr "Mevcut durum"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Gösterge Paneli"
|
msgstr "Gösterge Paneli"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Sil"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Parmak izini sil"
|
msgstr "Parmak izini sil"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Ayrıntı"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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ı"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Hata"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Son {2, plural, one {# dakika} other {# dakika}} içinde {0}{1} aşıyor"
|
msgstr "Son {2, plural, one {# dakika} other {# dakika}} içinde {0}{1} aşıyor"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Filtrele..."
|
msgstr "Filtrele..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU Güç Çekimi"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Izgara"
|
msgstr "Izgara"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Sağlık"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Giriş denemesi başarısız"
|
msgstr "Giriş denemesi başarısız"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Günlükler"
|
msgstr "Günlükler"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Manuel kurulum talimatları"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Maks 1 dk"
|
msgstr "Maks 1 dk"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Bellek"
|
msgstr "Bellek"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Docker konteynerlerinin bellek kullanımı"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Ad"
|
msgstr "Ad"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Ağ"
|
msgstr "Ağ"
|
||||||
@@ -762,14 +752,11 @@ 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ı."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Sonuç yok."
|
msgstr "Sonuç yok."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Veya devam et"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Mevcut uyarıların üzerine yaz"
|
msgstr "Mevcut uyarıların üzerine yaz"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Sayfa"
|
msgstr "Sayfa"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Oku"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Alındı"
|
msgstr "Alındı"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Yenile"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Tek kullanımlık şifre iste"
|
msgstr "Tek kullanımlık şifre iste"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sıralama Ölçütü"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Durum"
|
msgstr "Durum"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Takas Kullanımı"
|
msgstr "Takas Kullanımı"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Açık"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Açık ({upSystemsLength})"
|
msgstr "Açık ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Güncellendi"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Yükle"
|
msgstr "Yükle"
|
||||||
@@ -1246,10 +1241,6 @@ 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"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Дії"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Активне"
|
msgstr "Активне"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Активні сповіщення"
|
msgstr "Активні сповіщення"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Історія сповіщень"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Сповіщення"
|
msgstr "Сповіщення"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Всі контейнери"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "Перевірте журнали для отримання додатк
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "Перевірте свій сервіс сповіщень"
|
msgstr "Перевірте свій сервіс сповіщень"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Налаштуйте, як ви отримуєте сповіщення
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Підтвердьте пароль"
|
msgstr "Підтвердьте пароль"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Скопіюйте вміст <0>docker-compose.yml</0> для аген
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Копіювати YAML"
|
msgstr "Копіювати YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "ЦП"
|
msgstr "ЦП"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Поточний стан"
|
msgstr "Поточний стан"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Панель управління"
|
msgstr "Панель управління"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Видалити"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Видалити відбиток"
|
msgstr "Видалити відбиток"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Деталі"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "Одиниця виміру диска"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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 "Документація"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Помилка"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Перевищує {0}{1} протягом {2, plural, one {останньої # хвилини} other {останніх # хвилин}}"
|
msgstr "Перевищує {0}{1} протягом {2, plural, one {останньої # хвилини} other {останніх # хвилин}}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "Не вдалося надіслати тестове сповіщенн
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "Не вдалося оновити сповіщення"
|
msgstr "Не вдалося оновити сповіщення"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "Фільтр..."
|
msgstr "Фільтр..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Енергоспоживання GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Сітка"
|
msgstr "Сітка"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Здоров'я"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Спроба входу не вдалася"
|
msgstr "Спроба входу не вдалася"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Журнали"
|
msgstr "Журнали"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Інструкції з ручного налаштування"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Макс 1 хв"
|
msgstr "Макс 1 хв"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Пам'ять"
|
msgstr "Пам'ять"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Використання пам'яті контейнерами Docker"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Ім'я"
|
msgstr "Ім'я"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Мережа"
|
msgstr "Мережа"
|
||||||
@@ -762,14 +752,11 @@ 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 "Результатів не знайдено."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Немає результатів."
|
msgstr "Немає результатів."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Або продовжити з"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Перезаписати існуючі сповіщення"
|
msgstr "Перезаписати існуючі сповіщення"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Сторінка"
|
msgstr "Сторінка"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Читання"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Отримано"
|
msgstr "Отримано"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Оновити"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Запит одноразового пароля"
|
msgstr "Запит одноразового пароля"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Сортувати за"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Стан"
|
msgstr "Стан"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Використання підкачки"
|
msgstr "Використання підкачки"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "Системи"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Працює"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Працює ({upSystemsLength})"
|
msgstr "Працює ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Оновлено"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Відвантажити"
|
msgstr "Відвантажити"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "Очікування достатньої кількості записів для відображення"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "Hành động"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Hoạt động"
|
msgstr "Hoạt động"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "Cảnh báo hoạt động"
|
msgstr "Cảnh báo hoạt động"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "Lịch sử Cảnh báo"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "Cảnh báo"
|
msgstr "Cảnh báo"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "Tất cả container"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ 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
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
msgstr "Nhấp vào container để xem thêm thông tin."
|
||||||
|
|
||||||
#: 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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "Cấu hình cách bạn nhận thông báo cảnh báo."
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Xác nhận mật khẩu"
|
msgstr "Xác nhận mật khẩu"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "Sao chép nội dung <0>docker-compose.yml</0> cho tác nhân bên dư
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "Sao chép YAML"
|
msgstr "Sao chép YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "Trạng thái hiện tại"
|
msgstr "Trạng thái hiện tại"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Bảng điều khiển"
|
msgstr "Bảng điều khiển"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "Xóa"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "Xóa vân tay"
|
msgstr "Xóa vân tay"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "Chi tiết"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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"
|
||||||
@@ -445,14 +449,6 @@ 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"
|
||||||
@@ -461,14 +457,6 @@ 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"
|
||||||
@@ -536,7 +524,7 @@ msgstr "Lỗi"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "Vượt quá {0}{1} trong {2, plural, one {# phút} other {# phút}} qua"
|
msgstr "Vượt quá {0}{1} trong {2, plural, one {# phút} other {# phút}} qua"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ 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/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.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..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "Mức tiêu thụ điện của GPU"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "Lưới"
|
msgstr "Lưới"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "Sức khỏe"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "Nỗ lực đăng nhập thất bại"
|
msgstr "Nỗ lực đăng nhập thất bại"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "Nhật ký"
|
msgstr "Nhật ký"
|
||||||
@@ -724,6 +711,7 @@ msgstr "Hướng dẫn cài đặt thủ công"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "Tối đa 1 phút"
|
msgstr "Tối đa 1 phút"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "Bộ nhớ"
|
msgstr "Bộ nhớ"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Sử dụng bộ nhớ của các container Docker"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Tên"
|
msgstr "Tên"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "Mạng"
|
msgstr "Mạng"
|
||||||
@@ -762,14 +752,11 @@ 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ả."
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Không có kết quả."
|
msgstr "Không có kết quả."
|
||||||
@@ -811,6 +798,7 @@ msgstr "Hoặc tiếp tục với"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "Ghi đè các cảnh báo hiện có"
|
msgstr "Ghi đè các cảnh báo hiện có"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Trang"
|
msgstr "Trang"
|
||||||
@@ -915,6 +903,11 @@ msgstr "Đọc"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "Đã nhận"
|
msgstr "Đã nhận"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "Làm mới"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "Yêu cầu mật khẩu một lần"
|
msgstr "Yêu cầu mật khẩu một lần"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "Sắp xếp theo"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Trạng thái"
|
msgstr "Trạng thái"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "Sử dụng Hoán đổi"
|
msgstr "Sử dụng Hoán đổi"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "Hoạt động"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "Hoạt động ({upSystemsLength})"
|
msgstr "Hoạt động ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "Đã cập nhật"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Tải lên"
|
msgstr "Tải lên"
|
||||||
@@ -1246,10 +1241,6 @@ 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ị"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "操作"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "活跃"
|
msgstr "活跃"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "启用的警报"
|
msgstr "启用的警报"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "警报历史"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "警报"
|
msgstr "警报"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "所有容器"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "检查日志以获取更多详细信息。"
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "检查您的通知服务"
|
msgstr "检查您的通知服务"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "配置您接收警报通知的方式。"
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "确认密码"
|
msgstr "确认密码"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "复制下面的客户端<0>docker-compose.yml</0>内容,或使用<1>
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "复制 YAML"
|
msgstr "复制 YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "当前状态"
|
msgstr "当前状态"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "仪表板"
|
msgstr "仪表板"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "删除"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "删除指纹"
|
msgstr "删除指纹"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "详情"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "磁盘单位"
|
||||||
@@ -445,14 +449,6 @@ 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 内存使用"
|
||||||
@@ -461,14 +457,6 @@ 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 "文档"
|
||||||
@@ -536,7 +524,7 @@ msgstr "错误"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "在过去的{2, plural, one {# 分钟} other {# 分钟}}中超过{0}{1}"
|
msgstr "在过去的{2, plural, one {# 分钟} other {# 分钟}}中超过{0}{1}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "发送测试通知失败"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "更新警报失败"
|
msgstr "更新警报失败"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "过滤..."
|
msgstr "过滤..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU 功耗"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "网格"
|
msgstr "网格"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "健康"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "登录尝试失败"
|
msgstr "登录尝试失败"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "日志"
|
msgstr "日志"
|
||||||
@@ -724,6 +711,7 @@ msgstr "手动设置说明"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "1分钟内最大值"
|
msgstr "1分钟内最大值"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "内存"
|
msgstr "内存"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Docker 容器的内存使用率"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "名称"
|
msgstr "名称"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "网络"
|
msgstr "网络"
|
||||||
@@ -762,14 +752,11 @@ 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 "未找到结果。"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "无结果。"
|
msgstr "无结果。"
|
||||||
@@ -811,6 +798,7 @@ msgstr "或使用以下方式登录"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "覆盖现有警报"
|
msgstr "覆盖现有警报"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "页面"
|
msgstr "页面"
|
||||||
@@ -915,6 +903,11 @@ msgstr "读取"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "接收"
|
msgstr "接收"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "刷新"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "请求一次性密码"
|
msgstr "请求一次性密码"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "排序依据"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "状态"
|
msgstr "状态"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "SWAP 使用率"
|
msgstr "SWAP 使用率"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "系统"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "在线"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "在线 ({upSystemsLength})"
|
msgstr "在线 ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "已更新"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "上传"
|
msgstr "上传"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "正在收集足够的数据来显示"
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ msgstr "操作"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "啟用中"
|
msgstr "啟用中"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "活動警報"
|
msgstr "活動警報"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "警報歷史"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "警報"
|
msgstr "警報"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "所有容器"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "檢查日誌以取得更多資訊。"
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "檢查您的通知服務"
|
msgstr "檢查您的通知服務"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "配置您接收警報通知的方式。"
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "確認密碼"
|
msgstr "確認密碼"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "複製下面的代理程式<0>docker-compose.yml</0>內容,或使用<1
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "複製YAML"
|
msgstr "複製YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "目前狀態"
|
msgstr "目前狀態"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "控制面板"
|
msgstr "控制面板"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "刪除"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "刪除指紋"
|
msgstr "刪除指紋"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "詳細資訊"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "磁碟單位"
|
||||||
@@ -445,14 +449,6 @@ 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 記憶體使用率"
|
||||||
@@ -461,14 +457,6 @@ 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 "文件"
|
||||||
@@ -536,7 +524,7 @@ msgstr "錯誤"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "在過去的{2, plural, one {# 分鐘} other {# 分鐘}}中超過{0}{1}"
|
msgstr "在過去的{2, plural, one {# 分鐘} other {# 分鐘}}中超過{0}{1}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "發送測試通知失敗"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "更新警報失敗"
|
msgstr "更新警報失敗"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "篩選..."
|
msgstr "篩選..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU 功耗"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "網格"
|
msgstr "網格"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "健康狀態"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "登入嘗試失敗"
|
msgstr "登入嘗試失敗"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "日誌"
|
msgstr "日誌"
|
||||||
@@ -724,6 +711,7 @@ msgstr "手動設定說明"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "一分鐘內最大值"
|
msgstr "一分鐘內最大值"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "記憶體"
|
msgstr "記憶體"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Docker 容器的記憶體使用量"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "名稱"
|
msgstr "名稱"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "網絡"
|
msgstr "網絡"
|
||||||
@@ -762,14 +752,11 @@ 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 "未找到結果。"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "沒有結果。"
|
msgstr "沒有結果。"
|
||||||
@@ -811,6 +798,7 @@ msgstr "或繼續使用"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "覆蓋現有警報"
|
msgstr "覆蓋現有警報"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "頁面"
|
msgstr "頁面"
|
||||||
@@ -915,6 +903,11 @@ msgstr "讀取"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "接收"
|
msgstr "接收"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "重新整理"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "請求一次性密碼"
|
msgstr "請求一次性密碼"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "排序依據"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "狀態"
|
msgstr "狀態"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "交換使用"
|
msgstr "交換使用"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "系統"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "上線"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "上線 ({upSystemsLength})"
|
msgstr "上線 ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "已更新"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "上傳"
|
msgstr "上傳"
|
||||||
@@ -1246,10 +1241,6 @@ 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 "等待足夠的記錄以顯示"
|
||||||
|
|||||||
@@ -8,15 +8,15 @@ msgstr ""
|
|||||||
"Language: zh\n"
|
"Language: zh\n"
|
||||||
"Project-Id-Version: beszel\n"
|
"Project-Id-Version: beszel\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"PO-Revision-Date: 2025-08-28 23:21\n"
|
"PO-Revision-Date: 2025-10-12 03:15\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Chinese Traditional\n"
|
"Language-Team: Chinese Traditional\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Crowdin-Project: beszel\n"
|
"X-Crowdin-Project: beszel\n"
|
||||||
"X-Crowdin-Project-ID: 733311\n"
|
"X-Crowdin-Project-ID: 733311\n"
|
||||||
"X-Crowdin-Language: zh-TW\n"
|
"X-Crowdin-Language: zh-TW\n"
|
||||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
"X-Crowdin-File: /main/internal/site/src/locales/en/en.po\n"
|
||||||
"X-Crowdin-File-ID: 16\n"
|
"X-Crowdin-File-ID: 32\n"
|
||||||
|
|
||||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/routes/system.tsx
|
||||||
@@ -50,7 +50,7 @@ msgstr "1 分鐘"
|
|||||||
|
|
||||||
#: src/lib/utils.ts
|
#: src/lib/utils.ts
|
||||||
msgid "1 minute"
|
msgid "1 minute"
|
||||||
msgstr "1 分钟"
|
msgstr "1 分鐘"
|
||||||
|
|
||||||
#: src/lib/utils.ts
|
#: src/lib/utils.ts
|
||||||
msgid "1 week"
|
msgid "1 week"
|
||||||
@@ -89,7 +89,7 @@ msgstr "操作"
|
|||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "啟用中"
|
msgstr "啟用中"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Active Alerts"
|
msgid "Active Alerts"
|
||||||
msgstr "活動警報"
|
msgstr "活動警報"
|
||||||
|
|
||||||
@@ -133,7 +133,15 @@ msgstr "警報歷史"
|
|||||||
msgid "Alerts"
|
msgid "Alerts"
|
||||||
msgstr "警報"
|
msgstr "警報"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/routes/containers.tsx
|
||||||
|
msgid "All Containers"
|
||||||
|
msgstr "所有容器"
|
||||||
|
|
||||||
#: src/components/alerts/alerts-sheet.tsx
|
#: src/components/alerts/alerts-sheet.tsx
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/routes/home.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "All Systems"
|
msgid "All Systems"
|
||||||
@@ -267,9 +275,9 @@ msgstr "檢查系統記錄以取得更多資訊。"
|
|||||||
msgid "Check your notification service"
|
msgid "Check your notification service"
|
||||||
msgstr "檢查您的通知服務"
|
msgstr "檢查您的通知服務"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.tsx
|
||||||
msgid "Clear all"
|
msgid "Click on a container to view more information."
|
||||||
msgstr ""
|
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."
|
||||||
@@ -293,14 +301,10 @@ msgstr "設定您要如何接收警報通知"
|
|||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "確認密碼"
|
msgstr "確認密碼"
|
||||||
|
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
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"
|
||||||
@@ -356,6 +360,7 @@ msgstr "複製下面的代理程式<0>docker-compose.yml</0>內容,或使用<1
|
|||||||
msgid "Copy YAML"
|
msgid "Copy YAML"
|
||||||
msgstr "複製YAML"
|
msgstr "複製YAML"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
@@ -393,7 +398,6 @@ msgid "Current state"
|
|||||||
msgstr "目前狀態"
|
msgstr "目前狀態"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/routes/home.tsx
|
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "控制面板"
|
msgstr "控制面板"
|
||||||
|
|
||||||
@@ -410,6 +414,10 @@ msgstr "刪除"
|
|||||||
msgid "Delete fingerprint"
|
msgid "Delete fingerprint"
|
||||||
msgstr "刪除指紋"
|
msgstr "刪除指紋"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Detail"
|
||||||
|
msgstr "詳細資訊"
|
||||||
|
|
||||||
#. Context: Battery state
|
#. Context: Battery state
|
||||||
#: src/lib/i18n.ts
|
#: src/lib/i18n.ts
|
||||||
msgid "Discharging"
|
msgid "Discharging"
|
||||||
@@ -423,10 +431,6 @@ 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 "磁碟單位"
|
||||||
@@ -445,14 +449,6 @@ 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 記憶體使用率"
|
||||||
@@ -461,14 +457,6 @@ 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 "文件"
|
||||||
@@ -536,7 +524,7 @@ msgstr "錯誤"
|
|||||||
#. placeholder {0}: alert.value
|
#. placeholder {0}: alert.value
|
||||||
#. placeholder {1}: info.unit
|
#. placeholder {1}: info.unit
|
||||||
#. placeholder {2}: alert.min
|
#. placeholder {2}: alert.min
|
||||||
#: src/components/routes/home.tsx
|
#: src/components/active-alerts.tsx
|
||||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||||
msgstr "在過去的{2, plural, one {# 分鐘} other {# 分鐘}}中超過{0}{1}"
|
msgstr "在過去的{2, plural, one {# 分鐘} other {# 分鐘}}中超過{0}{1}"
|
||||||
|
|
||||||
@@ -577,15 +565,9 @@ msgstr "發送測試通知失敗"
|
|||||||
msgid "Failed to update alert"
|
msgid "Failed to update alert"
|
||||||
msgstr "更新警報失敗"
|
msgstr "更新警報失敗"
|
||||||
|
|
||||||
#: src/components/routes/system.tsx
|
#: src/components/containers-table/containers-table.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/routes/settings/alerts-history-data-table.tsx
|
||||||
|
#: src/components/routes/system.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
msgid "Filter..."
|
msgid "Filter..."
|
||||||
msgstr "篩選..."
|
msgstr "篩選..."
|
||||||
@@ -631,6 +613,10 @@ msgstr "GPU 功耗"
|
|||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
msgstr "網格"
|
msgstr "網格"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Health"
|
||||||
|
msgstr "健康狀態"
|
||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
msgctxt "Button to copy install command"
|
msgctxt "Button to copy install command"
|
||||||
@@ -702,6 +688,7 @@ msgid "Login attempt failed"
|
|||||||
msgstr "登入失敗"
|
msgstr "登入失敗"
|
||||||
|
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/navbar.tsx
|
#: src/components/navbar.tsx
|
||||||
msgid "Logs"
|
msgid "Logs"
|
||||||
msgstr "系統記錄"
|
msgstr "系統記錄"
|
||||||
@@ -724,6 +711,7 @@ msgstr "手動設定說明"
|
|||||||
msgid "Max 1 min"
|
msgid "Max 1 min"
|
||||||
msgstr "最多1分鐘"
|
msgstr "最多1分鐘"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr "記憶體"
|
msgstr "記憶體"
|
||||||
@@ -739,9 +727,11 @@ msgstr "Docker 容器的記憶體使用量"
|
|||||||
|
|
||||||
#: src/components/add-system.tsx
|
#: src/components/add-system.tsx
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "名稱"
|
msgstr "名稱"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
msgid "Net"
|
msgid "Net"
|
||||||
msgstr "網路"
|
msgstr "網路"
|
||||||
@@ -762,14 +752,11 @@ 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 "找不到結果。"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
#: src/components/routes/settings/alerts-history-data-table.tsx
|
#: src/components/routes/settings/alerts-history-data-table.tsx
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "沒有結果。"
|
msgstr "沒有結果。"
|
||||||
@@ -811,6 +798,7 @@ msgstr "或繼續使用"
|
|||||||
msgid "Overwrite existing alerts"
|
msgid "Overwrite existing alerts"
|
||||||
msgstr "覆蓋現有警報"
|
msgstr "覆蓋現有警報"
|
||||||
|
|
||||||
|
#: src/components/command-palette.tsx
|
||||||
#: src/components/command-palette.tsx
|
#: src/components/command-palette.tsx
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "頁面"
|
msgstr "頁面"
|
||||||
@@ -915,6 +903,11 @@ msgstr "讀取"
|
|||||||
msgid "Received"
|
msgid "Received"
|
||||||
msgstr "接收"
|
msgstr "接收"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
#: src/components/containers-table/containers-table.tsx
|
||||||
|
msgid "Refresh"
|
||||||
|
msgstr "重新整理"
|
||||||
|
|
||||||
#: src/components/login/login.tsx
|
#: src/components/login/login.tsx
|
||||||
msgid "Request a one-time password"
|
msgid "Request a one-time password"
|
||||||
msgstr "請求一次性密碼"
|
msgstr "請求一次性密碼"
|
||||||
@@ -1006,6 +999,7 @@ msgstr "排序"
|
|||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "狀態"
|
msgstr "狀態"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/systems-table/systems-table.tsx
|
#: src/components/systems-table/systems-table.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
@@ -1020,6 +1014,7 @@ msgid "Swap Usage"
|
|||||||
msgstr "虛擬記憶體使用量"
|
msgstr "虛擬記憶體使用量"
|
||||||
|
|
||||||
#: src/components/alerts-history-columns.tsx
|
#: src/components/alerts-history-columns.tsx
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
#: src/components/routes/settings/tokens-fingerprints.tsx
|
#: src/components/routes/settings/tokens-fingerprints.tsx
|
||||||
#: src/components/systems-table/systems-table-columns.tsx
|
#: src/components/systems-table/systems-table-columns.tsx
|
||||||
#: src/lib/alerts.ts
|
#: src/lib/alerts.ts
|
||||||
@@ -1030,10 +1025,6 @@ 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 "系統"
|
||||||
@@ -1197,6 +1188,10 @@ msgstr "上線"
|
|||||||
msgid "Up ({upSystemsLength})"
|
msgid "Up ({upSystemsLength})"
|
||||||
msgstr "上線 ({upSystemsLength})"
|
msgstr "上線 ({upSystemsLength})"
|
||||||
|
|
||||||
|
#: src/components/containers-table/containers-table-columns.tsx
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr "已更新"
|
||||||
|
|
||||||
#: src/components/routes/system/network-sheet.tsx
|
#: src/components/routes/system/network-sheet.tsx
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "上傳"
|
msgstr "上傳"
|
||||||
@@ -1246,10 +1241,6 @@ 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,6 +19,7 @@ import * as systemsManager from "@/lib/systemsManager.ts"
|
|||||||
|
|
||||||
const LoginPage = lazy(() => import("@/components/login/login.tsx"))
|
const LoginPage = lazy(() => import("@/components/login/login.tsx"))
|
||||||
const Home = lazy(() => import("@/components/routes/home.tsx"))
|
const Home = lazy(() => import("@/components/routes/home.tsx"))
|
||||||
|
const Containers = lazy(() => import("@/components/routes/containers.tsx"))
|
||||||
const SystemDetail = lazy(() => import("@/components/routes/system.tsx"))
|
const SystemDetail = lazy(() => import("@/components/routes/system.tsx"))
|
||||||
const CopyToClipboardDialog = lazy(() => import("@/components/copy-to-clipboard.tsx"))
|
const CopyToClipboardDialog = lazy(() => import("@/components/copy-to-clipboard.tsx"))
|
||||||
|
|
||||||
@@ -59,6 +60,8 @@ const App = memo(() => {
|
|||||||
return <Home />
|
return <Home />
|
||||||
} else if (page.route === "system") {
|
} else if (page.route === "system") {
|
||||||
return <SystemDetail id={page.params.id} />
|
return <SystemDetail id={page.params.id} />
|
||||||
|
} else if (page.route === "containers") {
|
||||||
|
return <Containers />
|
||||||
} else if (page.route === "settings") {
|
} else if (page.route === "settings") {
|
||||||
return <Settings />
|
return <Settings />
|
||||||
}
|
}
|
||||||
|
|||||||
31
internal/site/src/types.d.ts
vendored
31
internal/site/src/types.d.ts
vendored
@@ -168,13 +168,6 @@ 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
|
||||||
@@ -215,18 +208,6 @@ 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 {
|
||||||
@@ -255,6 +236,18 @@ export interface AlertsHistoryRecord extends RecordModel {
|
|||||||
resolved?: string | null
|
resolved?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ContainerRecord extends RecordModel {
|
||||||
|
id: string
|
||||||
|
system: string
|
||||||
|
name: string
|
||||||
|
cpu: number
|
||||||
|
memory: number
|
||||||
|
net: number
|
||||||
|
health: number
|
||||||
|
status: string
|
||||||
|
updated: number
|
||||||
|
}
|
||||||
|
|
||||||
export type ChartTimes = "1m" | "1h" | "12h" | "24h" | "1w" | "30d"
|
export type ChartTimes = "1m" | "1h" | "12h" | "24h" | "1w" | "30d"
|
||||||
|
|
||||||
export interface ChartTimeData {
|
export interface ChartTimeData {
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
## 0.13.2
|
## 0.14.0
|
||||||
|
|
||||||
|
- Add `/containers` page for viewing current status of all running containers. (#928)
|
||||||
|
|
||||||
|
- Add ability to view container status, health, details, and basic logs. (#928)
|
||||||
|
|
||||||
|
- Probable fix for erroneous network stats when interface resets (#1267, #1246)
|
||||||
|
|
||||||
|
# 0.13.2
|
||||||
|
|
||||||
- Add ability to set custom name for extra filesystems. (#379)
|
- Add ability to set custom name for extra filesystems. (#379)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user