Compare commits

...

86 Commits

Author SHA1 Message Date
hank
cfa7cfd0f6 New translations en.po (Czech) 2025-08-03 17:18:47 -04:00
hank
6907e46482 New translations en.po (Czech) 2025-08-03 16:13:55 -04:00
hank
ff51982c9d New translations en.po (Chinese Traditional, Hong Kong) 2025-08-01 21:36:31 -04:00
hank
42a525643e New translations en.po (Croatian) 2025-08-01 21:36:30 -04:00
hank
2ccac0f797 New translations en.po (Persian) 2025-08-01 21:36:29 -04:00
hank
9f6fdd6b60 New translations en.po (Icelandic) 2025-08-01 21:36:28 -04:00
hank
4bb73ec20a New translations en.po (Vietnamese) 2025-08-01 21:36:27 -04:00
hank
428fb8f4d0 New translations en.po (Chinese Traditional) 2025-08-01 21:36:26 -04:00
hank
7a9b53bb8a New translations en.po (Chinese Simplified) 2025-08-01 21:36:25 -04:00
hank
0261ecf0d3 New translations en.po (Ukrainian) 2025-08-01 21:36:24 -04:00
hank
299fbb60cb New translations en.po (Turkish) 2025-08-01 21:36:23 -04:00
hank
e18319018b New translations en.po (Swedish) 2025-08-01 21:36:22 -04:00
hank
186c2c2a25 New translations en.po (Slovenian) 2025-08-01 21:36:21 -04:00
hank
8acbf4c1ec New translations en.po (Russian) 2025-08-01 21:36:20 -04:00
hank
bb3a4d6ae3 New translations en.po (Portuguese) 2025-08-01 21:36:19 -04:00
hank
2b7e67eea4 New translations en.po (Polish) 2025-08-01 21:36:18 -04:00
hank
ebb2351f47 New translations en.po (Norwegian) 2025-08-01 21:36:17 -04:00
hank
831a09d026 New translations en.po (Dutch) 2025-08-01 21:36:16 -04:00
hank
bd0a851659 New translations en.po (Korean) 2025-08-01 21:36:15 -04:00
hank
b735a34a48 New translations en.po (Japanese) 2025-08-01 21:36:14 -04:00
hank
e96a6780c0 New translations en.po (Italian) 2025-08-01 21:36:13 -04:00
hank
1624cfd4e3 New translations en.po (Hungarian) 2025-08-01 21:36:12 -04:00
hank
b5d9974536 New translations en.po (Greek) 2025-08-01 21:36:11 -04:00
hank
65cc45d94e New translations en.po (German) 2025-08-01 21:36:10 -04:00
hank
648c7dbbef New translations en.po (Danish) 2025-08-01 21:36:09 -04:00
hank
7543303a90 New translations en.po (Czech) 2025-08-01 21:36:08 -04:00
hank
78cd9df7bc New translations en.po (Bulgarian) 2025-08-01 21:36:08 -04:00
hank
92f91503c0 New translations en.po (Arabic) 2025-08-01 21:36:07 -04:00
hank
53b62f038c New translations en.po (Spanish) 2025-08-01 21:36:06 -04:00
hank
9a6bae7d8c New translations en.po (French) 2025-08-01 21:36:05 -04:00
hank
24dd39e0da New translations en.po (Chinese Traditional, Hong Kong) 2025-08-01 19:22:01 -04:00
hank
876c2a229f New translations en.po (Croatian) 2025-08-01 19:21:59 -04:00
hank
092168b5bb New translations en.po (Persian) 2025-08-01 19:21:58 -04:00
hank
49d2a7eb7b New translations en.po (Icelandic) 2025-08-01 19:21:57 -04:00
hank
e88c6a54c5 New translations en.po (Vietnamese) 2025-08-01 19:21:57 -04:00
hank
fc32b8dfa9 New translations en.po (Chinese Traditional) 2025-08-01 19:21:55 -04:00
hank
304b95db7b New translations en.po (Chinese Simplified) 2025-08-01 19:21:54 -04:00
hank
a0c4723b15 New translations en.po (Ukrainian) 2025-08-01 19:21:53 -04:00
hank
e2e048dedc New translations en.po (Turkish) 2025-08-01 19:21:52 -04:00
hank
e77f15a6cd New translations en.po (Swedish) 2025-08-01 19:21:51 -04:00
hank
a28d6c8ffa New translations en.po (Slovenian) 2025-08-01 19:21:50 -04:00
hank
776dc22516 New translations en.po (Russian) 2025-08-01 19:21:49 -04:00
hank
571e293af7 New translations en.po (Portuguese) 2025-08-01 19:21:48 -04:00
hank
b6f295464c New translations en.po (Polish) 2025-08-01 19:21:47 -04:00
hank
1eee067467 New translations en.po (Norwegian) 2025-08-01 19:21:46 -04:00
hank
c123009b17 New translations en.po (Dutch) 2025-08-01 19:21:45 -04:00
hank
20b059d370 New translations en.po (Korean) 2025-08-01 19:21:44 -04:00
hank
9f81f23b1c New translations en.po (Japanese) 2025-08-01 19:21:43 -04:00
hank
ef4277360d New translations en.po (Italian) 2025-08-01 19:21:42 -04:00
hank
2061ddaade New translations en.po (Hungarian) 2025-08-01 19:21:41 -04:00
hank
fb295dbab5 New translations en.po (Greek) 2025-08-01 19:21:40 -04:00
hank
706deab37f New translations en.po (German) 2025-08-01 19:21:39 -04:00
hank
51fb32cce0 New translations en.po (Danish) 2025-08-01 19:21:38 -04:00
hank
67a4a1b36e New translations en.po (Czech) 2025-08-01 19:21:37 -04:00
hank
6f04d4c3b7 New translations en.po (Bulgarian) 2025-08-01 19:21:36 -04:00
hank
6bb203369b New translations en.po (Arabic) 2025-08-01 19:21:35 -04:00
hank
5fa971d76b New translations en.po (Spanish) 2025-08-01 19:21:34 -04:00
hank
4e477df1af New translations en.po (French) 2025-08-01 19:21:33 -04:00
hank
57bfe72486 Update readme.md 2025-07-31 19:43:08 -04:00
henrygd
75f66b0246 fix: handle missing docker group in debian postinstall script (#1012)
Check if docker group exists before attempting to add beszel user to it, preventing installation failure when Docker is not installed.
2025-07-30 19:09:10 -04:00
henrygd
ce93d54aa7 fix agent data directory resolution (#991) 2025-07-30 14:34:36 -04:00
henrygd
39dbe0eac5 ensure /etc/machine-id exists for persistent fingerprint in install-agent.sh 2025-07-30 14:25:41 -04:00
henrygd
7282044f80 improve memo deps for default area chart 2025-07-29 20:53:44 -04:00
henrygd
d77c37c0b0 winget upgrade: make sure service is stopped before updating package 2025-07-29 18:37:34 -04:00
Sven van Ginkel
e362cbbca5 Move copy button (#1010)
Thank you!
2025-07-28 19:20:37 -04:00
evrial
118544926b [Fix] OpenWrt agent install script (#1005)
* Update install-agent.sh

* Update install-agent.sh

* Update install-agent.sh
2025-07-28 14:56:31 -04:00
henrygd
d4bb0a0a30 fix: consolidate OpenWRT environment variables into single procd_set_param call 2025-07-27 18:51:26 -04:00
henrygd
fe5e35d1a9 agent install script: improve openwrt compatibility 2025-07-27 18:44:36 -04:00
henrygd
60a6ae2caa add winget token for goreleaser action 2025-07-25 20:13:31 -04:00
henrygd
80338d36aa release 0.12.1 :) 2025-07-25 19:23:53 -04:00
henrygd
f0d2c242e8 update language files 2025-07-25 19:19:49 -04:00
zoixc
559f83d99c Updated Russian translations 2025-07-25 19:14:08 -04:00
Kamil
d3a751ee6c Updated Polish translations 2025-07-25 19:13:18 -04:00
Sven van Ginkel
fb70a166fa Updated Dutch translations 2025-07-25 19:13:18 -04:00
Alberto Rizzi
c12457b707 Updated Italian translations 2025-07-25 19:08:03 -04:00
Lucas Pedro
3e53d73d56 Updated Portuguese translations 2025-07-25 19:03:45 -04:00
Mikki Alexander Mousing Sørensen
80338c5e98 Updated Danish translations 2025-07-25 19:01:34 -04:00
NickAss512
249cd8ad19 Updated Czech translations
Co-authored-by: Gear <88455107+GearCzech@users.noreply.github.com>
2025-07-25 19:01:34 -04:00
henrygd
ccdff46370 add TOKEN_FILE env var 2025-07-25 18:26:31 -04:00
henrygd
91679b5cc0 refactor load average handling (#982)
- Transitioned from individual load average fields (LoadAvg1, LoadAvg5,
LoadAvg15) to a single array (LoadAvg)
- Ensure load is displayed when all zero values.
2025-07-25 18:07:29 -04:00
henrygd
6953edf59e sort token / fingerprint table by system name 2025-07-25 15:53:40 -04:00
henrygd
b91c77ec92 make sure only 200 records are returned for alert history table 2025-07-25 15:43:19 -04:00
henrygd
3ac0b185d1 fix oidc icon display issue (#990) 2025-07-25 13:55:02 -04:00
henrygd
1e675cabb5 refactor agent data directory resolution (#991) 2025-07-25 13:37:23 -04:00
henrygd
5f44965c2c improve table formatting and fix #983
- should fix NaN display bug for dasboard cpu
- standardize decimals for dash meters
2025-07-25 00:29:08 -04:00
henrygd
f080929296 Update goreleaser configuration
- Removed the name field for brew.
- Enabled pull requests for winget.
2025-07-24 22:31:27 -04:00
57 changed files with 1983 additions and 459 deletions

View File

@@ -3,7 +3,7 @@ name: Make release and binaries
on: on:
push: push:
tags: tags:
- 'v*' - "v*"
permissions: permissions:
contents: write contents: write
@@ -29,7 +29,7 @@ jobs:
- name: Set up Go - name: Set up Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
go-version: '^1.22.1' go-version: "^1.22.1"
- name: GoReleaser beszel - name: GoReleaser beszel
uses: goreleaser/goreleaser-action@v6 uses: goreleaser/goreleaser-action@v6
@@ -40,3 +40,4 @@ jobs:
args: release --clean args: release --clean
env: env:
GITHUB_TOKEN: ${{ secrets.TOKEN || secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.TOKEN || secrets.GITHUB_TOKEN }}
WINGET_TOKEN: ${{ secrets.WINGET_TOKEN }}

View File

@@ -173,7 +173,6 @@ brews:
error_log_path "#{Dir.home}/.cache/beszel/beszel-agent.log" error_log_path "#{Dir.home}/.cache/beszel/beszel-agent.log"
keep_alive true keep_alive true
restart_delay 5 restart_delay 5
name beszel-agent
process_type :background process_type :background
winget: winget:
@@ -189,6 +188,7 @@ winget:
publisher_support_url: "https://github.com/henrygd/beszel/issues" publisher_support_url: "https://github.com/henrygd/beszel/issues"
short_description: "Agent for Beszel, a lightweight server monitoring platform." short_description: "Agent for Beszel, a lightweight server monitoring platform."
skip_upload: auto skip_upload: auto
token: "{{ .Env.WINGET_TOKEN }}"
description: | description: |
Beszel is a lightweight server monitoring platform that includes Docker Beszel is a lightweight server monitoring platform that includes Docker
statistics, historical data, and alert functions. It has a friendly web statistics, historical data, and alert functions. It has a friendly web
@@ -204,7 +204,7 @@ winget:
name: beszel-winget name: beszel-winget
branch: henrygd.beszel-agent-{{ .Version }} branch: henrygd.beszel-agent-{{ .Version }}
pull_request: pull_request:
enabled: false enabled: true
draft: false draft: false
base: base:
owner: microsoft owner: microsoft

View File

@@ -111,7 +111,7 @@ func main() {
serverConfig.Addr = addr serverConfig.Addr = addr
serverConfig.Network = agent.GetNetwork(addr) serverConfig.Network = agent.GetNetwork(addr)
agent, err := agent.NewAgent("") agent, err := agent.NewAgent()
if err != nil { if err != nil {
log.Fatal("Failed to create agent: ", err) log.Fatal("Failed to create agent: ", err)
} }

View File

@@ -40,13 +40,13 @@ type Agent struct {
// NewAgent creates a new agent with the given data directory for persisting data. // NewAgent creates a new agent with the given data directory for persisting data.
// If the data directory is not set, it will attempt to find the optimal directory. // If the data directory is not set, it will attempt to find the optimal directory.
func NewAgent(dataDir string) (agent *Agent, err error) { func NewAgent(dataDir ...string) (agent *Agent, err error) {
agent = &Agent{ agent = &Agent{
fsStats: make(map[string]*system.FsStats), fsStats: make(map[string]*system.FsStats),
cache: NewSessionCache(69 * time.Second), cache: NewSessionCache(69 * time.Second),
} }
agent.dataDir, err = getDataDir(dataDir) agent.dataDir, err = getDataDir(dataDir...)
if err != nil { if err != nil {
slog.Warn("Data directory not found") slog.Warn("Data directory not found")
} else { } else {

View File

@@ -10,6 +10,7 @@ import (
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
"os"
"path" "path"
"strings" "strings"
"time" "time"
@@ -53,9 +54,9 @@ func newWebSocketClient(agent *Agent) (client *WebSocketClient, err error) {
return nil, errors.New("invalid hub URL") return nil, errors.New("invalid hub URL")
} }
// get registration token // get registration token
client.token, _ = GetEnv("TOKEN") client.token, err = getToken()
if client.token == "" { if err != nil {
return nil, errors.New("TOKEN environment variable not set") return nil, err
} }
client.agent = agent client.agent = agent
@@ -65,6 +66,27 @@ func newWebSocketClient(agent *Agent) (client *WebSocketClient, err error) {
return client, nil return client, nil
} }
// getToken returns the token for the WebSocket client.
// It first checks the TOKEN environment variable, then the TOKEN_FILE environment variable.
// If neither is set, it returns an error.
func getToken() (string, error) {
// get token from env var
token, _ := GetEnv("TOKEN")
if token != "" {
return token, nil
}
// get token from file
tokenFile, _ := GetEnv("TOKEN_FILE")
if tokenFile == "" {
return "", errors.New("must set TOKEN or TOKEN_FILE")
}
tokenBytes, err := os.ReadFile(tokenFile)
if err != nil {
return "", err
}
return string(tokenBytes), nil
}
// getOptions returns the WebSocket client options, creating them if necessary. // getOptions returns the WebSocket client options, creating them if necessary.
// It configures the connection URL, TLS settings, and authentication headers. // It configures the connection URL, TLS settings, and authentication headers.
func (client *WebSocketClient) getOptions() *gws.ClientOption { func (client *WebSocketClient) getOptions() *gws.ClientOption {

View File

@@ -61,7 +61,7 @@ func TestNewWebSocketClient(t *testing.T) {
hubURL: "http://localhost:8080", hubURL: "http://localhost:8080",
token: "", token: "",
expectError: true, expectError: true,
errorMsg: "TOKEN environment variable not set", errorMsg: "must set TOKEN or TOKEN_FILE",
}, },
} }
@@ -389,3 +389,150 @@ func TestWebSocketClient_ConnectRateLimit(t *testing.T) {
err = client.Connect() err = client.Connect()
assert.Error(t, err, "Connection should fail but not hang") assert.Error(t, err, "Connection should fail but not hang")
} }
// TestGetToken tests the getToken function with various scenarios
func TestGetToken(t *testing.T) {
unsetEnvVars := func() {
os.Unsetenv("BESZEL_AGENT_TOKEN")
os.Unsetenv("TOKEN")
os.Unsetenv("BESZEL_AGENT_TOKEN_FILE")
os.Unsetenv("TOKEN_FILE")
}
t.Run("token from TOKEN environment variable", func(t *testing.T) {
unsetEnvVars()
// Set TOKEN env var
expectedToken := "test-token-from-env"
os.Setenv("TOKEN", expectedToken)
defer os.Unsetenv("TOKEN")
token, err := getToken()
assert.NoError(t, err)
assert.Equal(t, expectedToken, token)
})
t.Run("token from BESZEL_AGENT_TOKEN environment variable", func(t *testing.T) {
unsetEnvVars()
// Set BESZEL_AGENT_TOKEN env var (should take precedence)
expectedToken := "test-token-from-beszel-env"
os.Setenv("BESZEL_AGENT_TOKEN", expectedToken)
defer os.Unsetenv("BESZEL_AGENT_TOKEN")
token, err := getToken()
assert.NoError(t, err)
assert.Equal(t, expectedToken, token)
})
t.Run("token from TOKEN_FILE", func(t *testing.T) {
unsetEnvVars()
// Create a temporary token file
expectedToken := "test-token-from-file"
tokenFile, err := os.CreateTemp("", "token-test-*.txt")
require.NoError(t, err)
defer os.Remove(tokenFile.Name())
_, err = tokenFile.WriteString(expectedToken)
require.NoError(t, err)
tokenFile.Close()
// Set TOKEN_FILE env var
os.Setenv("TOKEN_FILE", tokenFile.Name())
defer os.Unsetenv("TOKEN_FILE")
token, err := getToken()
assert.NoError(t, err)
assert.Equal(t, expectedToken, token)
})
t.Run("token from BESZEL_AGENT_TOKEN_FILE", func(t *testing.T) {
unsetEnvVars()
// Create a temporary token file
expectedToken := "test-token-from-beszel-file"
tokenFile, err := os.CreateTemp("", "token-test-*.txt")
require.NoError(t, err)
defer os.Remove(tokenFile.Name())
_, err = tokenFile.WriteString(expectedToken)
require.NoError(t, err)
tokenFile.Close()
// Set BESZEL_AGENT_TOKEN_FILE env var (should take precedence)
os.Setenv("BESZEL_AGENT_TOKEN_FILE", tokenFile.Name())
defer os.Unsetenv("BESZEL_AGENT_TOKEN_FILE")
token, err := getToken()
assert.NoError(t, err)
assert.Equal(t, expectedToken, token)
})
t.Run("TOKEN takes precedence over TOKEN_FILE", func(t *testing.T) {
unsetEnvVars()
// Create a temporary token file
fileToken := "token-from-file"
tokenFile, err := os.CreateTemp("", "token-test-*.txt")
require.NoError(t, err)
defer os.Remove(tokenFile.Name())
_, err = tokenFile.WriteString(fileToken)
require.NoError(t, err)
tokenFile.Close()
// Set both TOKEN and TOKEN_FILE
envToken := "token-from-env"
os.Setenv("TOKEN", envToken)
os.Setenv("TOKEN_FILE", tokenFile.Name())
defer func() {
os.Unsetenv("TOKEN")
os.Unsetenv("TOKEN_FILE")
}()
token, err := getToken()
assert.NoError(t, err)
assert.Equal(t, envToken, token, "TOKEN should take precedence over TOKEN_FILE")
})
t.Run("error when neither TOKEN nor TOKEN_FILE is set", func(t *testing.T) {
unsetEnvVars()
token, err := getToken()
assert.Error(t, err)
assert.Equal(t, "", token)
assert.Contains(t, err.Error(), "must set TOKEN or TOKEN_FILE")
})
t.Run("error when TOKEN_FILE points to non-existent file", func(t *testing.T) {
unsetEnvVars()
// Set TOKEN_FILE to a non-existent file
os.Setenv("TOKEN_FILE", "/non/existent/file.txt")
defer os.Unsetenv("TOKEN_FILE")
token, err := getToken()
assert.Error(t, err)
assert.Equal(t, "", token)
assert.Contains(t, err.Error(), "no such file or directory")
})
t.Run("handles empty token file", func(t *testing.T) {
unsetEnvVars()
// Create an empty token file
tokenFile, err := os.CreateTemp("", "token-test-*.txt")
require.NoError(t, err)
defer os.Remove(tokenFile.Name())
tokenFile.Close()
// Set TOKEN_FILE env var
os.Setenv("TOKEN_FILE", tokenFile.Name())
defer os.Unsetenv("TOKEN_FILE")
token, err := getToken()
assert.NoError(t, err)
assert.Equal(t, "", token, "Empty file should return empty string")
})
}

View File

@@ -9,35 +9,30 @@ import (
) )
// getDataDir returns the path to the data directory for the agent and an error // getDataDir returns the path to the data directory for the agent and an error
// if the directory is not valid. Pass an empty string to attempt to find the // if the directory is not valid. Attempts to find the optimal data directory if
// optimal data directory. // no data directories are provided.
func getDataDir(dataDir string) (string, error) { func getDataDir(dataDirs ...string) (string, error) {
if dataDir == "" { if len(dataDirs) > 0 {
dataDir, _ = GetEnv("DATA_DIR") return testDataDirs(dataDirs)
} }
dataDir, _ := GetEnv("DATA_DIR")
if dataDir != "" { if dataDir != "" {
return testDataDirs([]string{dataDir}) dataDirs = append(dataDirs, dataDir)
} }
var dirsToTry []string
if runtime.GOOS == "windows" { if runtime.GOOS == "windows" {
dirsToTry = []string{ dataDirs = append(dataDirs,
filepath.Join(os.Getenv("APPDATA"), "beszel-agent"), filepath.Join(os.Getenv("APPDATA"), "beszel-agent"),
filepath.Join(os.Getenv("LOCALAPPDATA"), "beszel-agent"), filepath.Join(os.Getenv("LOCALAPPDATA"), "beszel-agent"),
} )
} else { } else {
homeDir, err := os.UserHomeDir() dataDirs = append(dataDirs, "/var/lib/beszel-agent")
if err != nil { if homeDir, err := os.UserHomeDir(); err == nil {
return "", err dataDirs = append(dataDirs, filepath.Join(homeDir, ".config", "beszel"))
}
dirsToTry = []string{
"/var/lib/beszel-agent",
filepath.Join(homeDir, ".config", "beszel"),
} }
} }
return testDataDirs(dirsToTry) return testDataDirs(dataDirs)
} }
func testDataDirs(paths []string) (string, error) { func testDataDirs(paths []string) (string, error) {

View File

@@ -44,15 +44,15 @@ func TestGetDataDir(t *testing.T) {
oldValue := os.Getenv("DATA_DIR") oldValue := os.Getenv("DATA_DIR")
defer func() { defer func() {
if oldValue == "" { if oldValue == "" {
os.Unsetenv("DATA_DIR") os.Unsetenv("BESZEL_AGENT_DATA_DIR")
} else { } else {
os.Setenv("DATA_DIR", oldValue) os.Setenv("BESZEL_AGENT_DATA_DIR", oldValue)
} }
}() }()
os.Setenv("DATA_DIR", tempDir) os.Setenv("BESZEL_AGENT_DATA_DIR", tempDir)
result, err := getDataDir("") result, err := getDataDir()
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, tempDir, result) assert.Equal(t, tempDir, result)
}) })
@@ -79,7 +79,7 @@ func TestGetDataDir(t *testing.T) {
// This will try platform-specific defaults, which may or may not work // This will try platform-specific defaults, which may or may not work
// We're mainly testing that it doesn't panic and returns some result // We're mainly testing that it doesn't panic and returns some result
result, err := getDataDir("") result, err := getDataDir()
// We don't assert success/failure here since it depends on system permissions // We don't assert success/failure here since it depends on system permissions
// Just verify we get a string result if no error // Just verify we get a string result if no error
if err == nil { if err == nil {

View File

@@ -80,10 +80,11 @@ func (a *Agent) getSystemStats() system.Stats {
// load average // load average
if avgstat, err := load.Avg(); err == nil { if avgstat, err := load.Avg(); err == nil {
systemStats.LoadAvg1 = twoDecimals(avgstat.Load1) // TODO: remove these in future release in favor of load avg array
systemStats.LoadAvg5 = twoDecimals(avgstat.Load5) systemStats.LoadAvg[0] = avgstat.Load1
systemStats.LoadAvg15 = twoDecimals(avgstat.Load15) systemStats.LoadAvg[1] = avgstat.Load5
slog.Debug("Load average", "5m", systemStats.LoadAvg5, "15m", systemStats.LoadAvg15) systemStats.LoadAvg[2] = avgstat.Load15
slog.Debug("Load average", "5m", avgstat.Load5, "15m", avgstat.Load15)
} else { } else {
slog.Error("Error getting load average", "err", err) slog.Error("Error getting load average", "err", err)
} }
@@ -255,9 +256,11 @@ func (a *Agent) getSystemStats() system.Stats {
// update base system info // update base system info
a.systemInfo.Cpu = systemStats.Cpu a.systemInfo.Cpu = systemStats.Cpu
a.systemInfo.LoadAvg1 = systemStats.LoadAvg1 a.systemInfo.LoadAvg = systemStats.LoadAvg
a.systemInfo.LoadAvg5 = systemStats.LoadAvg5 // TODO: remove these in future release in favor of load avg array
a.systemInfo.LoadAvg15 = systemStats.LoadAvg15 a.systemInfo.LoadAvg1 = systemStats.LoadAvg[0]
a.systemInfo.LoadAvg5 = systemStats.LoadAvg[1]
a.systemInfo.LoadAvg15 = systemStats.LoadAvg[2]
a.systemInfo.MemPct = systemStats.MemPct a.systemInfo.MemPct = systemStats.MemPct
a.systemInfo.DiskPct = systemStats.DiskPct a.systemInfo.DiskPct = systemStats.DiskPct
a.systemInfo.Uptime, _ = host.Uptime() a.systemInfo.Uptime, _ = host.Uptime()

View File

@@ -47,9 +47,7 @@ type SystemAlertStats struct {
NetSent float64 `json:"ns"` NetSent float64 `json:"ns"`
NetRecv float64 `json:"nr"` NetRecv float64 `json:"nr"`
Temperatures map[string]float32 `json:"t"` Temperatures map[string]float32 `json:"t"`
LoadAvg1 float64 `json:"l1"` LoadAvg [3]float64 `json:"la"`
LoadAvg5 float64 `json:"l5"`
LoadAvg15 float64 `json:"l15"`
} }
type SystemAlertData struct { type SystemAlertData struct {

View File

@@ -55,13 +55,13 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
val = data.Info.DashboardTemp val = data.Info.DashboardTemp
unit = "°C" unit = "°C"
case "LoadAvg1": case "LoadAvg1":
val = data.Info.LoadAvg1 val = data.Info.LoadAvg[0]
unit = "" unit = ""
case "LoadAvg5": case "LoadAvg5":
val = data.Info.LoadAvg5 val = data.Info.LoadAvg[1]
unit = "" unit = ""
case "LoadAvg15": case "LoadAvg15":
val = data.Info.LoadAvg15 val = data.Info.LoadAvg[2]
unit = "" unit = ""
} }
@@ -200,11 +200,11 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
alert.mapSums[key] += temp alert.mapSums[key] += temp
} }
case "LoadAvg1": case "LoadAvg1":
alert.val += stats.LoadAvg1 alert.val += stats.LoadAvg[0]
case "LoadAvg5": case "LoadAvg5":
alert.val += stats.LoadAvg5 alert.val += stats.LoadAvg[1]
case "LoadAvg15": case "LoadAvg15":
alert.val += stats.LoadAvg15 alert.val += stats.LoadAvg[2]
default: default:
continue continue
} }

View File

@@ -31,11 +31,13 @@ type Stats struct {
Temperatures map[string]float64 `json:"t,omitempty" cbor:"20,keyasint,omitempty"` Temperatures map[string]float64 `json:"t,omitempty" cbor:"20,keyasint,omitempty"`
ExtraFs map[string]*FsStats `json:"efs,omitempty" cbor:"21,keyasint,omitempty"` ExtraFs map[string]*FsStats `json:"efs,omitempty" cbor:"21,keyasint,omitempty"`
GPUData map[string]GPUData `json:"g,omitempty" cbor:"22,keyasint,omitempty"` GPUData map[string]GPUData `json:"g,omitempty" cbor:"22,keyasint,omitempty"`
LoadAvg1 float64 `json:"l1,omitempty" cbor:"23,keyasint,omitempty,omitzero"` LoadAvg1 float64 `json:"l1,omitempty" cbor:"23,keyasint,omitempty"`
LoadAvg5 float64 `json:"l5,omitempty" cbor:"24,keyasint,omitempty,omitzero"` LoadAvg5 float64 `json:"l5,omitempty" cbor:"24,keyasint,omitempty"`
LoadAvg15 float64 `json:"l15,omitempty" cbor:"25,keyasint,omitempty,omitzero"` LoadAvg15 float64 `json:"l15,omitempty" cbor:"25,keyasint,omitempty"`
Bandwidth [2]uint64 `json:"b,omitzero" cbor:"26,keyasint,omitzero"` // [sent bytes, recv bytes] Bandwidth [2]uint64 `json:"b,omitzero" cbor:"26,keyasint,omitzero"` // [sent bytes, recv bytes]
MaxBandwidth [2]uint64 `json:"bm,omitzero" cbor:"27,keyasint,omitzero"` // [sent bytes, recv bytes] MaxBandwidth [2]uint64 `json:"bm,omitzero" cbor:"27,keyasint,omitzero"` // [sent bytes, recv bytes]
LoadAvg [3]float64 `json:"la,omitempty" cbor:"28,keyasint"`
// TODO: remove other load fields in future release in favor of load avg array
} }
type GPUData struct { type GPUData struct {
@@ -79,25 +81,27 @@ const (
) )
type Info struct { type Info struct {
Hostname string `json:"h" cbor:"0,keyasint"` Hostname string `json:"h" cbor:"0,keyasint"`
KernelVersion string `json:"k,omitempty" cbor:"1,keyasint,omitempty"` KernelVersion string `json:"k,omitempty" cbor:"1,keyasint,omitempty"`
Cores int `json:"c" cbor:"2,keyasint"` Cores int `json:"c" cbor:"2,keyasint"`
Threads int `json:"t,omitempty" cbor:"3,keyasint,omitempty"` Threads int `json:"t,omitempty" cbor:"3,keyasint,omitempty"`
CpuModel string `json:"m" cbor:"4,keyasint"` CpuModel string `json:"m" cbor:"4,keyasint"`
Uptime uint64 `json:"u" cbor:"5,keyasint"` Uptime uint64 `json:"u" cbor:"5,keyasint"`
Cpu float64 `json:"cpu" cbor:"6,keyasint"` Cpu float64 `json:"cpu" cbor:"6,keyasint"`
MemPct float64 `json:"mp" cbor:"7,keyasint"` MemPct float64 `json:"mp" cbor:"7,keyasint"`
DiskPct float64 `json:"dp" cbor:"8,keyasint"` DiskPct float64 `json:"dp" cbor:"8,keyasint"`
Bandwidth float64 `json:"b" cbor:"9,keyasint"` Bandwidth float64 `json:"b" cbor:"9,keyasint"`
AgentVersion string `json:"v" cbor:"10,keyasint"` AgentVersion string `json:"v" cbor:"10,keyasint"`
Podman bool `json:"p,omitempty" cbor:"11,keyasint,omitempty"` Podman bool `json:"p,omitempty" cbor:"11,keyasint,omitempty"`
GpuPct float64 `json:"g,omitempty" cbor:"12,keyasint,omitempty"` GpuPct float64 `json:"g,omitempty" cbor:"12,keyasint,omitempty"`
DashboardTemp float64 `json:"dt,omitempty" cbor:"13,keyasint,omitempty"` DashboardTemp float64 `json:"dt,omitempty" cbor:"13,keyasint,omitempty"`
Os Os `json:"os" cbor:"14,keyasint"` Os Os `json:"os" cbor:"14,keyasint"`
LoadAvg1 float64 `json:"l1,omitempty" cbor:"15,keyasint,omitempty"` LoadAvg1 float64 `json:"l1,omitempty" cbor:"15,keyasint,omitempty"`
LoadAvg5 float64 `json:"l5,omitempty" cbor:"16,keyasint,omitempty"` LoadAvg5 float64 `json:"l5,omitempty" cbor:"16,keyasint,omitempty"`
LoadAvg15 float64 `json:"l15,omitempty" cbor:"17,keyasint,omitempty"` LoadAvg15 float64 `json:"l15,omitempty" cbor:"17,keyasint,omitempty"`
BandwidthBytes uint64 `json:"bb" cbor:"18,keyasint"` BandwidthBytes uint64 `json:"bb" cbor:"18,keyasint"`
LoadAvg [3]float64 `json:"la,omitempty" cbor:"19,keyasint"`
// TODO: remove load fields in future release in favor of load avg array
} }
// Final data structure to return to the hub // Final data structure to return to the hub

View File

@@ -203,9 +203,9 @@ func (rm *RecordManager) AverageSystemStats(db dbx.Builder, records RecordIds) *
sum.DiskWritePs += stats.DiskWritePs sum.DiskWritePs += stats.DiskWritePs
sum.NetworkSent += stats.NetworkSent sum.NetworkSent += stats.NetworkSent
sum.NetworkRecv += stats.NetworkRecv sum.NetworkRecv += stats.NetworkRecv
sum.LoadAvg1 += stats.LoadAvg1 sum.LoadAvg[0] += stats.LoadAvg[0]
sum.LoadAvg5 += stats.LoadAvg5 sum.LoadAvg[1] += stats.LoadAvg[1]
sum.LoadAvg15 += stats.LoadAvg15 sum.LoadAvg[2] += stats.LoadAvg[2]
sum.Bandwidth[0] += stats.Bandwidth[0] sum.Bandwidth[0] += stats.Bandwidth[0]
sum.Bandwidth[1] += stats.Bandwidth[1] sum.Bandwidth[1] += stats.Bandwidth[1]
// Set peak values // Set peak values
@@ -285,9 +285,9 @@ func (rm *RecordManager) AverageSystemStats(db dbx.Builder, records RecordIds) *
sum.DiskWritePs = twoDecimals(sum.DiskWritePs / count) sum.DiskWritePs = twoDecimals(sum.DiskWritePs / count)
sum.NetworkSent = twoDecimals(sum.NetworkSent / count) sum.NetworkSent = twoDecimals(sum.NetworkSent / count)
sum.NetworkRecv = twoDecimals(sum.NetworkRecv / count) sum.NetworkRecv = twoDecimals(sum.NetworkRecv / count)
sum.LoadAvg1 = twoDecimals(sum.LoadAvg1 / count) sum.LoadAvg[0] = twoDecimals(sum.LoadAvg[0] / count)
sum.LoadAvg5 = twoDecimals(sum.LoadAvg5 / count) sum.LoadAvg[1] = twoDecimals(sum.LoadAvg[1] / count)
sum.LoadAvg15 = twoDecimals(sum.LoadAvg15 / count) sum.LoadAvg[2] = twoDecimals(sum.LoadAvg[2] / count)
sum.Bandwidth[0] = sum.Bandwidth[0] / uint64(count) sum.Bandwidth[0] = sum.Bandwidth[0] / uint64(count)
sum.Bandwidth[1] = sum.Bandwidth[1] / uint64(count) sum.Bandwidth[1] = sum.Bandwidth[1] / uint64(count)
// Average temperatures // Average temperatures

View File

@@ -1,12 +1,12 @@
{ {
"name": "beszel", "name": "beszel",
"version": "0.12.0", "version": "0.12.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "beszel", "name": "beszel",
"version": "0.12.0", "version": "0.12.1",
"dependencies": { "dependencies": {
"@henrygd/queue": "^1.0.7", "@henrygd/queue": "^1.0.7",
"@henrygd/semaphore": "^0.0.2", "@henrygd/semaphore": "^0.0.2",

View File

@@ -1,7 +1,7 @@
{ {
"name": "beszel", "name": "beszel",
"private": true, "private": true,
"version": "0.12.0", "version": "0.12.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -87,5 +87,5 @@ export default function AreaChartDefault({
</ChartContainer> </ChartContainer>
</div> </div>
) )
}, [chartData.systemStats.length, yAxisWidth, maxToggled]) }, [chartData.systemStats.at(-1), yAxisWidth, maxToggled])
} }

View File

@@ -9,31 +9,30 @@ import {
xAxis, xAxis,
} from "@/components/ui/chart" } from "@/components/ui/chart"
import { useYAxisWidth, cn, formatShortDate, toFixedFloat, decimalString, chartMargin } from "@/lib/utils" import { useYAxisWidth, cn, formatShortDate, toFixedFloat, decimalString, chartMargin } from "@/lib/utils"
import { ChartData } from "@/types" import { ChartData, SystemStats } from "@/types"
import { memo } from "react" import { memo } from "react"
import { t } from "@lingui/core/macro" import { t } from "@lingui/core/macro"
export default memo(function LoadAverageChart({ chartData }: { chartData: ChartData }) { export default memo(function LoadAverageChart({ chartData }: { chartData: ChartData }) {
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth() const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
if (chartData.systemStats.length === 0) { const keys: { legacy: keyof SystemStats; color: string; label: string }[] = [
return null {
} legacy: "l1",
const keys = {
l1: {
color: "hsl(271, 81%, 60%)", // Purple color: "hsl(271, 81%, 60%)", // Purple
label: t({ message: `1 min`, comment: "Load average" }), label: t({ message: `1 min`, comment: "Load average" }),
}, },
l5: { {
legacy: "l5",
color: "hsl(217, 91%, 60%)", // Blue color: "hsl(217, 91%, 60%)", // Blue
label: t({ message: `5 min`, comment: "Load average" }), label: t({ message: `5 min`, comment: "Load average" }),
}, },
l15: { {
legacy: "l15",
color: "hsl(25, 95%, 53%)", // Orange color: "hsl(25, 95%, 53%)", // Orange
label: t({ message: `15 min`, comment: "Load average" }), label: t({ message: `15 min`, comment: "Load average" }),
}, },
} ]
return ( return (
<div> <div>
@@ -69,16 +68,22 @@ export default memo(function LoadAverageChart({ chartData }: { chartData: ChartD
/> />
} }
/> />
{Object.entries(keys).map(([key, value]: [string, { color: string; label: string }]) => { {keys.map(({ legacy, color, label }, i) => {
const dataKey = (value: { stats: SystemStats }) => {
if (chartData.agentVersion.patch < 1) {
return value.stats?.[legacy]
}
return value.stats?.la?.[i] ?? value.stats?.[legacy]
}
return ( return (
<Line <Line
key={key} key={i}
dataKey={`stats.${key}`} dataKey={dataKey}
name={value.label} name={label}
type="monotoneX" type="monotoneX"
dot={false} dot={false}
strokeWidth={1.5} strokeWidth={1.5}
stroke={value.color} stroke={color}
isAnimationActive={false} isAnimationActive={false}
/> />
) )

View File

@@ -1,5 +1,5 @@
import { t } from "@lingui/core/macro"; import { t } from "@lingui/core/macro"
import { Trans } from "@lingui/react/macro"; import { Trans } from "@lingui/react/macro"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
import { buttonVariants } from "@/components/ui/button" import { buttonVariants } from "@/components/ui/button"
import { Input } from "@/components/ui/input" import { Input } from "@/components/ui/input"
@@ -43,6 +43,14 @@ const showLoginFaliedToast = () => {
}) })
} }
const getAuthProviderIcon = (provider: AuthProviderInfo) => {
let { name } = provider
if (name.startsWith("oidc")) {
name = "oidc"
}
return prependBasePath(`/_/images/oauth2/${name}.svg`)
}
export function UserAuthForm({ export function UserAuthForm({
className, className,
isFirstRun, isFirstRun,
@@ -165,8 +173,8 @@ export function UserAuthForm({
}, []) }, [])
return ( return (
<div className={cn("grid gap-6", className)} {...props}> <div className={cn("grid gap-6", className)} {...props}>
{passwordEnabled && ( {passwordEnabled && (
<> <>
<form onSubmit={handleSubmit} onChange={() => setErrors({})}> <form onSubmit={handleSubmit} onChange={() => setErrors({})}>
<div className="grid gap-2.5"> <div className="grid gap-2.5">
@@ -242,20 +250,20 @@ export function UserAuthForm({
</form> </form>
{(isFirstRun || oauthEnabled) && ( {(isFirstRun || oauthEnabled) && (
// only show 'continue with' during onboarding or if we have auth providers // only show 'continue with' during onboarding or if we have auth providers
(<div className="relative"> <div className="relative">
<div className="absolute inset-0 flex items-center"> <div className="absolute inset-0 flex items-center">
<span className="w-full border-t" /> <span className="w-full border-t" />
</div> </div>
<div className="relative flex justify-center text-xs uppercase"> <div className="relative flex justify-center text-xs uppercase">
<span className="bg-background px-2 text-muted-foreground"> <span className="bg-background px-2 text-muted-foreground">
<Trans>Or continue with</Trans> <Trans>Or continue with</Trans>
</span> </span>
</div> </div>
</div>) </div>
)} )}
</> </>
)} )}
{oauthEnabled && ( {oauthEnabled && (
<div className="grid gap-2 -mt-1"> <div className="grid gap-2 -mt-1">
{authMethods.oauth2.providers.map((provider) => ( {authMethods.oauth2.providers.map((provider) => (
<button <button
@@ -273,7 +281,7 @@ export function UserAuthForm({
) : ( ) : (
<img <img
className="me-2 h-4 w-4 dark:brightness-0 dark:invert" className="me-2 h-4 w-4 dark:brightness-0 dark:invert"
src={prependBasePath(`/_/images/oauth2/${provider.name}.svg`)} src={getAuthProviderIcon(provider)}
alt="" alt=""
// onError={(e) => { // onError={(e) => {
// e.currentTarget.src = "/static/lock.svg" // e.currentTarget.src = "/static/lock.svg"
@@ -285,16 +293,16 @@ export function UserAuthForm({
))} ))}
</div> </div>
)} )}
{!oauthEnabled && isFirstRun && ( {!oauthEnabled && isFirstRun && (
// only show GitHub button / dialog during onboarding // only show GitHub button / dialog during onboarding
(<Dialog> <Dialog>
<DialogTrigger asChild> <DialogTrigger asChild>
<button type="button" className={cn(buttonVariants({ variant: "outline" }))}> <button type="button" className={cn(buttonVariants({ variant: "outline" }))}>
<img className="me-2 h-4 w-4 dark:invert" src={prependBasePath("/_/images/oauth2/github.svg")} alt="" /> <img className="me-2 h-4 w-4 dark:invert" src={prependBasePath("/_/images/oauth2/github.svg")} alt="" />
<span className="translate-y-[1px]">GitHub</span> <span className="translate-y-[1px]">GitHub</span>
</button> </button>
</DialogTrigger> </DialogTrigger>
<DialogContent style={{ maxWidth: 440, width: "90%" }}> <DialogContent style={{ maxWidth: 440, width: "90%" }}>
<DialogHeader> <DialogHeader>
<DialogTitle> <DialogTitle>
<Trans>OAuth 2 / OIDC support</Trans> <Trans>OAuth 2 / OIDC support</Trans>
@@ -318,9 +326,9 @@ export function UserAuthForm({
</p> </p>
</div> </div>
</DialogContent> </DialogContent>
</Dialog>) </Dialog>
)} )}
{passwordEnabled && !isFirstRun && ( {passwordEnabled && !isFirstRun && (
<Link <Link
href={getPagePath($router, "forgot_password")} href={getPagePath($router, "forgot_password")}
className="text-sm mx-auto hover:text-brand underline underline-offset-4 opacity-70 hover:opacity-100 transition-opacity" className="text-sm mx-auto hover:text-brand underline underline-offset-4 opacity-70 hover:opacity-100 transition-opacity"
@@ -328,6 +336,6 @@ export function UserAuthForm({
<Trans>Forgot password?</Trans> <Trans>Forgot password?</Trans>
</Link> </Link>
)} )}
</div> </div>
); )
} }

View File

@@ -74,11 +74,11 @@ export default function AlertsHistoryDataTable() {
} }
// Initial load // Initial load
pb.collection<AlertsHistoryRecord>("alerts_history") pb.collection<AlertsHistoryRecord>("alerts_history")
.getFullList({ .getList(0, 200, {
...pbOptions, ...pbOptions,
sort: "-created", sort: "-created",
}) })
.then((records) => setData(records)) .then(({ items }) => setData(items))
// Subscribe to changes // Subscribe to changes
;(async () => { ;(async () => {

View File

@@ -42,6 +42,10 @@ const pbFingerprintOptions = {
fields: "id,fingerprint,token,system,expand.system.name", fields: "id,fingerprint,token,system,expand.system.name",
} }
function sortFingerprints(fingerprints: FingerprintRecord[]) {
return fingerprints.sort((a, b) => a.expand.system.name.localeCompare(b.expand.system.name))
}
const SettingsFingerprintsPage = memo(() => { const SettingsFingerprintsPage = memo(() => {
if (isReadOnlyUser()) { if (isReadOnlyUser()) {
redirectPage($router, "settings", { name: "general" }) redirectPage($router, "settings", { name: "general" })
@@ -51,9 +55,10 @@ const SettingsFingerprintsPage = memo(() => {
// Get fingerprint records on mount // Get fingerprint records on mount
useEffect(() => { useEffect(() => {
pb.collection("fingerprints") pb.collection("fingerprints")
.getFullList(pbFingerprintOptions) .getFullList<FingerprintRecord>(pbFingerprintOptions)
// @ts-ignore .then((prints) => {
.then(setFingerprints) setFingerprints(sortFingerprints(prints))
})
}, []) }, [])
// Subscribe to fingerprint updates // Subscribe to fingerprint updates
@@ -66,7 +71,7 @@ const SettingsFingerprintsPage = memo(() => {
(res) => { (res) => {
setFingerprints((currentFingerprints) => { setFingerprints((currentFingerprints) => {
if (res.action === "create") { if (res.action === "create") {
return [...currentFingerprints, res.record as FingerprintRecord] return sortFingerprints([...currentFingerprints, res.record as FingerprintRecord])
} }
if (res.action === "update") { if (res.action === "update") {
return currentFingerprints.map((fingerprint) => { return currentFingerprints.map((fingerprint) => {

View File

@@ -26,6 +26,7 @@ import {
getHostDisplayValue, getHostDisplayValue,
getPbTimestamp, getPbTimestamp,
listen, listen,
parseSemVer,
toFixedFloat, toFixedFloat,
useLocalStorage, useLocalStorage,
} from "@/lib/utils" } from "@/lib/utils"
@@ -191,6 +192,7 @@ export default function SystemDetail({ name }: { name: string }) {
chartTime, chartTime,
orientation: direction === "rtl" ? "right" : "left", orientation: direction === "rtl" ? "right" : "left",
...getTimeData(chartTime, lastCreated), ...getTimeData(chartTime, lastCreated),
agentVersion: parseSemVer(system?.info?.v),
} }
}, [systemStats, containerData, direction]) }, [systemStats, containerData, direction])
@@ -642,7 +644,7 @@ export default function SystemDetail({ name }: { name: string }) {
)} )}
{/* Load Average chart */} {/* Load Average chart */}
{system.info.l1 !== undefined && ( {chartData.agentVersion?.minor >= 12 && (
<ChartCard <ChartCard
empty={dataEmpty} empty={dataEmpty}
grid={grid} grid={grid}

View File

@@ -73,6 +73,7 @@ import {
formatTemperature, formatTemperature,
decimalString, decimalString,
formatBytes, formatBytes,
parseSemVer,
} from "@/lib/utils" } from "@/lib/utils"
import AlertsButton from "../alerts/alert-button" import AlertsButton from "../alerts/alert-button"
import { $router, Link, navigate } from "../router" import { $router, Link, navigate } from "../router"
@@ -88,10 +89,10 @@ import { Dialog } from "../ui/dialog"
type ViewMode = "table" | "grid" type ViewMode = "table" | "grid"
function CellFormatter(info: CellContext<SystemRecord, unknown>) { function CellFormatter(info: CellContext<SystemRecord, unknown>) {
const val = (info.getValue() as number) || 0 const val = Number(info.getValue()) || 0
return ( return (
<div className="flex gap-2 items-center tabular-nums tracking-tight"> <div className="flex gap-2 items-center tabular-nums tracking-tight">
<span className="min-w-8">{decimalString(val, 1)}%</span> <span className="min-w-8">{decimalString(val, val >= 10 ? 1 : 2)}%</span>
<span className="grow min-w-8 block bg-muted h-[1em] relative rounded-sm overflow-hidden"> <span className="grow min-w-8 block bg-muted h-[1em] relative rounded-sm overflow-hidden">
<span <span
className={cn( className={cn(
@@ -173,23 +174,17 @@ export default function SystemsTable() {
invertSorting: false, invertSorting: false,
Icon: ServerIcon, Icon: ServerIcon,
cell: (info) => ( cell: (info) => (
<span className="flex gap-0.5 items-center text-base md:ps-1 md:pe-5"> <span className="flex gap-2 items-center md:ps-1 md:pe-5">
<IndicatorDot system={info.row.original} /> <IndicatorDot system={info.row.original} />
<Button <span className="font-medium text-sm">
data-nolink
variant={"ghost"}
className="text-primary/90 h-7 px-1.5 gap-1.5"
onClick={() => copyToClipboard(info.getValue() as string)}
>
{info.getValue() as string} {info.getValue() as string}
<CopyIcon className="size-2.5" /> </span>
</Button>
</span> </span>
), ),
header: sortableHeader, header: sortableHeader,
}, },
{ {
accessorFn: ({ info }) => decimalString(info.cpu, info.cpu >= 10 ? 1 : 2), accessorFn: ({ info }) => info.cpu,
id: "cpu", id: "cpu",
name: () => t`CPU`, name: () => t`CPU`,
cell: CellFormatter, cell: CellFormatter,
@@ -198,7 +193,7 @@ export default function SystemsTable() {
}, },
{ {
// accessorKey: "info.mp", // accessorKey: "info.mp",
accessorFn: (originalRow) => originalRow.info.mp, accessorFn: ({ info }) => info.mp,
id: "memory", id: "memory",
name: () => t`Memory`, name: () => t`Memory`,
cell: CellFormatter, cell: CellFormatter,
@@ -206,7 +201,7 @@ export default function SystemsTable() {
header: sortableHeader, header: sortableHeader,
}, },
{ {
accessorFn: (originalRow) => originalRow.info.dp, accessorFn: ({ info }) => info.dp,
id: "disk", id: "disk",
name: () => t`Disk`, name: () => t`Disk`,
cell: CellFormatter, cell: CellFormatter,
@@ -214,7 +209,7 @@ export default function SystemsTable() {
header: sortableHeader, header: sortableHeader,
}, },
{ {
accessorFn: (originalRow) => originalRow.info.g, accessorFn: ({ info }) => info.g,
id: "gpu", id: "gpu",
name: () => "GPU", name: () => "GPU",
cell: CellFormatter, cell: CellFormatter,
@@ -224,8 +219,12 @@ export default function SystemsTable() {
{ {
id: "loadAverage", id: "loadAverage",
accessorFn: ({ info }) => { accessorFn: ({ info }) => {
const { l1 = 0, l5 = 0, l15 = 0 } = info const sum = info.la?.reduce((acc, curr) => acc + curr, 0)
return l1 + l5 + l15 // TODO: remove this in future release in favor of la array
if (!sum) {
return (info.l1 ?? 0) + (info.l5 ?? 0) + (info.l15 ?? 0)
}
return sum
}, },
name: () => t({ message: "Load Avg", comment: "Short label for load average" }), name: () => t({ message: "Load Avg", comment: "Short label for load average" }),
size: 0, size: 0,
@@ -233,16 +232,22 @@ export default function SystemsTable() {
header: sortableHeader, header: sortableHeader,
cell(info: CellContext<SystemRecord, unknown>) { cell(info: CellContext<SystemRecord, unknown>) {
const { info: sysInfo, status } = info.row.original const { info: sysInfo, status } = info.row.original
if (sysInfo.l1 === undefined) { // agent version
const { minor, patch } = parseSemVer(sysInfo.v)
let loadAverages = sysInfo.la
// use legacy load averages if agent version is less than 12.1.0
if (!loadAverages || (minor === 12 && patch < 1)) {
loadAverages = [sysInfo.l1 ?? 0, sysInfo.l5 ?? 0, sysInfo.l15 ?? 0]
}
const max = Math.max(...loadAverages)
if (max === 0 && (status === "paused" || minor < 12)) {
return null return null
} }
const { l1 = 0, l5 = 0, l15 = 0, t: cpuThreads = 1 } = sysInfo
const loadAverages = [l1, l5, l15]
function getDotColor() { function getDotColor() {
const max = Math.max(...loadAverages) const normalized = max / (sysInfo.t ?? 1)
const normalized = max / cpuThreads
if (status !== "up") return "bg-primary/30" if (status !== "up") return "bg-primary/30"
if (normalized < 0.7) return "bg-green-500" if (normalized < 0.7) return "bg-green-500"
if (normalized < 1) return "bg-yellow-500" if (normalized < 1) return "bg-yellow-500"
@@ -252,7 +257,7 @@ export default function SystemsTable() {
return ( return (
<div className="flex items-center gap-[.35em] w-full tabular-nums tracking-tight"> <div className="flex items-center gap-[.35em] w-full tabular-nums tracking-tight">
<span className={cn("inline-block size-2 rounded-full me-0.5", getDotColor())} /> <span className={cn("inline-block size-2 rounded-full me-0.5", getDotColor())} />
{loadAverages.map((la, i) => ( {loadAverages?.map((la, i) => (
<span key={i}>{decimalString(la, la >= 10 ? 1 : 2)}</span> <span key={i}>{decimalString(la, la >= 10 ? 1 : 2)}</span>
))} ))}
</div> </div>
@@ -281,7 +286,7 @@ export default function SystemsTable() {
}, },
}, },
{ {
accessorFn: (originalRow) => originalRow.info.dt, accessorFn: ({ info }) => info.dt,
id: "temp", id: "temp",
name: () => t({ message: "Temp", comment: "Temperature label in systems table" }), name: () => t({ message: "Temp", comment: "Temperature label in systems table" }),
size: 50, size: 50,
@@ -303,7 +308,7 @@ export default function SystemsTable() {
}, },
}, },
{ {
accessorFn: (originalRow) => originalRow.info.v, accessorFn: ({ info }) => info.v,
id: "agent", id: "agent",
name: () => t`Agent`, name: () => t`Agent`,
// invertSorting: true, // invertSorting: true,
@@ -710,6 +715,10 @@ const ActionsButton = memo(({ system }: { system: SystemRecord }) => {
</> </>
)} )}
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem onClick={() => copyToClipboard(name)}>
<CopyIcon className="me-2.5 size-4" />
<Trans>Copy name</Trans>
</DropdownMenuItem>
<DropdownMenuItem onClick={() => copyToClipboard(host)}> <DropdownMenuItem onClick={() => copyToClipboard(host)}>
<CopyIcon className="me-2.5 size-4" /> <CopyIcon className="me-2.5 size-4" />
<Trans>Copy host</Trans> <Trans>Copy host</Trans>

View File

@@ -9,6 +9,7 @@ import {
ChartTimeData, ChartTimeData,
ChartTimes, ChartTimes,
FingerprintRecord, FingerprintRecord,
SemVer,
SystemRecord, SystemRecord,
UserSettings, UserSettings,
} from "@/types" } from "@/types"
@@ -495,3 +496,14 @@ export function formatDuration(
.filter(Boolean) .filter(Boolean)
.join(" ") .join(" ")
} }
export const parseSemVer = (semVer = ""): SemVer => {
// if (semVer.startsWith("v")) {
// semVer = semVer.slice(1)
// }
if (semVer.includes("-")) {
semVer = semVer.slice(0, semVer.indexOf("-"))
}
const parts = semVer.split(".").map(Number)
return { major: parts?.[0] ?? 0, minor: parts?.[1] ?? 0, patch: parts?.[2] ?? 0 }
}

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ar\n" "Language: ar\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
@@ -97,7 +97,7 @@ msgstr "إضافة نظام"
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
msgstr "إضافة عنوان URL" msgstr "إضافة رابط"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
@@ -155,7 +155,7 @@ msgstr "المتوسط يتجاوز <0>{value}{0}</0>"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Average power consumption of GPUs" msgid "Average power consumption of GPUs"
msgstr "متوسط ​​استهلاك طاقة GPUs" msgstr "متوسط ​​استهلاك طاقة وحدة معالجة الرسوميات"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
@@ -178,7 +178,7 @@ msgstr "عرض النطاق الترددي"
#: src/components/login/auth-form.tsx #: src/components/login/auth-form.tsx
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "يدعم Beszel OpenID Connect والعديد من مزودي المصادقة OAuth2." msgstr "يدعم بيزيل بروتوكول OpenID Connect والعديد من مزوّدي المصادقة عبر بروتوكول OAuth2."
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
@@ -250,7 +250,7 @@ msgstr "تعليمات سطر الأوامر"
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "قم بتكوين كيفية تلقي إشعارات التنبيه." msgstr "هيئ التنبيهات الواردة"
#: src/components/login/auth-form.tsx #: src/components/login/auth-form.tsx
#: src/components/login/auth-form.tsx #: src/components/login/auth-form.tsx
@@ -274,13 +274,13 @@ msgstr "تم النسخ إلى الحافظة"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Button to copy docker compose file content" msgctxt "Button to copy docker compose file content"
msgid "Copy docker compose" msgid "Copy docker compose"
msgstr "نسخ docker compose" 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 docker run command" msgctxt "Button to copy docker run command"
msgid "Copy docker run" msgid "Copy docker run"
msgstr "نسخ docker run" msgstr "نسخ أمر تشغيل الدوكر"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Environment variables" msgctxt "Environment variables"
@@ -296,6 +296,10 @@ msgstr "نسخ المضيف"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "نسخ أمر لينكس" msgstr "نسخ أمر لينكس"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "نسخ الاسم"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "نسخ النص" msgstr "نسخ النص"
@@ -378,15 +382,15 @@ msgstr "استخدام القرص لـ {extraFsName}"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "استخدام المعالج لـ Docker" msgstr "استخدام المعالج للدوكر"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "استخدام الذاكرة لـ Docker" msgstr "استخدام الذاكرة للدوكر"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "إدخال/إخراج الشبكة لـ Docker" msgstr "إدخال/إخراج الشبكة للدوكر"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Documentation" msgid "Documentation"
@@ -504,7 +508,7 @@ msgstr "عام"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "GPU Power Draw" msgid "GPU Power Draw"
msgstr "استهلاك طاقة GPU" msgstr "استهلاك طاقة وحدة معالجة الرسوميات"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Grid" msgid "Grid"
@@ -600,7 +604,7 @@ msgstr "تعليمات الإعداد اليدوي"
#. 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 "1 دقيقة كحد" msgstr "الحد الأقصى دقيقة"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Memory" msgid "Memory"
@@ -613,7 +617,7 @@ msgstr "استخدام الذاكرة"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "استخدام الذاكرة لحاويات Docker" msgstr "استخدام الذاكرة لحاويات دوكر"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/add-system.tsx #: src/components/add-system.tsx
@@ -626,7 +630,7 @@ msgstr "الشبكة"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "حركة مرور الشبكة لحاويات Docker" msgstr "حركة مرور الشبكة لحاويات الدوكر"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
@@ -715,7 +719,7 @@ msgstr "إيقاف مؤقت"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Paused" msgid "Paused"
msgstr "متوقف مؤقتًا" msgstr "متوقف مؤقتا"
#: 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."
@@ -990,7 +994,7 @@ msgstr "يتم التفعيل عندما يتجاوز متوسط التحميل
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when any sensor exceeds a threshold" msgid "Triggers when any sensor exceeds a threshold"
msgstr "يتم التفعيل عندما يتجاوز أي مستشعر عتبة معينة" msgstr "يتم التفعيل عندما <EFBFBD><EFBFBD>تجاوز أي مستشعر عتبة معينة"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when combined up/down exceeds a threshold" msgid "Triggers when combined up/down exceeds a threshold"
@@ -1092,7 +1096,7 @@ msgstr "عند التفعيل، يسمح هذا الرمز المميز للوك
#: 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"
msgid "Windows command" msgid "Windows command"
msgstr "أمر Windows" msgstr "أمر ويندوز"
#. Disk write #. Disk write
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -1111,3 +1115,4 @@ msgstr "تكوين YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "تم تحديث إعدادات المستخدم الخاصة بك." msgstr "تم تحديث إعدادات المستخدم الخاصة بك."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: bg\n" "Language: bg\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Bulgarian\n" "Language-Team: Bulgarian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -296,6 +296,10 @@ msgstr "Копирай хоста"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Копирай linux командата" msgstr "Копирай linux командата"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Копирай име"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Копирай текста" msgstr "Копирай текста"
@@ -1111,3 +1115,4 @@ msgstr "YAML конфигурация"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Настройките за потребителя ти са обновени." msgstr "Настройките за потребителя ти са обновени."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: cs\n" "Language: cs\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-03-14 00:50\n" "PO-Revision-Date: 2025-08-03 21:18\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Czech\n" "Language-Team: Czech\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
@@ -27,7 +27,7 @@ msgstr "{0, plural, one {# den} few {# dny} other {# dní}}"
#. 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} z {1} vybraných řádků."
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
@@ -40,7 +40,7 @@ msgstr "1 hodina"
#. 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 min"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "1 week" msgid "1 week"
@@ -53,7 +53,7 @@ msgstr "12 hodin"
#. 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"
@@ -66,7 +66,7 @@ msgstr "30 dní"
#. 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/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -77,7 +77,7 @@ msgstr "Akce"
#: 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 "Aktivní"
#: src/components/routes/home.tsx #: src/components/routes/home.tsx
msgid "Active Alerts" msgid "Active Alerts"
@@ -116,7 +116,7 @@ msgstr "Agent"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Alert History" msgid "Alert History"
msgstr "" msgstr "Historie upozornění"
#: src/components/alerts/alert-button.tsx #: src/components/alerts/alert-button.tsx
#: src/components/alerts/alert-button.tsx #: src/components/alerts/alert-button.tsx
@@ -134,7 +134,7 @@ msgstr "Opravdu chcete odstranit {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 "Jste si jistý?"
#: 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."
@@ -191,12 +191,12 @@ msgstr "Binary"
#: 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"
@@ -213,11 +213,11 @@ msgstr "Upozornění - možná ztráta dat"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Celsius (°C)" msgid "Celsius (°C)"
msgstr "" msgstr "Celsia (°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 "Změnit jednotky zobrazení metrik."
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Change general application options." msgid "Change general application options."
@@ -259,7 +259,7 @@ msgstr "Potvrdit heslo"
#: src/components/routes/home.tsx #: src/components/routes/home.tsx
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr "Připojení je nedostupné"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
@@ -280,12 +280,12 @@ msgstr "Kopírovat docker compose"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Button to copy docker run command" msgctxt "Button to copy docker run command"
msgid "Copy docker run" msgid "Copy docker run"
msgstr "" msgstr "Zkopírovat příkaz na spuštění dockeru"
#: 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 "Kopírovat env"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Copy host" msgid "Copy host"
@@ -296,21 +296,25 @@ msgstr "Kopírovat hostitele"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopírovat příkaz Linux" msgstr "Kopírovat příkaz Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopírovat název"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopírovat text" msgstr "Kopírovat text"
#: 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 "Zkopírujte instalační příkaz pro agenta níže nebo automaticky registrujte agenty s <0>univerzálním 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 "Zkopírujte obsah <0>docker-compose.yml</0> pro agenta níže nebo automaticky registrujte agenty s <1>univerzálním token</1>."
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy YAML" msgid "Copy YAML"
msgstr "" msgstr "Kopírovat YAML"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "CPU" msgid "CPU"
@@ -329,7 +333,7 @@ msgstr "Vytvořit účet"
#. Context: date created #. Context: date created
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Created" msgid "Created"
msgstr "" msgstr "Vytvořeno"
#. Dark theme #. Dark theme
#: src/components/mode-toggle.tsx #: src/components/mode-toggle.tsx
@@ -352,7 +356,7 @@ msgstr "Odstranit"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Delete fingerprint" msgid "Delete fingerprint"
msgstr "" msgstr "Smazat identifikátor"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Disk" msgid "Disk"
@@ -364,7 +368,7 @@ msgstr "Disk I/O"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr "Disková jednotka"
#: src/lib/utils.ts #: src/lib/utils.ts
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -402,7 +406,7 @@ msgstr "Nefunkční"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
msgstr "" msgstr "Doba trvání"
#: src/components/add-system.tsx #: src/components/add-system.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -447,7 +451,7 @@ msgstr "Stávající systémy, které nejsou definovány v <0>config.yml</0>, bu
#: 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"
#: src/components/routes/settings/config-yaml.tsx #: src/components/routes/settings/config-yaml.tsx
msgid "Export configuration" msgid "Export configuration"
@@ -459,7 +463,7 @@ msgstr "Exportovat aktuální konfiguraci systémů."
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)" msgid "Fahrenheit (°F)"
msgstr "" msgstr "Fahrenheita (°F)"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Failed to authenticate" msgid "Failed to authenticate"
@@ -486,7 +490,7 @@ msgstr "Filtr..."
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint" msgid "Fingerprint"
msgstr "" msgstr "Otisk"
#: src/components/alerts/alerts-system.tsx #: src/components/alerts/alerts-system.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -514,7 +518,7 @@ msgstr "Mřížka"
#: 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"
msgid "Homebrew command" msgid "Homebrew command"
msgstr "" msgstr "Homebrew příkaz"
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Host / IP" msgid "Host / IP"
@@ -548,24 +552,24 @@ msgstr "Světlý"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Load Average" msgid "Load Average"
msgstr "" msgstr "Průměrné vytížení"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 15m" msgid "Load Average 15m"
msgstr "" msgstr "Průměrná zátěž 15m"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 1m" msgid "Load Average 1m"
msgstr "" msgstr "Průměrná zátěž 1m"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 5m" msgid "Load Average 5m"
msgstr "" msgstr "Průměrná zátěž 5m"
#. Short label for load average #. Short label for load average
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Load Avg" msgid "Load Avg"
msgstr "" msgstr "Prům. zatížení"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Log Out" msgid "Log Out"
@@ -635,7 +639,7 @@ msgstr "Síťový provoz veřejných rozhraní"
#. 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íťová jednotka"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
@@ -643,7 +647,7 @@ msgstr "Nenalezeny žádné výskyty."
#: 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 "Žádné výsledky."
#: 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
@@ -686,7 +690,7 @@ msgstr "Stránka"
#. 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 "Stránka {0} z {1}"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Pages / Settings" msgid "Pages / Settings"
@@ -786,7 +790,7 @@ msgstr "Obnovit heslo"
#: 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 "Vyřešeno"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Resume" msgid "Resume"
@@ -794,11 +798,11 @@ msgstr "Pokračovat"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token" msgid "Rotate token"
msgstr "" msgstr "Změnit 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 "Řádků na stránku"
#: 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."
@@ -859,7 +863,7 @@ msgstr "Seřadit podle"
#. 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 "Stav"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Status" msgid "Status"
@@ -884,7 +888,7 @@ msgstr "Systém"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr "Průměry zatížení systému v průběhu času"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
@@ -910,7 +914,7 @@ msgstr "Teplota"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Temperature unit" msgid "Temperature unit"
msgstr "" msgstr "Jednotky teploty"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
@@ -934,7 +938,7 @@ msgstr "Tuto akci nelze vzít zpět. Tím se z databáze trvale odstraní všech
#: 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 "Tímto trvale odstraníte všechny vybrané záznamy z databáze."
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
@@ -960,33 +964,33 @@ msgstr "Přepnout motiv"
#: 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/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Tokens & Fingerprints" msgid "Tokens & Fingerprints"
msgstr "" msgstr "Tokeny & Otisky"
#: 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 "Tokeny umožňují agentům připojení a registraci. Otisky jsou stabilní identifikátory jedinečné pro každý systém, nastavené na první připojení."
#: 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 "Tokeny a otisky slouží k ověření připojení WebSocket k uzlu."
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 1 minute load average exceeds a threshold" msgid "Triggers when 1 minute load average exceeds a threshold"
msgstr "" msgstr "Spustí se, když využití paměti během 1 minuty překročí prahovou hodnotu"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 15 minute load average exceeds a threshold" msgid "Triggers when 15 minute load average exceeds a threshold"
msgstr "" msgstr "Spustí se, když využití paměti během 15 minut překročí prahovou hodnotu"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 5 minute load average exceeds a threshold" msgid "Triggers when 5 minute load average exceeds a threshold"
msgstr "" msgstr "Spustí se, když využití paměti během 5 minut překročí prahovou hodnotu"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when any sensor exceeds a threshold" msgid "Triggers when any sensor exceeds a threshold"
@@ -1015,11 +1019,11 @@ msgstr "Spustí se, když využití disku překročí prahovou hodnotu"
#. 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 "Předvolby jednotek"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Universal token" msgid "Universal token"
msgstr "" msgstr "Univerzální token"
#. Context: System is up #. Context: System is up
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -1058,7 +1062,7 @@ msgstr "Uživatelé"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Value" msgid "Value"
msgstr "" msgstr "Hodnota"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "View" msgid "View"
@@ -1066,7 +1070,7 @@ msgstr "Zobrazení"
#: 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 "Zobrazit vašich 200 nejnovějších upozornění."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Visible Fields" msgid "Visible Fields"
@@ -1086,13 +1090,13 @@ msgstr "Webhook / Push oznámení"
#: 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 "Pokud je povoleno, tento token umožňuje agentům, aby se sami zaregistrovali bez předchozího vytvoření systému. Vyprší po jedné hodině nebo po restartu uzlu."
#: 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"
msgid "Windows command" msgid "Windows command"
msgstr "" msgstr "Windows příkaz"
#. Disk write #. Disk write
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -1111,3 +1115,4 @@ msgstr "YAML konfigurace"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Vaše uživatelská nastavení byla aktualizována." msgstr "Vaše uživatelská nastavení byla aktualizována."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: da\n" "Language: da\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Danish\n" "Language-Team: Danish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -296,6 +296,10 @@ msgstr "Kopier host"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopier Linux kommando" msgstr "Kopier Linux kommando"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopier navn"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopier tekst" msgstr "Kopier tekst"
@@ -398,7 +402,7 @@ msgstr "Dokumentation"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Down" msgid "Down"
msgstr "" msgstr "Nede"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
@@ -407,7 +411,7 @@ msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Edit" msgid "Edit"
msgstr "" msgstr "Rediger"
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/auth-form.tsx #: src/components/login/auth-form.tsx
@@ -595,7 +599,7 @@ msgstr "Administrer display og notifikationsindstillinger."
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Manual setup instructions" msgid "Manual setup instructions"
msgstr "" msgstr "Manuel opsætningsvejledning"
#. 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
@@ -703,7 +707,7 @@ msgstr "Adgangskoden skal være på mindst 8 tegn."
#: 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 "Adgangskoden skal være mindre end 72 bytes."
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
msgid "Password reset request received" msgid "Password reset request received"
@@ -811,7 +815,7 @@ msgstr "Gem indstillinger"
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Save system" msgid "Save system"
msgstr "" msgstr "Gem system"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Search" msgid "Search"
@@ -901,7 +905,7 @@ msgstr "Tabel"
#. Temperature label in systems table #. Temperature label in systems table
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Temp" msgid "Temp"
msgstr "" msgstr "Temperatur"
#: src/lib/utils.ts #: src/lib/utils.ts
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -1025,7 +1029,7 @@ msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Up" msgid "Up"
msgstr "" msgstr "Oppe"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
@@ -1111,3 +1115,4 @@ msgstr "YAML Konfiguration"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Dine brugerindstillinger er opdateret." msgstr "Dine brugerindstillinger er opdateret."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: de\n" "Language: de\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: German\n" "Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -27,7 +27,7 @@ msgstr "{0, plural, one {# Tag} other {# Tage}}"
#. 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} von {1} Zeile(n) ausgewählt."
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
@@ -40,7 +40,7 @@ msgstr "1 Stunde"
#. 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 Min"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "1 week" msgid "1 week"
@@ -53,7 +53,7 @@ msgstr "12 Stunden"
#. 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"
@@ -66,7 +66,7 @@ msgstr "30 Tage"
#. 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/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -77,7 +77,7 @@ msgstr "Aktionen"
#: 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/routes/home.tsx
msgid "Active Alerts" msgid "Active Alerts"
@@ -116,7 +116,7 @@ msgstr "Agent"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Alert History" msgid "Alert History"
msgstr "" msgstr "Alarm-Verlauf"
#: src/components/alerts/alert-button.tsx #: src/components/alerts/alert-button.tsx
#: src/components/alerts/alert-button.tsx #: src/components/alerts/alert-button.tsx
@@ -134,7 +134,7 @@ msgstr "Möchtest du {name} wirklich löschen?"
#: 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 "Bist du sicher?"
#: 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."
@@ -191,12 +191,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"
@@ -213,11 +213,11 @@ msgstr "Vorsicht - potenzieller Datenverlust"
#: 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 "Anzeigeeinheiten der Werte ändern."
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Change general application options." msgid "Change general application options."
@@ -259,7 +259,7 @@ msgstr "Passwort bestätigen"
#: src/components/routes/home.tsx #: src/components/routes/home.tsx
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr "Verbindung unterbrochen"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
@@ -296,6 +296,10 @@ msgstr "Host kopieren"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Linux-Befehl kopieren" msgstr "Linux-Befehl kopieren"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Name kopieren"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Text kopieren" msgstr "Text kopieren"
@@ -329,7 +333,7 @@ msgstr "Konto erstellen"
#. Context: date created #. Context: date created
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Created" msgid "Created"
msgstr "" msgstr "Erstellt"
#. Dark theme #. Dark theme
#: src/components/mode-toggle.tsx #: src/components/mode-toggle.tsx
@@ -364,7 +368,7 @@ msgstr "Festplatten-I/O"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr "Festplatteneinheit"
#: src/lib/utils.ts #: src/lib/utils.ts
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -402,7 +406,7 @@ msgstr "Offline"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
msgstr "" msgstr "Dauer"
#: src/components/add-system.tsx #: src/components/add-system.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -447,7 +451,7 @@ msgstr "Bestehende Systeme, die nicht in der <0>config.yml</0> definiert sind, w
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Export" msgid "Export"
msgstr "" msgstr "Exportieren"
#: src/components/routes/settings/config-yaml.tsx #: src/components/routes/settings/config-yaml.tsx
msgid "Export configuration" msgid "Export configuration"
@@ -459,7 +463,7 @@ msgstr "Exportiere die aktuelle Systemkonfiguration."
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)" msgid "Fahrenheit (°F)"
msgstr "" msgstr "Fahrenheit (°F)"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Failed to authenticate" msgid "Failed to authenticate"
@@ -486,7 +490,7 @@ msgstr "Filter..."
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint" msgid "Fingerprint"
msgstr "" msgstr "Fingerabdruck"
#: src/components/alerts/alerts-system.tsx #: src/components/alerts/alerts-system.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -548,24 +552,24 @@ msgstr "Hell"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Load Average" msgid "Load Average"
msgstr "" msgstr "Durchschnittliche Systemlast"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 15m" msgid "Load Average 15m"
msgstr "" msgstr "Durchschnittliche Systemlast 15 Min"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 1m" msgid "Load Average 1m"
msgstr "" msgstr "Durchschnittliche Systemlast 1 Min"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 5m" msgid "Load Average 5m"
msgstr "" msgstr "Durchschnittliche Systemlast 5 Min"
#. Short label for load average #. Short label for load average
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Load Avg" msgid "Load Avg"
msgstr "" msgstr "Durchschnittliche Last"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Log Out" msgid "Log Out"
@@ -635,7 +639,7 @@ msgstr "Netzwerkverkehr der öffentlichen Schnittstellen"
#. 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 "Netzwerkeinheit"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
@@ -643,7 +647,7 @@ msgstr "Keine Ergebnisse gefunden."
#: 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 "Keine Ergebnisse."
#: 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
@@ -686,7 +690,7 @@ msgstr "Seite"
#. 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 "Seite {0} von {1}"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Pages / Settings" msgid "Pages / Settings"
@@ -786,7 +790,7 @@ msgstr "Passwort zurücksetzen"
#: 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 "Gelöst"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Resume" msgid "Resume"
@@ -798,7 +802,7 @@ msgstr "Token rotieren"
#: 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 "Zeilen pro Seite"
#: 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."
@@ -811,7 +815,7 @@ msgstr "Einstellungen speichern"
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Save system" msgid "Save system"
msgstr "" msgstr "System sichern"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Search" msgid "Search"
@@ -859,7 +863,7 @@ msgstr "Sortieren nach"
#. 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 "Status"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Status" msgid "Status"
@@ -884,7 +888,7 @@ msgstr "System"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr "Systemlastdurchschnitt im Zeitverlauf"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
@@ -910,7 +914,7 @@ msgstr "Temperatur"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Temperature unit" msgid "Temperature unit"
msgstr "" msgstr "Temperatureinheit"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
@@ -934,7 +938,7 @@ msgstr "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch werden alle
#: 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 "Dadurch werden alle ausgewählten Datensätze dauerhaft aus der Datenbank gelöscht."
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
@@ -978,15 +982,15 @@ msgstr "Tokens und Fingerabdrücke werden verwendet, um WebSocket-Verbindungen z
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 1 minute load average exceeds a threshold" msgid "Triggers when 1 minute load average exceeds a threshold"
msgstr "" msgstr "Löst aus, wenn der Lastdurchschnitt der letzten Minute einen Schwellenwert überschreitet"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 15 minute load average exceeds a threshold" msgid "Triggers when 15 minute load average exceeds a threshold"
msgstr "" msgstr "Löst aus, wenn der Lastdurchschnitt der letzten 15 Minuten einen Schwellenwert überschreitet"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 5 minute load average exceeds a threshold" msgid "Triggers when 5 minute load average exceeds a threshold"
msgstr "" msgstr "Löst aus, wenn der Lastdurchschnitt der letzten 5 Minuten einen Schwellenwert überschreitet"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when any sensor exceeds a threshold" msgid "Triggers when any sensor exceeds a threshold"
@@ -1015,7 +1019,7 @@ msgstr "Löst aus, wenn die Nutzung einer Festplatte einen Schwellenwert übersc
#. 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 "Einheiten"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Universal token" msgid "Universal token"
@@ -1025,7 +1029,7 @@ msgstr "Universeller Token"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Up" msgid "Up"
msgstr "" msgstr "aktiv"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
@@ -1058,7 +1062,7 @@ msgstr "Benutzer"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Value" msgid "Value"
msgstr "" msgstr "Wert"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "View" msgid "View"
@@ -1066,7 +1070,7 @@ msgstr "Ansicht"
#: 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 "Sieh dir die neusten 200 Alarme an."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Visible Fields" msgid "Visible Fields"
@@ -1111,3 +1115,4 @@ msgstr "YAML-Konfiguration"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Deine Benutzereinstellungen wurden aktualisiert." msgstr "Deine Benutzereinstellungen wurden aktualisiert."

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: es\n" "Language: es\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -40,7 +40,7 @@ msgstr "1 hora"
#. 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 "1 min" msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "1 week" msgid "1 week"
@@ -53,7 +53,7 @@ msgstr "12 horas"
#. 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 "15 min" msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "24 hours" msgid "24 hours"
@@ -66,7 +66,7 @@ msgstr "30 días"
#. 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 "5 min" msgstr ""
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -191,12 +191,12 @@ msgstr "Binario"
#: 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 "Bits (Kbps, Mbps, Gbps)" msgstr ""
#: 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 "Bytes (KB/s, MB/s, GB/s)" msgstr ""
#: src/components/charts/mem-chart.tsx #: src/components/charts/mem-chart.tsx
msgid "Cache / Buffers" msgid "Cache / Buffers"
@@ -213,7 +213,7 @@ msgstr "Precaución - posible pérdida de datos"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Celsius (°C)" msgid "Celsius (°C)"
msgstr "Celsius (°C)" msgstr ""
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Change display units for metrics." msgid "Change display units for metrics."
@@ -296,6 +296,10 @@ msgstr "Copiar host"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copiar comando de Linux" msgstr "Copiar comando de Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Copiar nombre"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Copiar texto" msgstr "Copiar texto"
@@ -459,7 +463,7 @@ msgstr "Exporte la configuración actual de sus sistemas."
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)" msgid "Fahrenheit (°F)"
msgstr "Fahrenheit (°F)" msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Failed to authenticate" msgid "Failed to authenticate"
@@ -960,7 +964,7 @@ msgstr "Alternar tema"
#: 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 "Token" msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1111,3 +1115,4 @@ msgstr "Configuración YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Su configuración de usuario ha sido actualizada." msgstr "Su configuración de usuario ha sido actualizada."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: fa\n" "Language: fa\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Persian\n" "Language-Team: Persian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -296,6 +296,10 @@ msgstr "کپی میزبان"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "کپی دستور لینوکس" msgstr "کپی دستور لینوکس"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "کپی نام"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "کپی متن" msgstr "کپی متن"
@@ -1111,3 +1115,4 @@ msgstr "پیکربندی YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "تنظیمات کاربری شما به‌روزرسانی شد." msgstr "تنظیمات کاربری شما به‌روزرسانی شد."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: fr\n" "Language: fr\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: French\n" "Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
@@ -85,7 +85,7 @@ msgstr "Alertes actives"
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "Ajouter <0>Système</0>" msgstr "Ajouter <0>un Système</0>"
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Add New System" msgid "Add New System"
@@ -97,7 +97,7 @@ msgstr "Ajouter un système"
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
msgstr "Ajouter URL" msgstr "Ajouter lURL"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
@@ -296,6 +296,10 @@ msgstr "Copier l'hôte"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copier la commande Linux" msgstr "Copier la commande Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Copier le nom"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Copier le texte" msgstr "Copier le texte"
@@ -711,7 +715,7 @@ msgstr "Demande de réinitialisation du mot de passe reçue"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Pause" msgid "Pause"
msgstr "En pause" msgstr "Pause"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Paused" msgid "Paused"
@@ -960,7 +964,7 @@ msgstr "Changer le thème"
#: 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 "Token" msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1111,3 +1115,4 @@ msgstr "Configuration YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Vos paramètres utilisateur ont été mis à jour." msgstr "Vos paramètres utilisateur ont été mis à jour."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: hr\n" "Language: hr\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Croatian\n" "Language-Team: Croatian\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
@@ -296,6 +296,10 @@ msgstr "Kopiraj hosta"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopiraj Linux komandu" msgstr "Kopiraj Linux komandu"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopiraj naziv"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopiraj tekst" msgstr "Kopiraj tekst"
@@ -1111,3 +1115,4 @@ msgstr "YAML Konfiguracija"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Vaše korisničke postavke su ažurirane." msgstr "Vaše korisničke postavke su ažurirane."

View File

@@ -8,7 +8,7 @@ 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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\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"
@@ -296,6 +296,10 @@ msgstr "Hoszt másolása"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Linux parancs másolása" msgstr "Linux parancs másolása"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Név másolása"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Szöveg másolása" msgstr "Szöveg másolása"
@@ -1111,3 +1115,4 @@ msgstr "YAML konfiguráció"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "A felhasználói beállítások frissítésre kerültek." msgstr "A felhasználói beállítások frissítésre kerültek."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: is\n" "Language: is\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Icelandic\n" "Language-Team: Icelandic\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -296,6 +296,10 @@ msgstr "Afrita host"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Afrita Linux aðgerð" msgstr "Afrita Linux aðgerð"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Afrita nafn"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Afrita texta" msgstr "Afrita texta"
@@ -1111,3 +1115,4 @@ msgstr ""
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Notenda stillingar vistaðar." msgstr "Notenda stillingar vistaðar."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: it\n" "Language: it\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -296,6 +296,10 @@ msgstr "Copia host"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copia comando Linux" msgstr "Copia comando Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Copia nome"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Copia testo" msgstr "Copia testo"
@@ -552,7 +556,7 @@ msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 15m" msgid "Load Average 15m"
msgstr "" msgstr "Caricamento medio 15m"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 1m" msgid "Load Average 1m"
@@ -560,7 +564,7 @@ msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 5m" msgid "Load Average 5m"
msgstr "" msgstr "Caricamento medio 5m"
#. Short label for load average #. Short label for load average
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -1111,3 +1115,4 @@ msgstr "Configurazione YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Le impostazioni utente sono state aggiornate." msgstr "Le impostazioni utente sono state aggiornate."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ja\n" "Language: ja\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-03-13 10:13\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Japanese\n" "Language-Team: Japanese\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
@@ -296,6 +296,10 @@ msgstr "ホストをコピー"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Linuxコマンドをコピー" msgstr "Linuxコマンドをコピー"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "名前をコピー"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "テキストをコピー" msgstr "テキストをコピー"
@@ -1078,7 +1082,7 @@ msgstr "表示するのに十分なレコードを待っています"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Want to help improve our translations? Check <0>Crowdin</0> for details." msgid "Want to help improve our translations? Check <0>Crowdin</0> for details."
msgstr "翻訳をさらに良くするためにご協力いただけますか?詳細については<0>Crowdin</0>をご覧ください。" msgstr "翻訳をさらに良くするためにご協力をお願いします。詳細については<0>Crowdin</0>をご覧ください。"
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
@@ -1111,3 +1115,4 @@ msgstr "YAML設定"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "ユーザー設定が更新されました。" msgstr "ユーザー設定が更新されました。"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ko\n" "Language: ko\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-03-07 10:06\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Korean\n" "Language-Team: Korean\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
@@ -146,7 +146,7 @@ msgstr "평균"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "컨테이너의 평균 CPU 사용량" msgstr "Docker 컨테이너의 평균 CPU 사용량"
#. placeholder {0}: data.alert.unit #. placeholder {0}: data.alert.unit
#: src/components/alerts/alerts-system.tsx #: src/components/alerts/alerts-system.tsx
@@ -274,13 +274,13 @@ msgstr "클립보드에 복사됨"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Button to copy docker compose file content" msgctxt "Button to copy docker compose file content"
msgid "Copy docker compose" msgid "Copy docker compose"
msgstr "docker compose 복사" msgstr "docker compose 내용 복사"
#: 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 docker run command" msgctxt "Button to copy docker run command"
msgid "Copy docker run" msgid "Copy docker run"
msgstr "docker run 복사" msgstr "docker run 명령어 복사"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Environment variables" msgctxt "Environment variables"
@@ -296,6 +296,10 @@ msgstr "호스트 복사"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "리눅스 명령어 복사" msgstr "리눅스 명령어 복사"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "이름 복사"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "텍스트 복사" msgstr "텍스트 복사"
@@ -715,7 +719,7 @@ msgstr "일시 중지"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Paused" msgid "Paused"
msgstr "일시정지됨" msgstr "일시 정지됨"
#: 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."
@@ -1078,7 +1082,7 @@ msgstr "표시할 충분한 기록을 기다리는 중"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Want to help improve our translations? Check <0>Crowdin</0> for details." msgid "Want to help improve our translations? Check <0>Crowdin</0> for details."
msgstr "번역을 더 좋게 만드는 데 도움을 주시겠습니까? 자세한 내용은 <0>Crowdin</0>을 확인세요." msgstr "번역을 개선하는데 도움을 주시겠습니까? 자세한 내용은 <0>Crowdin</0>을 확인해 주세요."
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
@@ -1111,3 +1115,4 @@ msgstr "YAML 구성"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "사용자 설정이 업데이트되었습니다." msgstr "사용자 설정이 업데이트되었습니다."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: nl\n" "Language: nl\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Dutch\n" "Language-Team: Dutch\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -285,7 +285,7 @@ msgstr "Docker run kopiëren"
#: 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 "Env kopiëren"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Copy host" msgid "Copy host"
@@ -296,21 +296,25 @@ msgstr "Kopieer host"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopieer Linux-opdracht" msgstr "Kopieer Linux-opdracht"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopieer naam"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopieer tekst" msgstr "Kopieer 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 "Kopieer de installatie opdracht voor de agent hieronder, of registreer agenten automatisch met een <0>universele 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 "Kopieer de<0>docker-compose.yml</0> inhoud voor de agent hieronder, of registreer agenten automatisch met een <1>universele token</1>."
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy YAML" msgid "Copy YAML"
msgstr "" msgstr "YAML kopiëren"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "CPU" msgid "CPU"
@@ -352,7 +356,7 @@ msgstr "Verwijderen"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Delete fingerprint" msgid "Delete fingerprint"
msgstr "" msgstr "Vingerafdruk verwijderen"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Disk" msgid "Disk"
@@ -486,7 +490,7 @@ msgstr "Filter..."
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint" msgid "Fingerprint"
msgstr "" msgstr "Vingerafdruk"
#: src/components/alerts/alerts-system.tsx #: src/components/alerts/alerts-system.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -552,7 +556,7 @@ msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 15m" msgid "Load Average 15m"
msgstr "" msgstr "Gemiddelde Belasting 15m"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 1m" msgid "Load Average 1m"
@@ -560,7 +564,7 @@ msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 5m" msgid "Load Average 5m"
msgstr "" msgstr "Gemiddelde Belasting 5m"
#. Short label for load average #. Short label for load average
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -794,7 +798,7 @@ msgstr "Hervatten"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token" msgid "Rotate token"
msgstr "" msgstr "Roteer 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"
@@ -960,21 +964,21 @@ msgstr "Schakel thema"
#: 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/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Tokens & Fingerprints" msgid "Tokens & Fingerprints"
msgstr "" msgstr "Tokens & Vingerafdrukken"
#: 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 staan agenten toe om verbinding te maken met en te registreren. Vingerafdrukken zijn stabiele Ids deze zijn uniek voor elk systeem, ingesteld bij eerste verbinding."
#: 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 en vingerafdrukken worden gebruikt om WebSocket verbindingen te verifiëren naar de hub."
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 1 minute load average exceeds a threshold" msgid "Triggers when 1 minute load average exceeds a threshold"
@@ -982,11 +986,11 @@ msgstr ""
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 15 minute load average exceeds a threshold" msgid "Triggers when 15 minute load average exceeds a threshold"
msgstr "" msgstr "Triggert wanneer de 15 minuten gemiddelde belasting een drempelwaarde overschrijdt"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 5 minute load average exceeds a threshold" msgid "Triggers when 5 minute load average exceeds a threshold"
msgstr "" msgstr "Triggert wanneer de 5 minuten gemiddelde belasting een drempelwaarde overschrijdt"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when any sensor exceeds a threshold" msgid "Triggers when any sensor exceeds a threshold"
@@ -1019,7 +1023,7 @@ msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Universal token" msgid "Universal token"
msgstr "" msgstr "Universele token"
#. Context: System is up #. Context: System is up
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -1086,7 +1090,7 @@ msgstr "Webhook / Pushmeldingen"
#: 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 "Wanneer ingeschakeld kunnen agenten zich met dit token registreren zonder dat er vooraf een systeem aangemaakt hoeft te worden. Het token verloopt na één uur of bij herstart van de hub."
#: src/components/add-system.tsx #: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1111,3 +1115,4 @@ msgstr "YAML Configuratie"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Je gebruikersinstellingen zijn bijgewerkt." msgstr "Je gebruikersinstellingen zijn bijgewerkt."

View File

@@ -8,7 +8,7 @@ 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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\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"
@@ -296,6 +296,10 @@ msgstr "Kopier vert"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopier Linux-kommando" msgstr "Kopier Linux-kommando"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopier navn"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopier tekst" msgstr "Kopier tekst"
@@ -715,7 +719,7 @@ msgstr "Pause"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Paused" msgid "Paused"
msgstr "Pauset" msgstr "Satt på Pause"
#: 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."
@@ -1111,3 +1115,4 @@ msgstr "YAML Konfigurasjon"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Dine brukerinnstillinger har blitt oppdatert." msgstr "Dine brukerinnstillinger har blitt oppdatert."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: pl\n" "Language: pl\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
@@ -296,6 +296,10 @@ msgstr "Kopiuj host"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopiuj polecenie Linux" msgstr "Kopiuj polecenie Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopiuj nazwę"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopiuj tekst" msgstr "Kopiuj tekst"
@@ -398,7 +402,7 @@ msgstr "Dokumentacja"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Down" msgid "Down"
msgstr "" msgstr "Nie działa"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
@@ -407,7 +411,7 @@ msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Edit" msgid "Edit"
msgstr "" msgstr "Edytuj"
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/auth-form.tsx #: src/components/login/auth-form.tsx
@@ -595,7 +599,7 @@ msgstr "Zarządzaj preferencjami wyświetlania i powiadomień."
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Manual setup instructions" msgid "Manual setup instructions"
msgstr "" msgstr "Instrukcja ręcznej konfiguracji"
#. 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
@@ -703,7 +707,7 @@ msgstr "Hasło musi mieć co najmniej 8 znaków."
#: 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 "Hasło musi być mniejsze niż 72 bajty."
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
msgid "Password reset request received" msgid "Password reset request received"
@@ -811,7 +815,7 @@ msgstr "Zapisz ustawienia"
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Save system" msgid "Save system"
msgstr "" msgstr "Zapisz system"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Search" msgid "Search"
@@ -901,7 +905,7 @@ msgstr "Tabela"
#. Temperature label in systems table #. Temperature label in systems table
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Temp" msgid "Temp"
msgstr "" msgstr "Temperatura"
#: src/lib/utils.ts #: src/lib/utils.ts
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -1025,7 +1029,7 @@ msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Up" msgid "Up"
msgstr "" msgstr "Działa"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
@@ -1111,3 +1115,4 @@ msgstr "Konfiguracja YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Twoje ustawienia użytkownika zostały zaktualizowane." msgstr "Twoje ustawienia użytkownika zostały zaktualizowane."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: pt\n" "Language: pt\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Portuguese\n" "Language-Team: Portuguese\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -296,6 +296,10 @@ msgstr "Copiar host"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copiar comando Linux" msgstr "Copiar comando Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Copiar nome"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Copiar texto" msgstr "Copiar texto"
@@ -398,7 +402,7 @@ msgstr "Documentação"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Down" msgid "Down"
msgstr "" msgstr "“Desligado”"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
@@ -595,7 +599,7 @@ msgstr "Gerenciar preferências de exibição e notificação."
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Manual setup instructions" msgid "Manual setup instructions"
msgstr "" msgstr "Instruções de configuração manual"
#. 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
@@ -960,7 +964,7 @@ msgstr "Alternar tema"
#: 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 "Token" msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1025,7 +1029,7 @@ msgstr "Token universal"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Up" msgid "Up"
msgstr "" msgstr "“Ligado”"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
@@ -1111,3 +1115,4 @@ msgstr "Configuração YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "As configurações do seu usuário foram atualizadas." msgstr "As configurações do seu usuário foram atualizadas."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ru\n" "Language: ru\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Russian\n" "Language-Team: Russian\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
@@ -27,7 +27,7 @@ msgstr "{0, plural, one {# день} other {# дней}}"
#. 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} из {1} строк."
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
@@ -40,7 +40,7 @@ msgstr "1 час"
#. 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 мин"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "1 week" msgid "1 week"
@@ -53,7 +53,7 @@ msgstr "12 часов"
#. 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 мин"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "24 hours" msgid "24 hours"
@@ -66,7 +66,7 @@ msgstr "30 дней"
#. 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 мин"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -77,7 +77,7 @@ msgstr "Действия"
#: 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 "Активно"
#: src/components/routes/home.tsx #: src/components/routes/home.tsx
msgid "Active Alerts" msgid "Active Alerts"
@@ -116,7 +116,7 @@ msgstr "Агент"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Alert History" msgid "Alert History"
msgstr "" msgstr "История оповещений"
#: src/components/alerts/alert-button.tsx #: src/components/alerts/alert-button.tsx
#: src/components/alerts/alert-button.tsx #: src/components/alerts/alert-button.tsx
@@ -134,7 +134,7 @@ msgstr "Вы уверены, что хотите удалить {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 "Вы уверены?"
#: 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."
@@ -191,12 +191,12 @@ msgstr "Двоичный"
#: 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 "Биты (Кбит/с, Мбит/с, Гбит/с)"
#: 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 "Байты (Кбайт/с, Мбайт/с, Гбайт/с)"
#: src/components/charts/mem-chart.tsx #: src/components/charts/mem-chart.tsx
msgid "Cache / Buffers" msgid "Cache / Buffers"
@@ -213,11 +213,11 @@ msgstr "Внимание - возможная потеря данных"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Celsius (°C)" msgid "Celsius (°C)"
msgstr "" msgstr "Цельсий (°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 "Изменить единицы измерения для метрик."
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Change general application options." msgid "Change general application options."
@@ -259,7 +259,7 @@ msgstr "Подтвердите пароль"
#: src/components/routes/home.tsx #: src/components/routes/home.tsx
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr "Нет соединения"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
@@ -285,7 +285,7 @@ msgstr "Скопировать 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 "Скопировать env"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Copy host" msgid "Copy host"
@@ -296,21 +296,25 @@ msgstr "Копировать хост"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Копировать команду Linux" msgstr "Копировать команду Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Копировать имя"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Копировать текст" msgstr "Копировать текст"
#: 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 "Скопируйте команду для установки агента ниже, или зарегистрируйте агентов автоматически с помощью <0>универсального токена</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 "Скопируйте содержимое <0>docker-compose.yml</0> для агента ниже, или зарегистрируйте агентов автоматически с помощью <1>универсального токена</1>."
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy YAML" msgid "Copy YAML"
msgstr "" msgstr "Скопировать YAML"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "CPU" msgid "CPU"
@@ -329,7 +333,7 @@ msgstr "Создать аккаунт"
#. Context: date created #. Context: date created
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Created" msgid "Created"
msgstr "" msgstr "Создано"
#. Dark theme #. Dark theme
#: src/components/mode-toggle.tsx #: src/components/mode-toggle.tsx
@@ -352,7 +356,7 @@ msgstr "Удалить"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Delete fingerprint" msgid "Delete fingerprint"
msgstr "" msgstr "Удалить отпечаток"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Disk" msgid "Disk"
@@ -364,7 +368,7 @@ msgstr "Дисковый ввод/вывод"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Disk unit" msgid "Disk unit"
msgstr "" msgstr "Единицы измерения температуры"
#: src/lib/utils.ts #: src/lib/utils.ts
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -402,7 +406,7 @@ msgstr "Не в сети"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
msgstr "" msgstr "Длительность"
#: src/components/add-system.tsx #: src/components/add-system.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -447,7 +451,7 @@ msgstr "Существующие системы, не определенные
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Export" msgid "Export"
msgstr "" msgstr "Экспорт"
#: src/components/routes/settings/config-yaml.tsx #: src/components/routes/settings/config-yaml.tsx
msgid "Export configuration" msgid "Export configuration"
@@ -459,7 +463,7 @@ msgstr "Экспортируйте текущую конфигурацию си
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)" msgid "Fahrenheit (°F)"
msgstr "" msgstr "Фаренгейт (°F)"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Failed to authenticate" msgid "Failed to authenticate"
@@ -486,7 +490,7 @@ msgstr "Фильтр..."
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint" msgid "Fingerprint"
msgstr "" msgstr "Отпечаток"
#: src/components/alerts/alerts-system.tsx #: src/components/alerts/alerts-system.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -548,24 +552,24 @@ msgstr "Светлая"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Load Average" msgid "Load Average"
msgstr "" msgstr "Средняя загрузка"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 15m" msgid "Load Average 15m"
msgstr "" msgstr "Средняя загрузка за 15м"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 1m" msgid "Load Average 1m"
msgstr "" msgstr "Средняя загрузка за 1м"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 5m" msgid "Load Average 5m"
msgstr "" msgstr "Средняя загрузка за 5м"
#. Short label for load average #. Short label for load average
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Load Avg" msgid "Load Avg"
msgstr "" msgstr "Ср. загрузка"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Log Out" msgid "Log Out"
@@ -635,7 +639,7 @@ msgstr "Сетевой трафик публичных интерфейсов"
#. 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 "Единицы измерения скорости сети"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "No results found." msgid "No results found."
@@ -643,7 +647,7 @@ msgstr "Результаты не найдены."
#: 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 "Нет результатов."
#: 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
@@ -686,7 +690,7 @@ msgstr "Страница"
#. 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}"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
msgid "Pages / Settings" msgid "Pages / Settings"
@@ -715,7 +719,7 @@ msgstr "Пауза"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Paused" msgid "Paused"
msgstr "Приостановлено" msgstr "Пауза"
#: 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."
@@ -786,7 +790,7 @@ msgstr "Сбросить пароль"
#: 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 "Завершено"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Resume" msgid "Resume"
@@ -794,11 +798,11 @@ msgstr "Возобновить"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token" msgid "Rotate token"
msgstr "" msgstr "Обновить токен"
#: 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 "Строк на странице"
#: 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."
@@ -859,7 +863,7 @@ msgstr "Сортировать по"
#. 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 "Состояние"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Status" msgid "Status"
@@ -884,7 +888,7 @@ msgstr "Система"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "System load averages over time" msgid "System load averages over time"
msgstr "" msgstr "Средняя загрузка системы за время"
#: src/components/navbar.tsx #: src/components/navbar.tsx
msgid "Systems" msgid "Systems"
@@ -910,7 +914,7 @@ msgstr "Температура"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Temperature unit" msgid "Temperature unit"
msgstr "" msgstr "Температура"
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
@@ -934,7 +938,7 @@ msgstr "Это действие не может быть отменено. Эт
#: 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 "Это навсегда удалит все выбранные записи из базы данных."
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
@@ -960,33 +964,33 @@ 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
msgid "Token" msgid "Token"
msgstr "" msgstr "Токен"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Tokens & Fingerprints" msgid "Tokens & Fingerprints"
msgstr "" msgstr "Токены и отпечатки"
#: 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 "Токены позволяют агентам подключаться и регистрироваться. Отпечатки являются постоянными идентификаторами, уникальными для каждой системы, которые создаются при первом подключении."
#: 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 "Токены и отпечатки используются для аутентификации соединений WebSocket с хабом."
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 1 minute load average exceeds a threshold" msgid "Triggers when 1 minute load average exceeds a threshold"
msgstr "" msgstr "Срабатывает, когда средняя загрузка за 1 минуту превышает порог"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 15 minute load average exceeds a threshold" msgid "Triggers when 15 minute load average exceeds a threshold"
msgstr "" msgstr "Срабатывает, когда средняя загрузка за 15 минут превышает порог"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 5 minute load average exceeds a threshold" msgid "Triggers when 5 minute load average exceeds a threshold"
msgstr "" msgstr "Срабатывает, когда средняя загрузка за 5 минут превышает порог"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when any sensor exceeds a threshold" msgid "Triggers when any sensor exceeds a threshold"
@@ -1015,11 +1019,11 @@ msgstr "Срабатывает, когда использование любог
#. 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 "Параметры единиц измерения"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Universal token" msgid "Universal token"
msgstr "" msgstr "Универсальный токен"
#. Context: System is up #. Context: System is up
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -1058,7 +1062,7 @@ msgstr "Пользователи"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Value" msgid "Value"
msgstr "" msgstr "Значение"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "View" msgid "View"
@@ -1066,7 +1070,7 @@ msgstr "Вид"
#: 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 "Просмотреть 200 последних оповещений."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Visible Fields" msgid "Visible Fields"
@@ -1086,7 +1090,7 @@ msgstr "Webhook / Push уведомления"
#: 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 "Если включено, этот токен позволяет агентам регистрироваться самостоятельно без предварительного создания системы. Истекает через час или при перезапуске хаба."
#: src/components/add-system.tsx #: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1111,3 +1115,4 @@ msgstr "YAML конфигурация"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Ваши настройки пользователя были обновлены." msgstr "Ваши настройки пользователя были обновлены."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: sl\n" "Language: sl\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Slovenian\n" "Language-Team: Slovenian\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
@@ -296,6 +296,10 @@ msgstr "Kopiraj gostitelja"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopiraj Linux ukaz" msgstr "Kopiraj Linux ukaz"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopiraj ime"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopiraj besedilo" msgstr "Kopiraj besedilo"
@@ -1111,3 +1115,4 @@ msgstr "YAML nastavitev"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Vaše uporabniške nastavitve so posodobljene." msgstr "Vaše uporabniške nastavitve so posodobljene."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: sv\n" "Language: sv\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Swedish\n" "Language-Team: Swedish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -27,7 +27,7 @@ msgstr "{0, plural, one {# dag} other {# dagar}}"
#. 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) valda."
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
@@ -40,7 +40,7 @@ msgstr "1 timme"
#. 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 min"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "1 week" msgid "1 week"
@@ -53,7 +53,7 @@ msgstr "12 timmar"
#. 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"
@@ -66,7 +66,7 @@ msgstr "30 dagar"
#. 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/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -77,7 +77,7 @@ msgstr "Åtgärder"
#: 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/routes/home.tsx
msgid "Active Alerts" msgid "Active Alerts"
@@ -134,7 +134,7 @@ msgstr "Är du säker på att du vill ta bort {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 "Är du säker?"
#: 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."
@@ -191,12 +191,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"
@@ -213,11 +213,11 @@ msgstr "Varning - potentiell dataförlust"
#: 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 "Ändra enheter för mätvärden."
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Change general application options." msgid "Change general application options."
@@ -259,7 +259,7 @@ msgstr "Bekräfta lösenord"
#: src/components/routes/home.tsx #: src/components/routes/home.tsx
msgid "Connection is down" msgid "Connection is down"
msgstr "" msgstr "Ej ansluten"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
@@ -296,6 +296,10 @@ msgstr "Kopiera värd"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Kopiera Linux-kommando" msgstr "Kopiera Linux-kommando"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Kopiera namn"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Kopiera text" msgstr "Kopiera text"
@@ -310,7 +314,7 @@ msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy YAML" msgid "Copy YAML"
msgstr "" msgstr "Kopiera YAML"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "CPU" msgid "CPU"
@@ -329,7 +333,7 @@ msgstr "Skapa 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 "Skapad"
#. Dark theme #. Dark theme
#: src/components/mode-toggle.tsx #: src/components/mode-toggle.tsx
@@ -1111,3 +1115,4 @@ msgstr "YAML-konfiguration"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Dina användarinställningar har uppdaterats." msgstr "Dina användarinställningar har uppdaterats."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: tr\n" "Language: tr\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Turkish\n" "Language-Team: Turkish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -296,6 +296,10 @@ msgstr "Ana bilgisayarı kopyala"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Linux komutunu kopyala" msgstr "Linux komutunu kopyala"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Adı kopyala"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Metni kopyala" msgstr "Metni kopyala"
@@ -960,7 +964,7 @@ msgstr "Temayı değiştir"
#: 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 "Token" msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1111,3 +1115,4 @@ msgstr "YAML Yapılandırması"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Kullanıcı ayarlarınız güncellendi." msgstr "Kullanıcı ayarlarınız güncellendi."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: uk\n" "Language: uk\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-03-15 04:14\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Ukrainian\n" "Language-Team: Ukrainian\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
@@ -285,7 +285,7 @@ msgstr "Копіювати 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 "Копіювати env"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Copy host" msgid "Copy host"
@@ -296,6 +296,10 @@ msgstr "Копіювати хост"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Копіювати команду Linux" msgstr "Копіювати команду Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Копіювати імʼя"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Копіювати текст" msgstr "Копіювати текст"
@@ -1078,7 +1082,7 @@ msgstr "Очікування достатньої кількості запис
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Want to help improve our translations? Check <0>Crowdin</0> for details." msgid "Want to help improve our translations? Check <0>Crowdin</0> for details."
msgstr "Хочете допомогти нам зробити наші переклади ще кращими? Перегляньте <0>Crowdin</0> для отримання додаткової інформації." msgstr "Хочете допомогти покращити наші переклади? Подробиці на <0>Crowdin</0>."
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
@@ -1111,3 +1115,4 @@ msgstr "Конфігурація YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Ваші налаштування користувача були оновлені." msgstr "Ваші налаштування користувача були оновлені."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: vi\n" "Language: vi\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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Vietnamese\n" "Language-Team: Vietnamese\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
@@ -296,6 +296,10 @@ msgstr "Sao chép máy chủ"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Sao chép lệnh Linux" msgstr "Sao chép lệnh Linux"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "Sao chép tên"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "Sao chép văn bản" msgstr "Sao chép văn bản"
@@ -960,7 +964,7 @@ msgstr "Chuyển đổi chủ đề"
#: 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 "Token" msgstr ""
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1111,3 +1115,4 @@ msgstr "Cấu hình YAML"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "Cài đặt người dùng của bạn đã được cập nhật." msgstr "Cài đặt người dùng của bạn đã được cập nhật."

View File

@@ -8,7 +8,7 @@ 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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
@@ -296,6 +296,10 @@ msgstr "复制主机名"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "复制 Linux 安装命令" msgstr "复制 Linux 安装命令"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "复制名称"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "复制文本" msgstr "复制文本"
@@ -398,7 +402,7 @@ msgstr "文档"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Down" msgid "Down"
msgstr "停止" msgstr "离线"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
@@ -552,7 +556,7 @@ msgstr "系统负载"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 15m" msgid "Load Average 15m"
msgstr "15分钟负载平均值" msgstr "15分钟内的平均负载"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 1m" msgid "Load Average 1m"
@@ -560,7 +564,7 @@ msgstr "1分钟负载平均值"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Load Average 5m" msgid "Load Average 5m"
msgstr "5分钟负载平均值" msgstr "5分钟内的平均负载"
#. Short label for load average #. Short label for load average
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
@@ -986,7 +990,7 @@ msgstr "当15分钟负载平均值超过阈值时触发"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 5 minute load average exceeds a threshold" msgid "Triggers when 5 minute load average exceeds a threshold"
msgstr "当5分钟负载平均值超过阈值时触发" msgstr "当5分钟内的平均负载超过阈值时触发"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when any sensor exceeds a threshold" msgid "Triggers when any sensor exceeds a threshold"
@@ -1025,7 +1029,7 @@ msgstr "通用令牌"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Up" msgid "Up"
msgstr "启动" msgstr "在线"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
@@ -1111,3 +1115,4 @@ msgstr "YAML配置"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "您的用户设置已更新。" msgstr "您的用户设置已更新。"

View File

@@ -8,7 +8,7 @@ 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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Chinese Traditional, Hong Kong\n" "Language-Team: Chinese Traditional, Hong Kong\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
@@ -296,6 +296,10 @@ msgstr "複製主機"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "複製 Linux 指令" msgstr "複製 Linux 指令"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "複製名稱"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "複製文本" msgstr "複製文本"
@@ -1111,3 +1115,4 @@ msgstr "YAML配置"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "您的用戶設置已更新。" msgstr "您的用戶設置已更新。"

View File

@@ -8,7 +8,7 @@ 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-03-06 07:27\n" "PO-Revision-Date: 2025-08-02 01:36\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"
@@ -274,13 +274,13 @@ msgstr "已複製到剪貼簿"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Button to copy docker compose file content" msgctxt "Button to copy docker compose file content"
msgid "Copy docker compose" msgid "Copy docker compose"
msgstr "复制 docker compose" msgstr "複製 docker compose"
#: 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 docker run command" msgctxt "Button to copy docker run command"
msgid "Copy docker run" msgid "Copy docker run"
msgstr "复制 docker run" msgstr "複製 docker run"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Environment variables" msgctxt "Environment variables"
@@ -296,6 +296,10 @@ msgstr "複製主機"
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "複製 Linux 指令" msgstr "複製 Linux 指令"
#: src/components/systems-table/systems-table.tsx
msgid "Copy name"
msgstr "複製名稱"
#: src/components/copy-to-clipboard.tsx #: src/components/copy-to-clipboard.tsx
msgid "Copy text" msgid "Copy text"
msgstr "複製文字" msgstr "複製文字"
@@ -398,7 +402,7 @@ msgstr "文件"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
msgid "Down" msgid "Down"
msgstr "中斷" msgstr "離線"
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
msgid "Duration" msgid "Duration"
@@ -514,7 +518,7 @@ msgstr "網格"
#: 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"
msgid "Homebrew command" msgid "Homebrew command"
msgstr "Homebrew 令" msgstr "Homebrew 令"
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Host / IP" msgid "Host / IP"
@@ -715,7 +719,7 @@ msgstr "暫停"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Paused" msgid "Paused"
msgstr "已停" msgstr "已停"
#: 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."
@@ -794,7 +798,7 @@ msgstr "繼續"
#: src/components/routes/settings/tokens-fingerprints.tsx #: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token" msgid "Rotate token"
msgstr "輪令牌" msgstr "輪令牌"
#: 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"
@@ -970,11 +974,11 @@ msgstr "令牌和指紋"
#: 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 "令牌允許代理程式連和註冊。指紋是每個系統唯一穩定識別符,在首次連線時產生。"
#: 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 "令牌和指紋用於驗證到中心的WebSocket連接。" msgstr "令牌和指紋用於驗證到 Hub 的 WebSocket 連線。"
#: src/lib/utils.ts #: src/lib/utils.ts
msgid "Triggers when 1 minute load average exceeds a threshold" msgid "Triggers when 1 minute load average exceeds a threshold"
@@ -1078,7 +1082,7 @@ msgstr "等待足夠的記錄以顯示"
#: src/components/routes/settings/general.tsx #: src/components/routes/settings/general.tsx
msgid "Want to help improve our translations? Check <0>Crowdin</0> for details." msgid "Want to help improve our translations? Check <0>Crowdin</0> for details."
msgstr "想幫助我們改善翻譯嗎?查看<0>Crowdin</0>以取得更多詳細信息。" msgstr "想幫助我們改善翻譯嗎?查看<0>Crowdin</0>以取得更多詳細資訊。"
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
@@ -1086,13 +1090,13 @@ msgstr "Webhook / 推送通知"
#: 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 "啟用時,此令牌允許代理程式在沒有預先建立系統的情況下自動註冊。在一小時後或 Hub 重啟時過期。"
#: 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"
msgid "Windows command" msgid "Windows command"
msgstr "Windows 令" msgstr "Windows 令"
#. Disk write #. Disk write
#: src/components/routes/system.tsx #: src/components/routes/system.tsx
@@ -1111,3 +1115,4 @@ msgstr "YAML 設定檔"
#: src/components/routes/settings/layout.tsx #: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated." msgid "Your user settings have been updated."
msgstr "已更新您的使用者設定" msgstr "已更新您的使用者設定"

View File

@@ -50,6 +50,8 @@ export interface SystemInfo {
l5?: number l5?: number
/** load average 15 minutes */ /** load average 15 minutes */
l15?: number l15?: number
/** load average */
la?: [number, number, number]
/** operating system */ /** operating system */
o?: string o?: string
/** uptime */ /** uptime */
@@ -79,12 +81,15 @@ export interface SystemStats {
cpu: number cpu: number
/** peak cpu */ /** peak cpu */
cpum?: number cpum?: number
// TODO: remove these in future release in favor of la
/** load average 1 minute */ /** load average 1 minute */
l1?: number l1?: number
/** load average 5 minutes */ /** load average 5 minutes */
l5?: number l5?: number
/** load average 15 minutes */ /** load average 15 minutes */
l15?: number l15?: number
/** load average */
la?: [number, number, number]
/** total memory (gb) */ /** total memory (gb) */
m: number m: number
/** memory used (gb) */ /** memory used (gb) */
@@ -234,7 +239,14 @@ type ChartDataContainer = {
[key: string]: key extends "created" ? never : ContainerStats [key: string]: key extends "created" ? never : ContainerStats
} }
export interface SemVer {
major: number
minor: number
patch: number
}
export interface ChartData { export interface ChartData {
agentVersion: SemVer
systemStats: SystemStatsRecord[] systemStats: SystemStatsRecord[]
containerData: ChartDataContainer[] containerData: ChartDataContainer[]
orientation: "right" | "left" orientation: "right" | "left"

View File

@@ -3,7 +3,7 @@ package beszel
import "github.com/blang/semver" import "github.com/blang/semver"
const ( const (
Version = "0.12.0" Version = "0.12.1"
AppName = "beszel" AppName = "beszel"
) )

View File

@@ -16,7 +16,7 @@ It has a friendly web interface, simple configuration, and is ready to use out o
- **Lightweight**: Smaller and less resource-intensive than leading solutions. - **Lightweight**: Smaller and less resource-intensive than leading solutions.
- **Simple**: Easy setup with little manual configuration required. - **Simple**: Easy setup with little manual configuration required.
- **Docker stats**: Tracks CPU, memory, and network usage history for each container. - **Docker stats**: Tracks CPU, memory, and network usage history for each container.
- **Alerts**: Configurable alerts for CPU, memory, disk, bandwidth, temperature, and status. - **Alerts**: Configurable alerts for CPU, memory, disk, bandwidth, temperature, load average, and status.
- **Multi-user**: Users manage their own systems. Admins can share systems across users. - **Multi-user**: Users manage their own systems. Admins can share systems across users.
- **OAuth / OIDC**: Supports many OAuth2 providers. Password auth can be disabled. - **OAuth / OIDC**: Supports many OAuth2 providers. Password auth can be disabled.
- **Automatic backups**: Save to and restore from disk or S3-compatible storage. - **Automatic backups**: Save to and restore from disk or S3-compatible storage.

View File

@@ -31,10 +31,12 @@ if ! getent passwd "$SERVICE_USER" >/dev/null; then
--gecos "System user for $SERVICE" --gecos "System user for $SERVICE"
fi fi
# Enable docker # Enable docker (only if docker group exists)
if ! getent group docker | grep -q "$SERVICE_USER"; then if getent group docker >/dev/null 2>&1; then
echo "Adding $SERVICE_USER to docker group" if ! getent group docker | grep -q "$SERVICE_USER"; then
usermod -aG docker "$SERVICE_USER" echo "Adding $SERVICE_USER to docker group"
usermod -aG docker "$SERVICE_USER"
fi
fi fi
# Create config file if it doesn't already exist # Create config file if it doesn't already exist

View File

@@ -5,7 +5,7 @@ is_alpine() {
} }
is_openwrt() { is_openwrt() {
cat /etc/os-release | grep -q "OpenWrt" grep -qi "OpenWrt" /etc/os-release
} }
# If SELinux is enabled, set the context of the binary # If SELinux is enabled, set the context of the binary
@@ -227,8 +227,8 @@ if [ "$UNINSTALL" = true ]; then
rm -f /var/log/beszel-agent.log /var/log/beszel-agent.err rm -f /var/log/beszel-agent.log /var/log/beszel-agent.err
elif is_openwrt; then elif is_openwrt; then
echo "Stopping and disabling the agent service..." echo "Stopping and disabling the agent service..."
service beszel-agent stop /etc/init.d/beszel-agent stop
service beszel-agent disable /etc/init.d/beszel-agent disable
echo "Removing the OpenWRT service files..." echo "Removing the OpenWRT service files..."
rm -f /etc/init.d/beszel-agent rm -f /etc/init.d/beszel-agent
@@ -288,13 +288,13 @@ package_installed() {
} }
# Check for package manager and install necessary packages if not installed # Check for package manager and install necessary packages if not installed
if is_alpine; then if package_installed apk; then
if ! package_installed tar || ! package_installed curl || ! package_installed coreutils; then if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
apk update apk update
apk add tar curl coreutils shadow apk add tar curl coreutils shadow
fi fi
elif is_openwrt; then elif package_installed opkg; then
if ! package_installed tar || ! package_installed curl || ! package_installed coreutils; then if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
opkg update opkg update
opkg install tar curl coreutils opkg install tar curl coreutils
fi fi
@@ -335,11 +335,10 @@ else
fi fi
# Create a dedicated user for the service if it doesn't exist # Create a dedicated user for the service if it doesn't exist
echo "Creating a dedicated user for the Beszel Agent service..."
if is_alpine; then if is_alpine; then
if ! id -u beszel >/dev/null 2>&1; then if ! id -u beszel >/dev/null 2>&1; then
echo "Creating a dedicated group for the Beszel Agent service..."
addgroup beszel addgroup beszel
echo "Creating a dedicated user for the Beszel Agent service..."
adduser -S -D -H -s /sbin/nologin -G beszel beszel adduser -S -D -H -s /sbin/nologin -G beszel beszel
fi fi
# Add the user to the docker group to allow access to the Docker socket if group docker exists # Add the user to the docker group to allow access to the Docker socket if group docker exists
@@ -347,10 +346,37 @@ if is_alpine; then
echo "Adding beszel to docker group" echo "Adding beszel to docker group"
usermod -aG docker beszel usermod -aG docker beszel
fi fi
elif is_openwrt; then
# Create beszel group first if it doesn't exist (check /etc/group directly)
if ! grep -q "^beszel:" /etc/group >/dev/null 2>&1; then
echo "beszel:x:999:" >> /etc/group
fi
# Create beszel user if it doesn't exist (double-check to prevent duplicates)
if ! id -u beszel >/dev/null 2>&1 && ! grep -q "^beszel:" /etc/passwd >/dev/null 2>&1; then
echo "beszel:x:999:999::/nonexistent:/bin/false" >> /etc/passwd
fi
# Add the user to the docker group if docker group exists and user is not already in it
if grep -q "^docker:" /etc/group >/dev/null 2>&1; then
echo "Adding beszel to docker group"
# Check if beszel is already in docker group
if ! grep "^docker:" /etc/group | grep -q "beszel"; then
# Add beszel to docker group by modifying /etc/group
# Handle both cases: group with existing members and group without members
if grep "^docker:" /etc/group | grep -q ":.*:.*$"; then
# Group has existing members, append with comma
sed -i 's/^docker:\([^:]*:[^:]*:\)\(.*\)$/docker:\1\2,beszel/' /etc/group
else
# Group has no members, just append
sed -i 's/^docker:\([^:]*:[^:]*:\)$/docker:\1beszel/' /etc/group
fi
fi
fi
else else
if ! id -u beszel >/dev/null 2>&1; then if ! id -u beszel >/dev/null 2>&1; then
echo "Creating a dedicated user for the Beszel Agent service..."
useradd --system --home-dir /nonexistent --shell /bin/false beszel useradd --system --home-dir /nonexistent --shell /bin/false beszel
fi fi
# Add the user to the docker group to allow access to the Docker socket if group docker exists # Add the user to the docker group to allow access to the Docker socket if group docker exists
@@ -427,6 +453,11 @@ set_selinux_context
# Cleanup # Cleanup
rm -rf "$TEMP_DIR" rm -rf "$TEMP_DIR"
# Make sure /etc/machine-id exists for persistent fingerprint
if [ ! -f /etc/machine-id ]; then
cat /proc/sys/kernel/random/uuid | tr -d '-' > /etc/machine-id
fi
# Check for NVIDIA GPUs and grant device permissions for systemd service # Check for NVIDIA GPUs and grant device permissions for systemd service
detect_nvidia_devices() { detect_nvidia_devices() {
local devices="" local devices=""
@@ -546,10 +577,7 @@ start_service() {
procd_set_param command /opt/beszel-agent/beszel-agent procd_set_param command /opt/beszel-agent/beszel-agent
procd_set_param user beszel procd_set_param user beszel
procd_set_param pidfile /var/run/beszel-agent.pid procd_set_param pidfile /var/run/beszel-agent.pid
procd_set_param env PORT="$PORT" procd_set_param env PORT="$PORT" KEY="$KEY" TOKEN="$TOKEN" HUB_URL="$HUB_URL"
procd_set_param env KEY="$KEY"
procd_set_param env TOKEN="$TOKEN"
procd_set_param env HUB_URL="$HUB_URL"
procd_set_param stdout 1 procd_set_param stdout 1
procd_set_param stderr 1 procd_set_param stderr 1
procd_close_instance procd_close_instance
@@ -573,10 +601,10 @@ EOF
# Enable the service # Enable the service
chmod +x /etc/init.d/beszel-agent chmod +x /etc/init.d/beszel-agent
service beszel-agent enable /etc/init.d/beszel-agent enable
# Start the service # Start the service
service beszel-agent restart /etc/init.d/beszel-agent restart
# Auto-update service for OpenWRT using a crontab job # Auto-update service for OpenWRT using a crontab job
if [ "$AUTO_UPDATE_FLAG" = "true" ]; then if [ "$AUTO_UPDATE_FLAG" = "true" ]; then
@@ -604,9 +632,9 @@ EOF
esac esac
# Check service status # Check service status
if ! service beszel-agent running >/dev/null 2>&1; then if ! /etc/init.d/beszel-agent running >/dev/null 2>&1; then
echo "Error: The Beszel Agent service is not running." echo "Error: The Beszel Agent service is not running."
service beszel-agent status /etc/init.d/beszel-agent status
exit 1 exit 1
fi fi

View File

@@ -217,13 +217,6 @@ function Update-ServicePath {
throw "NSSM is not available in PATH and no valid NSSMPath was provided" throw "NSSM is not available in PATH and no valid NSSMPath was provided"
} }
# Stop the service
Write-Host "Stopping beszel-agent service..."
& $nssmCommand stop beszel-agent
if ($LASTEXITCODE -ne 0) {
Write-Host "Warning: Failed to stop service, continuing anyway..." -ForegroundColor Yellow
}
# Update the application path # Update the application path
& $nssmCommand set beszel-agent Application $NewAgentPath & $nssmCommand set beszel-agent Application $NewAgentPath
if ($LASTEXITCODE -ne 0) { if ($LASTEXITCODE -ne 0) {
@@ -233,7 +226,25 @@ function Update-ServicePath {
Write-Host "Service path updated to: $NewAgentPath" Write-Host "Service path updated to: $NewAgentPath"
# Start the service # Start the service
Start-BeszelAgentService -NSSMPath $nssmCommand
}
# Function to start and monitor the service
function Start-BeszelAgentService {
param (
[string]$NSSMPath = ""
)
Write-Host "Starting beszel-agent service..." Write-Host "Starting beszel-agent service..."
# Determine the NSSM executable to use
$nssmCommand = "nssm"
if ($NSSMPath -and (Test-Path $NSSMPath)) {
$nssmCommand = $NSSMPath
} elseif (-not (Test-CommandExists "nssm")) {
throw "NSSM is not available in PATH and no valid NSSMPath was provided"
}
& $nssmCommand start beszel-agent & $nssmCommand start beszel-agent
$startResult = $LASTEXITCODE $startResult = $LASTEXITCODE
@@ -255,7 +266,7 @@ function Update-ServicePath {
if ($serviceStatus -eq "SERVICE_RUNNING") { if ($serviceStatus -eq "SERVICE_RUNNING") {
$serviceStarted = $true $serviceStarted = $true
Write-Host "Success! The beszel-agent service is now running with the updated path." -ForegroundColor Green Write-Host "Success! The beszel-agent service is now running." -ForegroundColor Green
} }
elseif ($serviceStatus -like "*PENDING*") { elseif ($serviceStatus -like "*PENDING*") {
Write-Host "Service is still starting (status: $serviceStatus)... waiting" -ForegroundColor Yellow Write-Host "Service is still starting (status: $serviceStatus)... waiting" -ForegroundColor Yellow
@@ -273,7 +284,7 @@ function Update-ServicePath {
} }
} else { } else {
# NSSM start command was successful # NSSM start command was successful
Write-Host "Success! The beszel-agent service is running with the updated path." -ForegroundColor Green Write-Host "Success! The beszel-agent service is running properly." -ForegroundColor Green
} }
} }
@@ -287,7 +298,6 @@ $isAdmin = Test-Admin
try { try {
Write-Host "Beszel Agent Upgrade Script" -ForegroundColor Cyan Write-Host "Beszel Agent Upgrade Script" -ForegroundColor Cyan
Write-Host "===========================" -ForegroundColor Cyan Write-Host "===========================" -ForegroundColor Cyan
Write-Host ""
# First: Check if service exists (doesn't require admin) # First: Check if service exists (doesn't require admin)
$existingService = Get-Service -Name "beszel-agent" -ErrorAction SilentlyContinue $existingService = Get-Service -Name "beszel-agent" -ErrorAction SilentlyContinue
@@ -312,6 +322,13 @@ try {
Write-Host "Retrieving current service configuration..." Write-Host "Retrieving current service configuration..."
$currentConfig = Get-ServiceConfiguration -NSSMPath $nssmPath $currentConfig = Get-ServiceConfiguration -NSSMPath $nssmPath
# Stop the service before upgrade
Write-Host "Stopping beszel-agent service..."
& $nssmPath stop beszel-agent
if ($LASTEXITCODE -ne 0) {
Write-Host "Warning: Failed to stop service, continuing anyway..." -ForegroundColor Yellow
}
# Upgrade the agent (doesn't require admin) # Upgrade the agent (doesn't require admin)
Write-Host "Upgrading beszel-agent..." Write-Host "Upgrading beszel-agent..."
$newAgentPath = $null $newAgentPath = $null
@@ -340,7 +357,8 @@ try {
# Check if the path has changed # Check if the path has changed
if ($currentConfig.CurrentPath -eq $newAgentPath) { if ($currentConfig.CurrentPath -eq $newAgentPath) {
Write-Host "Agent path has not changed. Service update not needed." -ForegroundColor Green Write-Host "Agent path has not changed. Restarting service..." -ForegroundColor Green
Start-BeszelAgentService -NSSMPath $nssmPath
Write-Host "Upgrade completed successfully!" -ForegroundColor Green Write-Host "Upgrade completed successfully!" -ForegroundColor Green
exit 0 exit 0
} }