Compare commits

..

11 Commits

Author SHA1 Message Date
henrygd
77ed90cb4a release 0.14.0 :) 2025-10-18 19:36:23 -04:00
henrygd
2fe3b1adb1 increase chart tooltip z-index 2025-10-18 19:20:16 -04:00
henrygd
f56093d0f0 hide container table if no containers 2025-10-18 18:52:59 -04:00
henrygd
77dba42f17 update language files 2025-10-18 18:51:09 -04:00
henrygd
e233a0b0dc new zh translations 2025-10-18 17:33:26 -04:00
derilevi
18e4c88875 new Hungarian translations 2025-10-18 17:32:34 -04:00
Rasko
904a6038cd new Norwegian translations 2025-10-18 17:30:24 -04:00
henrygd
ae55b86493 improve chart filtering logic to support multiple terms (#1274) 2025-10-18 17:10:08 -04:00
henrygd
5360f762e4 expand container monitoring functionality (#928)
- Add new /containers route with virtualized table showing all containers across systems
- Implement container stats collection (CPU, memory, network usage) with health status tracking
- Add container logs and info API endpoints with syntax highlighting using Shiki
- Create detailed container views with fullscreen logs/info dialogs and refresh functionality
- Add container table to individual system pages with lazy loading
- Implement container record storage with automatic cleanup and historical averaging
- Update navbar with container navigation icon
- Extract reusable ActiveAlerts component from home page
- Add FooterRepoLink component for consistent GitHub/version display
- Enhance filtering and search capabilities across container tables
2025-10-18 16:32:16 -04:00
henrygd
0d464787f2 logo color on hover 2025-10-18 15:48:59 -04:00
henrygd
24f72ef596 update collections snapshot 2025-10-18 15:47:12 -04:00
72 changed files with 3728 additions and 3629 deletions

View File

@@ -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:

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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)
} }

View File

@@ -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"
) )

View File

@@ -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"`
}

View File

@@ -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"`
} }

View File

@@ -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 {

View File

@@ -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
{ {

View File

@@ -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

View File

@@ -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.

View File

@@ -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)
}
}()
} }
} }

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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"
}
} }
} }
} }

View File

@@ -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"
} }
} }

View 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("")])
}

View File

@@ -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>
)
})

View File

@@ -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>
)
}

View File

@@ -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

View File

@@ -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" }))

View File

@@ -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>
)
}

View File

@@ -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>
)
}

View 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>
)
}

View File

@@ -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>

View File

@@ -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>
) )

View File

@@ -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>
) )

View File

@@ -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`,

View 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 />
</>
),
[]
)
})

View File

@@ -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("")])
}

View File

@@ -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>
)
}

View File

@@ -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()

View File

@@ -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;
} }

View File

@@ -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,

View 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'))

View File

@@ -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("")

View File

@@ -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

View File

@@ -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 "في انتظار وجود سجلات كافية للعرض"

View File

@@ -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 "Изчаква се за достатъчно записи за показване"

View File

@@ -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í"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 "در انتظار رکوردهای کافی برای نمایش"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 "表示するのに十分なレコードを待っています"

View File

@@ -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 "표시할 충분한 기록을 기다리는 중"

View File

@@ -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"

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 "Ожидание достаточного количества записей для отображения"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 "Очікування достатньої кількості записів для відображення"

View File

@@ -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ị"

View File

@@ -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 "正在收集足够的数据来显示"

View File

@@ -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 "等待足夠的記錄以顯示"

View File

@@ -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 "等待足夠的記錄以顯示"

View File

@@ -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 />
} }

View File

@@ -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 {

View File

@@ -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)