Compare commits

..

112 Commits

Author SHA1 Message Date
Henry Dollman
40cc1a875e release 0.9.1 2025-01-05 18:03:03 -05:00
Henry Dollman
1ac165d7d3 include stats in error log when encoding stats fails 2025-01-05 17:58:38 -05:00
Henry Dollman
9619e6cf89 update go dependencies 2025-01-05 17:57:43 -05:00
Henry Dollman
fc31cefd4c update initial settings with minimum log level and use new SetRandomPassword method 2025-01-05 17:56:42 -05:00
Henry Dollman
5fd9010b39 add slovenian and danish 2025-01-05 17:43:19 -05:00
hank
c2e3dd5ab1 New Crowdin updates (#352)
* New translations en.po (French)

* New translations en.po (Polish)

* New translations en.po (Spanish)

* New translations en.po (Danish)

Co-authored-by: Morten Johansen <mj@emsg.net>
Co-authored-by: Kamil <32385799+nkkfs@users.noreply.github.com>
2025-01-05 17:13:25 -05:00
Henry Dollman
8e531e6b3c fix: handle duplicate GPU names (#361) 2025-01-05 16:40:22 -05:00
Henry Dollman
527e6b57d5 remove CGO_ENABLED from build commands in Makefile 2025-01-05 12:27:53 -05:00
Chuangbo Li
245fa538e9 chore: upgrade gopsutil to fix memory leak on ARM Mac (#367) 2025-01-04 18:16:57 -05:00
Henry Dollman
e14a851398 fix: armv6l detection in install-agent script (#364) 2025-01-02 17:10:21 -05:00
Chuangbo Li
0c9bc47a3a refactor: simplify startSystemUpdateTicker using time.Tick (#347)
According to the Go 1.23 documentation, the garbage collector can now recover unreferenced tickers created with time.Tick, making time.NewTicker method unnecessary in most cases.

Reference:

* time.Tick: https://pkg.go.dev/time#Tick
2024-12-28 17:07:32 -05:00
Chuangbo Li
19b4477a75 fix: json.Unmarshal not resetting struct fields (#345)
The json.Unmarshal function was not properly resetting the Stats struct fields between iterations in the loop. This caused incorrect values to be retained from previous iterations, leading to unexpected behavior.

This commit fixes the issue by zero the struct in each loop iteration, ensures that each unmarshaling operation starts with a clean struct, preventing value carryover.
2024-12-28 17:06:37 -05:00
hank
558d051c42 New Crowdin updates (#330)
* New translations en.po (Slovenian)
* New translations en.po (Swedish)
* New translations en.po (Ukrainian)

Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: stanol <stanol777@gmail.com>
2024-12-27 11:11:05 -05:00
Arsierl
9c8528bae1 Update install-agent.sh script to support Alpine (OpenRC) (#320)
* Partial amendment

* Update install-agent.sh

* Update install-agent.sh

Fix if is_alpine function with user creation and permission issues

* Update install-agent.sh

Adding an Uninstallation Process to Alpine
Using deluser instead of userdel in Alpine
2024-12-18 17:41:15 -05:00
Henry Dollman
229ef19376 update readme 2024-12-17 20:00:16 -05:00
Henry Dollman
e5fb4d611a release 0.9.0 2024-12-17 18:55:02 -05:00
Henry Dollman
bc9dc9704c remove log from initial-settings migration 2024-12-17 18:54:52 -05:00
Henry Dollman
e88eb1a884 update docs link in command palette 2024-12-17 17:42:58 -05:00
Henry Dollman
d8f3206e8b update go dependencies 2024-12-17 17:25:01 -05:00
Henry Dollman
729d306157 update js dependencies 2024-12-17 17:24:38 -05:00
Henry Dollman
c35df48754 update language files 2024-12-17 17:20:44 -05:00
hank
0f97f37a79 New Crowdin updates (#329)
* New translations en.po (Russian)

* New translations en.po (Turkish)

* New translations en.po (Ukrainian)

* New translations en.po (Czech)

* New translations en.po (French)

* New translations en.po (Spanish)

* New translations en.po (Arabic)

* New translations en.po (German)

* New translations en.po (Italian)

* New translations en.po (Japanese)

* New translations en.po (Korean)

* New translations en.po (Dutch)

* New translations en.po (Polish)

* New translations en.po (Portuguese)

* New translations en.po (Chinese Simplified)

* New translations en.po (Vietnamese)

* New translations en.po (Croatian)

* New translations en.po (Chinese Traditional, Hong Kong)

* New translations en.po (Persian)
2024-12-17 17:17:33 -05:00
Henry Dollman
b08219dacf refactor agent gpu code to make it easier to add intel / jetson 2024-12-17 17:12:58 -05:00
Henry Dollman
dd10fb97c0 web ui style tweaks 2024-12-17 15:47:49 -05:00
Henry Dollman
87354df2de update po files, add farsi and swedish 2024-12-17 15:36:09 -05:00
hank
1bd04498b9 New Crowdin updates (#322) 2024-12-17 15:31:28 -05:00
Henry Dollman
52394bc99b update security policy 2024-12-16 14:42:10 -05:00
Henry Dollman
add85e9747 add generate-locales to makefile 2024-12-16 13:48:17 -05:00
Henry Dollman
e82986adff add dev tasks to makefile 2024-12-15 15:35:16 -05:00
Henry Dollman
f201267e4e generate first user username from email 2024-12-09 17:34:04 -05:00
Henry Dollman
9db41f8830 update translations 2024-12-09 17:29:03 -05:00
Henry Dollman
ba64c59632 add autoComplete="off" to login honeypot field 2024-12-09 17:07:43 -05:00
Henry Dollman
d2626d8337 update translations 2024-12-09 17:04:40 -05:00
hank
ded1090190 New Crowdin updates (#318)
* New translations en.po (Arabic)

* New translations en.po (Dutch)

Co-authored-by: Mathy Vandersmissen <mathy.vds@gmail.com>
2024-12-09 16:24:45 -05:00
hank
1114baaaa0 New Crowdin updates (#313)
* New translations en.po (German)

* New translations en.po (Czech)

Co-authored-by: doluk <69309597+doluk@users.noreply.github.com>
Co-authored-by: NickAss512 <143963746+NickAss512@users.noreply.github.com>
2024-12-08 18:18:53 -05:00
Henry Dollman
cf13c1c671 Merge branch '0xMMMMMM-main' 2024-12-08 18:09:20 -05:00
Henry Dollman
e70de6a59e systems table updates
- component refactoring
- style updates for "view" menu and grid
2024-12-08 18:08:54 -05:00
0xMMMMMM
5110eaf10f refactor: reorganize systems table options into single dropdown
Combines view type, sort by and visible fields into a single dropdown menu for better organization.
2024-12-08 06:26:12 +07:00
0xMMMMMM
0234682720 feat: add grid view option for systems table
- Add toggle button to switch between table and grid layouts
- Implement card-based grid view with system metrics
- Add sort dropdown menu for grid view
- Display system status, metrics with icons and labels
- Improve handling of long system names
- Maintain consistent sorting and filtering between views
- Persist view preference in localStorage
2024-12-06 15:09:37 +07:00
Henry Dollman
80a7322fa1 update readme screenshot 2024-12-04 18:10:27 -05:00
Henry Dollman
59bdc0ce0d add USER_CREATION env var and update migrations 2024-12-04 17:36:36 -05:00
Spedon
a288d0925b chore: enhance script usability (#311)
- Add a `RestartSec` directive to the service configuration for both agent and hub scripts

Signed-off-by: Spedon Wen <realsped0n@outlook.com>
2024-12-03 17:29:19 -05:00
hank
e7d2f0d82b New Crowdin updates (#308)
* New translations en.po

Co-authored-by: NickAss512 <143963746+NickAss512@users.noreply.github.com>
2024-12-02 15:14:20 -05:00
Henry Dollman
825d8269ff add Czech language and update locale files 2024-12-01 18:21:34 -05:00
hank
f7775d173a New Crowdin updates (#301)
* New translations en.po (Turkish)

* New translations en.po (Czech)

Co-authored-by: Ramazan Sancar <ramazansancar4545@gmail.com>
Co-authored-by: NickAss512 <@NickAss512>
2024-12-01 16:11:25 -05:00
Henry Dollman
58bced5f09 rm 'auth providers' links - dedicated page removed from pocketbase 2024-11-29 17:24:42 -05:00
Henry Dollman
6e08507dde remove todo comments 2024-11-29 17:16:40 -05:00
Henry Dollman
617a03fc15 upgrade go deps 2024-11-29 17:08:59 -05:00
Henry Dollman
f86bda304d pocketbase js updates 2024-11-29 17:03:31 -05:00
Henry Dollman
1d414e659b use auth logos from pocketbase 2024-11-29 16:57:18 -05:00
Henry Dollman
87f7390eca use new batch api for setting global alerts 2024-11-27 17:07:44 -05:00
Henry Dollman
ed01752546 update admin creation for pocketbase 0.23.0 2024-11-27 16:32:23 -05:00
Henry Dollman
46002a2171 remove echo dependency 2024-11-24 18:34:42 -05:00
Henry Dollman
14716d36a6 refactor go code for pocketbase 0.23.0 (#300) 2024-11-24 18:15:24 -05:00
Henry Dollman
b4bc8a31aa add check / reset for invalid disk i/o rates 2024-11-24 15:56:12 -05:00
hank
b01fc316c3 New Crowdin updates (#293)
* New translations en.po (Turkish)

* New translations en.po (Russian)

* New translations en.po (Ukrainian)

Co-authored-by: zoixc <113115585+zoixc@users.noreply.github.com>
Co-authored-by: stanol <stanol777@gmail.com>
2024-11-22 13:11:26 -05:00
Henry Dollman
4479249ac7 feat: add --china-mirrors flag when locale is zh-CN in install command 2024-11-19 14:42:56 -05:00
Henry Dollman
0529837ac8 update agent install script arg parsing 2024-11-19 14:31:50 -05:00
Henry Dollman
d51ffa17ed Merge branch 'main' of https://github.com/Alice39s/beszel 2024-11-19 13:45:50 -05:00
al1cE
c434a44bc4 feat: use --china-mirrors instead of -c 2024-11-19 13:30:40 +09:00
al1cE
7b5ac23a4b feat(install): enhance install-agent.sh with China mirror support
- Add `-c` flag to use GitHub mirror (ghp.ci) for mainland China users
- Implement checksum verification for downloaded files
- Add progress bar for file downloads

This change improves installation reliability and user experience,
especially for users in regions (China mainland etc.) with limited GitHub access.
2024-11-19 12:56:35 +09:00
Henry Dollman
87ef769086 Merge branch 'main' of https://github.com/wwng2333/beszel 2024-11-17 11:23:06 -05:00
D
bcefb8e43c fix IPv6 connection problem
use net.JoinHostPort to fix ipv6 address at createSystemConnection
2024-11-17 16:34:05 +08:00
Henry Dollman
a1641c5bcc change ssh related timeouts from 5s to 4s 2024-11-15 16:29:36 -05:00
Henry Dollman
e6839480d9 use sync.Map for system connections 2024-11-15 15:35:26 -05:00
hank
4e64d9efad New Crowdin updates (#285)
* New translations en.po (Dutch)

* New translations en.po (Ukrainian)

* New translations en.po (German)

Co-authored-by: Mathy Vandersmissen <mathy.vds@gmail.com>
Co-authored-by: stanol <stanol777@gmail.com>
Co-authored-by: Henry <henry@obamium.net>
2024-11-14 15:28:38 -05:00
hank
d68f4514cc New Crowdin updates (#282)
* New translations en.po (Chinese Simplified)

Co-authored-by: Sliots <Sliots@hotmail.com>
2024-11-13 12:02:29 -05:00
Henry Dollman
8a69c09939 release 0.8.0 2024-11-12 18:28:25 -05:00
Henry Dollman
e87af81db4 change spinner to visibility hidden after chart loads 2024-11-12 18:25:27 -05:00
Henry Dollman
6043c59da8 update translations 2024-11-12 18:19:37 -05:00
Henry Dollman
4cb7b97416 change podman socket path to use current uid 2024-11-12 18:14:43 -05:00
Henry Dollman
b1db450e00 enable gpu monitoring by default 2024-11-12 18:13:57 -05:00
Henry Dollman
2e8ac98924 Improve disk discovery slightly by checking partition labels 2024-11-12 18:11:44 -05:00
Henry Dollman
529a628368 remove stopped containers from net chart 2024-11-12 17:33:18 -05:00
Henry Dollman
8a2e821c8f style updates 2024-11-12 15:03:15 -05:00
Henry Dollman
3cd11d6bc4 improve podman support (#211) 2024-11-12 11:59:56 -05:00
Henry Dollman
db092d2440 Merge branch 'main' of github.com:henrygd/beszel 2024-11-11 16:56:16 -05:00
Henry Dollman
a4a7c91fc1 dark mode tweaks 2024-11-11 16:56:10 -05:00
hank
543fd44cb2 New Crowdin updates (#273)
* New translations en.po (Chinese Simplified)

Co-authored-by: D <17147265+wwng2333@users.noreply.github.com>
2024-11-11 13:32:58 -05:00
Henry Dollman
eab262c3f7 dark theme updates 2024-11-11 12:55:44 -05:00
Henry Dollman
52bde8ea6d release 0.7.4 2024-11-08 20:32:27 -05:00
Henry Dollman
03de73560c add gpu power consumption chart 2024-11-08 20:31:22 -05:00
Henry Dollman
bcb7de1b9a add Dutch language 2024-11-08 19:02:49 -05:00
hank
ca94bd32f2 New Crowdin updates (#272)
* New translations en.po (Dutch)

* New translations en.po (Dutch)

* New translations en.po (Dutch)

Co-authored-by: Mathy Vandersmissen <mathy.vds@gmail.com>
2024-11-08 18:07:05 -05:00
Henry Dollman
cd10727795 gpu usage and vram charts 2024-11-08 18:00:30 -05:00
Henry Dollman
8262a9a45b progress on gpu metrics 2024-11-08 16:52:50 -05:00
hank
b433437636 New Crowdin updates (#271)
* New translations en.po (Chinese Simplified)

* New translations en.po (Chinese Simplified)

Co-authored-by: D <17147265+wwng2333@users.noreply.github.com>
2024-11-07 15:57:07 -05:00
Henry Dollman
02825ed109 add Polish and Croatian languages 2024-11-07 13:11:58 -05:00
Henry Dollman
a97e6149bb add option for automatic updates to install-agent.sh (#268) 2024-11-07 13:02:01 -05:00
hank
946b1e7f54 New Crowdin updates (#259)
* New translations en.po (Polish)

* New translations en.po (Polish)

* New translations en.po (Polish)

* New translations en.po (Polish)

* New translations en.po (Croatian)

* New translations en.po (Croatian)

* New translations en.po (French)

* New translations en.po (French)

Co-authored-by: Dino Horvat <73183619+DinoHorvat96@users.noreply.github.com>
Co-authored-by: dymek37 <122745160+dymek37@users.noreply.github.com>
Co-authored-by: Adam Gąsowski <gander@users.noreply.github.com>
Co-authored-by: Damien Fajole <60252259+damsdev1@users.noreply.github.com>
2024-11-06 19:06:16 -05:00
Henry Dollman
b5ed7cd555 fix display of values under 1 GB in disk usage chart (closes #261) 2024-11-06 13:52:35 -05:00
Henry Dollman
233349fb2a release 0.7.3 2024-11-04 21:33:19 -05:00
Henry Dollman
c54e6ff0ea po file formatting 2024-11-04 21:33:05 -05:00
Henry Dollman
98c4102f72 revert to previous behavior for displaying stopped containers
* Previously, a stopped container was completely removed from the chart/tooltip during the time period when it was not running. In the last few releases, the container remained in the chart with zero values if it was running at any time during the chart's duration. This restores the previous functionality.
2024-11-04 21:24:44 -05:00
hank
640ee7a88e New translations en.po (Polish) (#257) 2024-11-04 20:57:01 -05:00
Henry Dollman
8a85246a0b set lang in activateLocale func instead of dynamicActivate 2024-11-04 20:56:33 -05:00
Henry Dollman
655bfc95ca add ability to specify partition for extra disk using folder name 2024-11-04 20:52:27 -05:00
hank
37a066e6bd New Crowdin updates (#256)
* New translations en.po (French)

* New translations en.po (Spanish)

* New translations en.po (Arabic)

* New translations en.po (German)

* New translations en.po (Japanese)

* New translations en.po (Korean)

* New translations en.po (Portuguese)

* New translations en.po (Russian)

* New translations en.po (Turkish)

* New translations en.po (Ukrainian)

* New translations en.po (Chinese Simplified)

* New translations en.po (Vietnamese)

* New translations en.po (Chinese Traditional, Hong Kong)

* New translations en.po (Italian)
2024-11-04 16:01:01 -05:00
Henry Dollman
9e959a6b7b update translations 2024-11-04 15:42:23 -05:00
Henry Dollman
2b6560b9e1 update translation messages on build
* add lingui extract to build script
* delete translation ts files and add to gitignore
2024-11-04 15:34:59 -05:00
hank
d8836d53bf New Crowdin updates (#252)
* New translations en.po (French)

* New translations en.po (Spanish)

* New translations en.po (Arabic)

* New translations en.po (German)

* New translations en.po (Japanese)

* New translations en.po (Korean)

* New translations en.po (Portuguese)

* New translations en.po (Russian)

* New translations en.po (Turkish)

* New translations en.po (Ukrainian)

* New translations en.po (Chinese Simplified)

* New translations en.po (Vietnamese)

* New translations en.po (Chinese Traditional, Hong Kong)

* New translations en.po (Italian)
2024-11-04 14:30:27 -05:00
Henry Dollman
aa15876aa2 fix: read/write labels swapped for extra disk charts (#254) 2024-11-04 14:29:10 -05:00
Henry Dollman
7ca960b521 update system view grid to min xl 2024-11-04 14:18:08 -05:00
Henry Dollman
4eaedcf825 release 0.7.2 2024-11-03 15:31:39 -05:00
Henry Dollman
b337ba1d7f fix subheading for memory chart 2024-11-03 15:30:35 -05:00
hank
c9b72f724f New translations en.po (Ukrainian) (#251)
Co-authored-by: stanol <stanol777@gmail.com>
2024-11-03 15:02:59 -05:00
Henry Dollman
35d8996e00 release 0.7.1 2024-11-03 12:10:53 -05:00
Henry Dollman
6e61c5f1e4 update go deps 2024-11-03 12:10:17 -05:00
Henry Dollman
6bb147c349 fix en fallback if detected user locale is missing (#247) 2024-11-03 11:59:49 -05:00
hank
3668aa4e8e New Crowdin updates (#246)
* New translations en.po (French)

* New translations en.po (Spanish)

* New translations en.po (Arabic)

* New translations en.po (German)

* New translations en.po (Japanese)

* New translations en.po (Korean)

* New translations en.po (Portuguese)

* New translations en.po (Russian)

* New translations en.po (Turkish)

* New translations en.po (Ukrainian)

* New translations en.po (Chinese Simplified)

* New translations en.po (Vietnamese)

* New translations en.po (Chinese Traditional, Hong Kong)

* New translations en.po (Italian)

* New translations en.po (Ukrainian)
2024-11-03 11:28:27 -05:00
Henry Dollman
4c324bff73 release 0.7.0 2024-11-02 14:50:59 -04:00
Henry Dollman
741575df15 revert tweaks for old docker. needs more testing. 2024-11-02 14:43:35 -04:00
121 changed files with 13452 additions and 5459 deletions

2
.gitignore vendored
View File

@@ -13,3 +13,5 @@ beszel/cmd/agent/agent
node_modules node_modules
beszel/build beszel/build
*timestamp* *timestamp*
.swc
beszel/site/src/locales/**/*.ts

View File

@@ -2,8 +2,6 @@
## Reporting a Vulnerability ## Reporting a Vulnerability
If you find a vulnerability in the latest version, please email me directly at hank@henrygd.me, or [submit a private advisory](https://github.com/henrygd/beszel/security/advisories/new). If you find a vulnerability in the latest version, please [submit a private advisory](https://github.com/henrygd/beszel/security/advisories/new).
If you submit an advisory, open an empty issue as well to let me know that you did (or email me), as I'm not sure if I get notifications for that. If it's low severity (use best judgement) you may open an issue instead of an advisory.
If the issue is low severity (use best judgement) you may open an issue for it instead of contacting me directly.

View File

@@ -4,9 +4,16 @@ ARCH ?= $(shell go env GOARCH)
# Skip building the web UI if true # Skip building the web UI if true
SKIP_WEB ?= false SKIP_WEB ?= false
.PHONY: tidy build-agent build-hub build clean lint .PHONY: tidy build-agent build-hub build clean lint dev-server dev-agent dev-hub dev generate-locales
.DEFAULT_GOAL := build .DEFAULT_GOAL := build
clean:
go clean
rm -rf ./build
lint:
golangci-lint run
tidy: tidy:
go mod tidy go mod tidy
@@ -20,16 +27,41 @@ build-web-ui:
fi fi
build-agent: tidy build-agent: tidy
CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go build -o ./build/beszel-agent_$(OS)_$(ARCH) -ldflags "-w -s" beszel/cmd/agent GOOS=$(OS) GOARCH=$(ARCH) go build -o ./build/beszel-agent_$(OS)_$(ARCH) -ldflags "-w -s" beszel/cmd/agent
build-hub: tidy $(if $(filter false,$(SKIP_WEB)),build-web-ui) build-hub: tidy $(if $(filter false,$(SKIP_WEB)),build-web-ui)
CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go build -o ./build/beszel_$(OS)_$(ARCH) -ldflags "-w -s" beszel/cmd/hub GOOS=$(OS) GOARCH=$(ARCH) go build -o ./build/beszel_$(OS)_$(ARCH) -ldflags "-w -s" beszel/cmd/hub
build: build-agent build-hub build: build-agent build-hub
clean: generate-locales:
go clean @if [ ! -f ./site/src/locales/en/en.ts ]; then \
rm -rf ./build echo "Generating locales..."; \
command -v bun >/dev/null 2>&1 && cd ./site && bun install && bun run sync || cd ./site && npm install && npm run sync; \
fi
lint: dev-server: generate-locales
golangci-lint run cd ./site
@if command -v bun >/dev/null 2>&1; then \
cd ./site && bun run dev; \
else \
cd ./site && npm run dev; \
fi
dev-hub:
mkdir -p ./site/dist && touch ./site/dist/index.html
@if command -v entr >/dev/null 2>&1; then \
find ./cmd/hub/*.go ./internal/{alerts,hub,records,users}/*.go | entr -r -s "cd ./cmd/hub && go run . serve"; \
else \
cd ./cmd/hub && go run . serve; \
fi
dev-agent:
@if command -v entr >/dev/null 2>&1; then \
find ./cmd/agent/*.go ./internal/agent/*.go | entr -r go run beszel/cmd/agent; \
else \
go run beszel/cmd/agent; \
fi
# KEY="..." make -j dev
dev: dev-server dev-hub dev-agent

View File

@@ -3,6 +3,7 @@ package main
import ( import (
"beszel" "beszel"
"beszel/internal/hub" "beszel/internal/hub"
_ "beszel/migrations" _ "beszel/migrations"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase"

View File

@@ -1,20 +1,22 @@
module beszel module beszel
go 1.22.4 go 1.23
toolchain go1.23.2
require ( require (
github.com/blang/semver v3.5.1+incompatible github.com/blang/semver v3.5.1+incompatible
github.com/containrrr/shoutrrr v0.8.0 github.com/containrrr/shoutrrr v0.8.0
github.com/gliderlabs/ssh v0.3.7 github.com/gliderlabs/ssh v0.3.8
github.com/goccy/go-json v0.10.3 github.com/goccy/go-json v0.10.4
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 github.com/pocketbase/dbx v1.11.0
github.com/pocketbase/dbx v1.10.1 github.com/pocketbase/pocketbase v0.24.1
github.com/pocketbase/pocketbase v0.22.22
github.com/rhysd/go-github-selfupdate v1.2.3 github.com/rhysd/go-github-selfupdate v1.2.3
github.com/shirou/gopsutil/v4 v4.24.9 github.com/shirou/gopsutil/v4 v4.24.12
github.com/spf13/cast v1.7.0 github.com/spf13/cast v1.7.1
github.com/spf13/cobra v1.8.1 github.com/spf13/cobra v1.8.1
golang.org/x/crypto v0.28.0 golang.org/x/crypto v0.31.0
golang.org/x/exp v0.0.0-20250103183323-7d7fa50e5329
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
) )
@@ -22,41 +24,41 @@ require (
github.com/AlecAivazis/survey/v2 v2.3.7 // indirect github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/aws/aws-sdk-go-v2 v1.32.2 // indirect github.com/aws/aws-sdk-go-v2 v1.32.7 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
github.com/aws/aws-sdk-go-v2/config v1.28.0 // indirect github.com/aws/aws-sdk-go-v2/config v1.28.7 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.41 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.17.48 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.17 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 // indirect
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.33 // indirect github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.45 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.21 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.21 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 // indirect
github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.72.0 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.24.2 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.2 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.32.2 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 // indirect
github.com/aws/smithy-go v1.22.0 // indirect github.com/aws/smithy-go v1.22.1 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/disintegration/imaging v1.6.2 // indirect github.com/disintegration/imaging v1.6.2 // indirect
github.com/domodwyer/mailyak/v3 v3.6.2 // indirect github.com/domodwyer/mailyak/v3 v3.6.2 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect
github.com/ebitengine/purego v0.8.0 // indirect github.com/ebitengine/purego v0.8.1 // indirect
github.com/fatih/color v1.17.0 // indirect github.com/fatih/color v1.18.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect
github.com/ganigeorgiev/fexpr v0.4.1 // indirect github.com/ganigeorgiev/fexpr v0.4.1 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
github.com/google/go-github/v30 v30.1.0 // indirect github.com/google/go-github/v30 v30.1.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect github.com/google/go-querystring v1.1.0 // indirect
github.com/google/uuid v1.6.0 // indirect github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/gax-go/v2 v2.13.0 // indirect github.com/googleapis/gax-go/v2 v2.14.1 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf // indirect github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect
@@ -64,7 +66,6 @@ require (
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-sqlite3 v1.14.24 // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
@@ -73,32 +74,28 @@ require (
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect
github.com/tcnksm/go-gitconfig v0.1.2 // indirect github.com/tcnksm/go-gitconfig v0.1.2 // indirect
github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect
github.com/tklauser/numcpus v0.8.0 // indirect github.com/tklauser/numcpus v0.9.0 // indirect
github.com/ulikunitz/xz v0.5.12 // indirect github.com/ulikunitz/xz v0.5.12 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasttemplate v1.2.2 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opencensus.io v0.24.0 // indirect go.opencensus.io v0.24.0 // indirect
gocloud.dev v0.40.0 // indirect gocloud.dev v0.40.0 // indirect
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect golang.org/x/image v0.23.0 // indirect
golang.org/x/image v0.21.0 // indirect golang.org/x/net v0.33.0 // indirect
golang.org/x/net v0.30.0 // indirect golang.org/x/oauth2 v0.25.0 // indirect
golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sync v0.10.0 // indirect
golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.29.0 // indirect
golang.org/x/sys v0.26.0 // indirect golang.org/x/term v0.28.0 // indirect
golang.org/x/term v0.25.0 // indirect golang.org/x/text v0.21.0 // indirect
golang.org/x/text v0.19.0 // indirect
golang.org/x/time v0.7.0 // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
google.golang.org/api v0.201.0 // indirect google.golang.org/api v0.214.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d // indirect
google.golang.org/grpc v1.67.1 // indirect google.golang.org/grpc v1.69.2 // indirect
google.golang.org/protobuf v1.35.1 // indirect google.golang.org/protobuf v1.36.1 // indirect
modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852 // indirect modernc.org/gc/v3 v3.0.0-20250105121824-520be1a3aee6 // indirect
modernc.org/libc v1.61.0 // indirect modernc.org/libc v1.55.3 // indirect
modernc.org/mathutil v1.6.0 // indirect modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.8.0 // indirect modernc.org/memory v1.8.1 // indirect
modernc.org/sqlite v1.33.1 // indirect modernc.org/sqlite v1.34.4 // indirect
modernc.org/strutil v1.2.0 // indirect modernc.org/strutil v1.2.1 // indirect
modernc.org/token v1.1.0 // indirect modernc.org/token v1.1.0 // indirect
) )

View File

@@ -1,13 +1,13 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14=
cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU=
cloud.google.com/go/auth v0.9.8 h1:+CSJ0Gw9iVeSENVCKJoLHhdUykDgXSc4Qn+gu2BRtR8= cloud.google.com/go/auth v0.13.0 h1:8Fu8TZy167JkW8Tj3q7dIkr2v4cndv41ouecJx0PAHs=
cloud.google.com/go/auth v0.9.8/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI= cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q=
cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU=
cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0= cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0=
cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4= cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4=
cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus= cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus=
cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
@@ -26,44 +26,44 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
github.com/aws/aws-sdk-go-v2 v1.32.2 h1:AkNLZEyYMLnx/Q/mSKkcMqwNFXMAvFto9bNsHqcTduI= github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw=
github.com/aws/aws-sdk-go-v2 v1.32.2/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo= github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 h1:pT3hpW0cOHRJx8Y0DfJUEQuqPild8jRGmSFmBgvydr0= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6/go.mod h1:j/I2++U0xX+cr44QjHay4Cvxj6FUbnxrgmqN3H1jTZA= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
github.com/aws/aws-sdk-go-v2/config v1.28.0 h1:FosVYWcqEtWNxHn8gB/Vs6jOlNwSoyOCA/g/sxyySOQ= github.com/aws/aws-sdk-go-v2/config v1.28.7 h1:GduUnoTXlhkgnxTD93g1nv4tVPILbdNQOzav+Wpg7AE=
github.com/aws/aws-sdk-go-v2/config v1.28.0/go.mod h1:pYhbtvg1siOOg8h5an77rXle9tVG8T+BWLWAo7cOukc= github.com/aws/aws-sdk-go-v2/config v1.28.7/go.mod h1:vZGX6GVkIE8uECSUHB6MWAUsd4ZcG2Yq/dMa4refR3M=
github.com/aws/aws-sdk-go-v2/credentials v1.17.41 h1:7gXo+Axmp+R4Z+AK8YFQO0ZV3L0gizGINCOWxSLY9W8= github.com/aws/aws-sdk-go-v2/credentials v1.17.48 h1:IYdLD1qTJ0zanRavulofmqut4afs45mOWEI+MzZtTfQ=
github.com/aws/aws-sdk-go-v2/credentials v1.17.41/go.mod h1:u4Eb8d3394YLubphT4jLEwN1rLNq2wFOlT6OuxFwPzU= github.com/aws/aws-sdk-go-v2/credentials v1.17.48/go.mod h1:tOscxHN3CGmuX9idQ3+qbkzrjVIx32lqDSU1/0d/qXs=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.17 h1:TMH3f/SCAWdNtXXVPPu5D6wrr4G5hI1rAxbcocKfC7Q= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 h1:kqOrpojG71DxJm/KDPO+Z/y1phm1JlC8/iT+5XRmAn8=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.17/go.mod h1:1ZRXLdTpzdJb9fwTMXiLipENRxkGMTn1sfKexGllQCw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22/go.mod h1:NtSFajXVVL8TA2QNngagVZmUtXciyrHOt7xgz4faS/M=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.33 h1:X+4YY5kZRI/cOoSMVMGTqFXHAMg1bvvay7IBcqHpybQ= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.45 h1:ZxB8WFVYwolhDZxuZXoesHkl+L9cXLWy0K/G0QkNATc=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.33/go.mod h1:DPynzu+cn92k5UQ6tZhX+wfTB4ah6QDU/NgdHqatmvk= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.45/go.mod h1:1krrbyoFFDqaNldmltPTP+mK3sAXLHPoaFtISOw2Hkk=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.21 h1:UAsR3xA31QGf79WzpG/ixT9FZvQlh5HY1NRqSHBNOCk= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 h1:I/5wmGMffY4happ8NOCuIUEWGUvvFp5NSeQcXl9RHcI=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.21/go.mod h1:JNr43NFf5L9YaG3eKTm7HQzls9J+A9YYcGI5Quh1r2Y= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26/go.mod h1:FR8f4turZtNy6baO0KJ5FJUmXH/cSkI9fOngs0yl6mA=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.21 h1:6jZVETqmYCadGFvrYEQfC5fAQmlo80CeL5psbno6r0s= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFUVJdfqZ4bvvSgdGRq/ATcrQxzM=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.21/go.mod h1:1SR0GbLlnN3QUmYaflZNiH1ql+1qrSiB2vwcJ+4UM60= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21 h1:7edmS3VOBDhK00b/MwGtGglCm7hhwNYnjJs/PgFdMQE= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 h1:GeNJsIFHB+WW5ap2Tec4K6dzcVTsRbsT1Lra46Hv9ME=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21/go.mod h1:Q9o5h4HoIWG8XfzxqiuK/CGUbepCJ8uTlaE3bAbxytQ= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26/go.mod h1:zfgMpwHDXX2WGoG84xG2H+ZlPTkJUU4YUvx2svLQYWo=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2 h1:4FMHqLfk0efmTqhXVRL5xYRqlEBNBiRI7N6w4jsEdd4= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 h1:tB4tNw83KcajNAzaIMhkhVI2Nt8fAZd5A5ro113FEMY=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2/go.mod h1:LWoqeWlK9OZeJxsROW2RqrSPvQHKTpp69r/iDjwsSaw= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7/go.mod h1:lvpyBGkZ3tZ9iSsUIcC2EWp+0ywa7aK3BLT+FwZi+mQ=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.2 h1:s7NA1SOw8q/5c0wr8477yOPp0z+uBaXBnLE0XYb0POA= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 h1:8eUsivBQzZHqe/3FE+cqwfH+0p5Jo8PFM/QYQSmeZ+M=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.2/go.mod h1:fnjjWyAW/Pj5HYOxl9LJqWtEwS7W2qgcRLWP+uWbss0= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7/go.mod h1:kLPQvGUmxn/fqiCrDeohwG33bq2pQpGeY62yRO6Nrh0=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2 h1:t7iUP9+4wdc5lt3E41huP+GvQZJD38WLsgVp4iOtAjg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 h1:Hi0KGbrnr57bEHWM0bJ1QcBzxLrL/k2DHvGYhb8+W1w=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2/go.mod h1:/niFCtmuQNxqx9v8WAPq5qh7EH25U4BF6tjoyq9bObM= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7/go.mod h1:wKNgWgExdjjrm4qvfbTorkvocEstaoDl4WCvGfeCy9c=
github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0 h1:xA6XhTF7PE89BCNHJbQi8VvPzcgMtmGC5dr8S8N7lHk= github.com/aws/aws-sdk-go-v2/service/s3 v1.72.0 h1:SAfh4pNx5LuTafKKWR02Y+hL3A+3TX8cTKG1OIAJaBk=
github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0/go.mod h1:cB6oAuus7YXRZhWCc1wIwPywwZ1XwweNp2TVAEGYeB8= github.com/aws/aws-sdk-go-v2/service/s3 v1.72.0/go.mod h1:r+xl5yzMk9083rMR+sJ5TYj9Tihvf/l1oxzZXDgGj2Q=
github.com/aws/aws-sdk-go-v2/service/sso v1.24.2 h1:bSYXVyUzoTHoKalBmwaZxs97HU9DWWI3ehHSAMa7xOk= github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 h1:CvuUmnXI7ebaUAhbJcDy9YQx8wHR69eZ9I7q5hszt/g=
github.com/aws/aws-sdk-go-v2/service/sso v1.24.2/go.mod h1:skMqY7JElusiOUjMJMOv1jJsP7YUg7DrhgqZZWuzu1U= github.com/aws/aws-sdk-go-v2/service/sso v1.24.8/go.mod h1:XDeGv1opzwm8ubxddF0cgqkZWsyOtw4lr6dxwmb6YQg=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.2 h1:AhmO1fHINP9vFYUE0LHzCWg/LfUWUF+zFPEcY9QXb7o= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 h1:F2rBfNAL5UyswqoeWv9zs74N/NanhK16ydHW1pahX6E=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.2/go.mod h1:o8aQygT2+MVP0NaV6kbdE1YnnIM8RRVQzoeUH45GOdI= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7/go.mod h1:JfyQ0g2JG8+Krq0EuZNnRwX0mU0HrwY/tG6JNfcqh4k=
github.com/aws/aws-sdk-go-v2/service/sts v1.32.2 h1:CiS7i0+FUe+/YY1GvIBLLrR/XNGZ4CtM1Ll0XavNuVo= github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 h1:Xgv/hyNgvLda/M9l9qxXc4UFSgppnRczLxlMs5Ae/QY=
github.com/aws/aws-sdk-go-v2/service/sts v1.32.2/go.mod h1:HtaiBI8CjYoNVde8arShXb94UbQQi9L4EMr6D+xGBwo= github.com/aws/aws-sdk-go-v2/service/sts v1.33.3/go.mod h1:5Gn+d+VaaRgsjewpMvGazt0WfcFO+Md4wLOuBfGR9Bc=
github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -84,25 +84,25 @@ github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCO
github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c= github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/ebitengine/purego v0.8.0 h1:JbqvnEzRvPpxhCJzJJ2y0RbiZ8nyjccVUrSM3q+GvvE= github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
github.com/ebitengine/purego v0.8.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k= github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k=
github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE=
github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -117,14 +117,14 @@ github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpv
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM=
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -152,8 +152,8 @@ github.com/google/go-github/v30 v30.1.0/go.mod h1:n8jBpHl45a/rlBUtRJMOG4GhNADUQF
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k=
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -163,8 +163,8 @@ github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI=
github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA= github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA=
github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
@@ -187,8 +187,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 h1:FwuzbVh87iLiUQj1+uQUsuw9x5t9m5n5g7rG7o4svW4=
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61/go.mod h1:paQfF1YtHe+GrGg5fOgjsjoCX/UKDr9bc1DoWpZfns8=
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMDtTVdcGu0B1GmmC7QJKiCCjyTAWQy0= github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMDtTVdcGu0B1GmmC7QJKiCCjyTAWQy0=
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
@@ -198,8 +196,6 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
@@ -215,10 +211,10 @@ github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+q
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pocketbase/dbx v1.10.1 h1:cw+vsyfCJD8YObOVeqb93YErnlxwYMkNZ4rwN0G0AaA= github.com/pocketbase/dbx v1.11.0 h1:LpZezioMfT3K4tLrqA55wWFw1EtH1pM4tzSVa7kgszU=
github.com/pocketbase/dbx v1.10.1/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= github.com/pocketbase/dbx v1.11.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs=
github.com/pocketbase/pocketbase v0.22.22 h1:iA128U+cmM9euxPpuCN7blmQ2FZNzOix2aUUcnbbQu8= github.com/pocketbase/pocketbase v0.24.1 h1:Hhx3L4eap7g3kyBQ8OuWneZo7mYu1lrMvqQpxjK+zcs=
github.com/pocketbase/pocketbase v0.22.22/go.mod h1:u+l7T04g7eBXetoodXLch3WoV/QonRf1qYq+2vuTKuI= github.com/pocketbase/pocketbase v0.24.1/go.mod h1:VVaUmgKgjCBW3s/ob2SSHuDNtTboTbwK/VyTUguTt3o=
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -229,10 +225,10 @@ github.com/rhysd/go-github-selfupdate v1.2.3/go.mod h1:mp/N8zj6jFfBQy/XMYoWsmfzx
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shirou/gopsutil/v4 v4.24.9 h1:KIV+/HaHD5ka5f570RZq+2SaeFsb/pq+fp2DGNWYoOI= github.com/shirou/gopsutil/v4 v4.24.12 h1:qvePBOk20e0IKA1QXrIIU+jmk+zEiYVVx06WjBRlZo4=
github.com/shirou/gopsutil/v4 v4.24.9/go.mod h1:3fkaHNeYsUFCGZ8+9vZVWtbyM1k2eRnlL+bWO8Bxa/Q= github.com/shirou/gopsutil/v4 v4.24.12/go.mod h1:DCtMPAad2XceTeIAbGyVfycbYQNBGk2P8cvDi7/VN9o=
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@@ -245,21 +241,17 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tcnksm/go-gitconfig v0.1.2 h1:iiDhRitByXAEyjgBqsKi9QU4o2TNtv9kPP3RgPgXBPw= github.com/tcnksm/go-gitconfig v0.1.2 h1:iiDhRitByXAEyjgBqsKi9QU4o2TNtv9kPP3RgPgXBPw=
github.com/tcnksm/go-gitconfig v0.1.2/go.mod h1:/8EhP4H7oJZdIPyT+/UIsG87kTzrzM4UsLGSItWYCpE= github.com/tcnksm/go-gitconfig v0.1.2/go.mod h1:/8EhP4H7oJZdIPyT+/UIsG87kTzrzM4UsLGSItWYCpE=
github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU=
github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY=
github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= github.com/tklauser/numcpus v0.9.0 h1:lmyCHtANi8aRUgkckBgoDk1nHCux3n2cgkJLXdQGPDo=
github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS604NSRyI=
github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
@@ -269,32 +261,36 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng= gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng=
gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ= gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= golang.org/x/exp v0.0.0-20250103183323-7d7fa50e5329 h1:9kj3STMvgqy3YA4VQXBrN7925ICMxD5wzMRcgA30588=
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/exp v0.0.0-20250103183323-7d7fa50e5329/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s= golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78= golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -306,18 +302,18 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -334,23 +330,23 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -358,14 +354,14 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
google.golang.org/api v0.201.0 h1:+7AD9JNM3tREtawRMu8sOjSbb8VYcYXJG/2eEOmfDu0= google.golang.org/api v0.214.0 h1:h2Gkq07OYi6kusGOaT/9rnNljuXmqPnaig7WGPmKbwA=
google.golang.org/api v0.201.0/go.mod h1:HVY0FCHVs89xIW9fzf/pBvOEm+OolHa86G/txFezyq4= google.golang.org/api v0.214.0/go.mod h1:bYPpLG8AyeMWwDU6NXoB00xC0DFkikVvd5MfwoxjLqE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -373,19 +369,19 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20241007155032-5fefd90f89a9 h1:nFS3IivktIU5Mk6KQa+v6RKkHUpdQpphqGNLxqNnbEk= google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988 h1:CT2Thj5AuPV9phrYMtzX11k+XkzMGfRAet42PmoTATM=
google.golang.org/genproto v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:tEzYTYZxbmVNOu0OAFH9HzdJtLn6h4Aj89zzlBCdHms= google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988/go.mod h1:7uvplUBj4RjHAxIZ//98LzOvrQ04JBkaixRmCMI29hc=
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE= google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d h1:xJJRGY7TJcvIlpSrN3K6LAWgNFUILlO+OMAqtg9aqnw=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d/go.mod h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -395,8 +391,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -411,27 +407,27 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ=
modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ=
modernc.org/ccgo/v4 v4.21.0 h1:kKPI3dF7RIag8YcToh5ZwDcVMIv6VGa0ED5cvh0LMW4= modernc.org/ccgo/v4 v4.19.2 h1:lwQZgvboKD0jBwdaeVCTouxhxAyN6iawF3STraAal8Y=
modernc.org/ccgo/v4 v4.21.0/go.mod h1:h6kt6H/A2+ew/3MW/p6KEoQmrq/i3pr0J/SiwiaF/g0= modernc.org/ccgo/v4 v4.19.2/go.mod h1:ysS3mxiMV38XGRTTcgo0DQTeTmAO4oCmJl1nX9VFI3s=
modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M= modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852 h1:IYXPPTTjjoSHvUClZIYexDiO7g+4x+XveKT4gCIAwiY= modernc.org/gc/v3 v3.0.0-20250105121824-520be1a3aee6 h1:JoKwHjIFumiKrjMbp1cNbC5E9UyCgA/ZcID0xOWQ2N8=
modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= modernc.org/gc/v3 v3.0.0-20250105121824-520be1a3aee6/go.mod h1:LG5UO1Ran4OO0JRKz2oNiXhR5nNrgz0PzH7UKhz0aMU=
modernc.org/libc v1.61.0 h1:eGFcvWpqlnoGwzZeZe3PWJkkKbM/3SUGyk1DVZQ0TpE= modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U=
modernc.org/libc v1.61.0/go.mod h1:DvxVX89wtGTu+r72MLGhygpfi3aUGgZRdAYGCAVVud0= modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w=
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= modernc.org/memory v1.8.1 h1:HS1HRg1jEohnuONobEq2WrLEhLyw8+J42yLFTnllm2A=
modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= modernc.org/memory v1.8.1/go.mod h1:ZbjSvMO5NQ1A2i3bWeDiVMxIorXwdClKE/0SZ+BMotU=
modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
modernc.org/sqlite v1.33.1 h1:trb6Z3YYoeM9eDL1O8do81kP+0ejv+YzgyFo+Gwy0nM= modernc.org/sqlite v1.34.4 h1:sjdARozcL5KJBvYQvLlZEmctRgW9xqIZc2ncN7PU0P8=
modernc.org/sqlite v1.33.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k= modernc.org/sqlite v1.34.4/go.mod h1:3QQFCG2SEMtc2nv+Wq4cQCH7Hjcg+p/RMlS1XK+zwbk=
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=

View File

@@ -24,6 +24,7 @@ type Agent struct {
sensorsContext context.Context // Sensors context to override sys location sensorsContext context.Context // Sensors context to override sys location
sensorsWhitelist map[string]struct{} // List of sensors to monitor sensorsWhitelist map[string]struct{} // List of sensors to monitor
systemInfo system.Info // Host system info systemInfo system.Info // Host system info
gpuManager *GPUManager // Manages GPU data
} }
func NewAgent() *Agent { func NewAgent() *Agent {
@@ -72,7 +73,14 @@ func (a *Agent) Run(pubKey []byte, addr string) {
a.initializeSystemInfo() a.initializeSystemInfo()
a.initializeDiskInfo() a.initializeDiskInfo()
a.initializeNetIoStats() a.initializeNetIoStats()
a.dockerManager = newDockerManager() a.dockerManager = newDockerManager(a)
// initialize GPU manager
if gm, err := NewGPUManager(); err != nil {
slog.Debug("GPU", "err", err)
} else {
a.gpuManager = gm
}
// if debugging, print stats // if debugging, print stats
if a.debug { if a.debug {
@@ -84,22 +92,18 @@ func (a *Agent) Run(pubKey []byte, addr string) {
func (a *Agent) gatherStats() system.CombinedData { func (a *Agent) gatherStats() system.CombinedData {
slog.Debug("Getting stats") slog.Debug("Getting stats")
// systemData := system.CombinedData{ systemData := system.CombinedData{
// Stats: a.getSystemStats(), Stats: a.getSystemStats(),
// Info: a.systemInfo, Info: a.systemInfo,
// } }
systemData := system.CombinedData{} slog.Debug("System stats", "data", systemData)
// add docker stats (testing doing this first for docker 24) // add docker stats
if containerStats, err := a.dockerManager.getDockerStats(); err == nil { if containerStats, err := a.dockerManager.getDockerStats(); err == nil {
systemData.Containers = containerStats systemData.Containers = containerStats
slog.Debug("Docker stats", "data", systemData.Containers) slog.Debug("Docker stats", "data", systemData.Containers)
} else { } else {
slog.Debug("Error getting docker stats", "err", err) slog.Debug("Error getting docker stats", "err", err)
} }
systemData.Stats = a.getSystemStats()
systemData.Info = a.systemInfo
slog.Debug("System stats", "data", systemData)
// add extra filesystems // add extra filesystems
systemData.Stats.ExtraFs = make(map[string]*system.FsStats) systemData.Stats.ExtraFs = make(map[string]*system.FsStats)
for name, stats := range a.fsStats { for name, stats := range a.fsStats {

View File

@@ -38,14 +38,26 @@ func (a *Agent) initializeDiskInfo() {
// Helper function to add a filesystem to fsStats if it doesn't exist // Helper function to add a filesystem to fsStats if it doesn't exist
addFsStat := func(device, mountpoint string, root bool) { addFsStat := func(device, mountpoint string, root bool) {
key := filepath.Base(device) key := filepath.Base(device)
var ioMatch bool
if _, exists := a.fsStats[key]; !exists { if _, exists := a.fsStats[key]; !exists {
if root { if root {
slog.Info("Detected root device", "name", key) slog.Info("Detected root device", "name", key)
// check if root device is in /proc/diskstats, use fallback if not // Check if root device is in /proc/diskstats, use fallback if not
if _, exists := diskIoCounters[key]; !exists { if _, ioMatch = diskIoCounters[key]; !ioMatch {
slog.Warn("Device not found in diskstats", "name", key) key, ioMatch = findIoDevice(filesystem, diskIoCounters, a.fsStats)
key = findFallbackIoDevice(filesystem, diskIoCounters, a.fsStats) if !ioMatch {
slog.Info("Using I/O fallback", "name", key) slog.Info("Using I/O fallback", "device", device, "mountpoint", mountpoint, "fallback", key)
}
}
} else {
// Check if non-root has diskstats and fall back to folder name if not
// Scenario: device is encrypted and named luks-2bcb02be-999d-4417-8d18-5c61e660fb6e - not in /proc/diskstats.
// However, the device can be specified by mounting folder from luks device at /extra-filesystems/sda1
if _, ioMatch = diskIoCounters[key]; !ioMatch {
efBase := filepath.Base(mountpoint)
if _, ioMatch = diskIoCounters[efBase]; ioMatch {
key = efBase
}
} }
} }
a.fsStats[key] = &system.FsStats{Root: root, Mountpoint: mountpoint} a.fsStats[key] = &system.FsStats{Root: root, Mountpoint: mountpoint}
@@ -92,9 +104,12 @@ func (a *Agent) initializeDiskInfo() {
for _, p := range partitions { for _, p := range partitions {
// fmt.Println(p.Device, p.Mountpoint) // fmt.Println(p.Device, p.Mountpoint)
// Binary root fallback or docker root fallback // Binary root fallback or docker root fallback
if !hasRoot && (p.Mountpoint == "/" || (p.Mountpoint == "/etc/hosts" && strings.HasPrefix(p.Device, "/dev") && !strings.Contains(p.Device, "mapper"))) { if !hasRoot && (p.Mountpoint == "/" || (p.Mountpoint == "/etc/hosts" && strings.HasPrefix(p.Device, "/dev"))) {
addFsStat(p.Device, "/", true) fs, match := findIoDevice(filepath.Base(p.Device), diskIoCounters, a.fsStats)
hasRoot = true if match {
addFsStat(fs, p.Mountpoint, true)
hasRoot = true
}
} }
// Check if device is in /extra-filesystems // Check if device is in /extra-filesystems
@@ -114,7 +129,7 @@ func (a *Agent) initializeDiskInfo() {
mountpoint := filepath.Join(efPath, folder.Name()) mountpoint := filepath.Join(efPath, folder.Name())
slog.Debug("/extra-filesystems", "mountpoint", mountpoint) slog.Debug("/extra-filesystems", "mountpoint", mountpoint)
if !existingMountpoints[mountpoint] { if !existingMountpoints[mountpoint] {
a.fsStats[folder.Name()] = &system.FsStats{Mountpoint: mountpoint} addFsStat(folder.Name(), mountpoint, false)
} }
} }
} }
@@ -122,7 +137,7 @@ func (a *Agent) initializeDiskInfo() {
// If no root filesystem set, use fallback // If no root filesystem set, use fallback
if !hasRoot { if !hasRoot {
rootDevice := findFallbackIoDevice(filepath.Base(filesystem), diskIoCounters, a.fsStats) rootDevice, _ := findIoDevice(filepath.Base(filesystem), diskIoCounters, a.fsStats)
slog.Info("Root disk", "mountpoint", "/", "io", rootDevice) slog.Info("Root disk", "mountpoint", "/", "io", rootDevice)
a.fsStats[rootDevice] = &system.FsStats{Root: true, Mountpoint: "/"} a.fsStats[rootDevice] = &system.FsStats{Root: true, Mountpoint: "/"}
} }
@@ -130,14 +145,15 @@ func (a *Agent) initializeDiskInfo() {
a.initializeDiskIoStats(diskIoCounters) a.initializeDiskIoStats(diskIoCounters)
} }
// Returns the device with the most reads in /proc/diskstats, // Returns matching device from /proc/diskstats,
// or the device specified by the filesystem argument if it exists // or the device with the most reads if no match is found.
func findFallbackIoDevice(filesystem string, diskIoCounters map[string]disk.IOCountersStat, fsStats map[string]*system.FsStats) string { // bool is true if a match was found.
func findIoDevice(filesystem string, diskIoCounters map[string]disk.IOCountersStat, fsStats map[string]*system.FsStats) (string, bool) {
var maxReadBytes uint64 var maxReadBytes uint64
maxReadDevice := "/" maxReadDevice := "/"
for _, d := range diskIoCounters { for _, d := range diskIoCounters {
if d.Name == filesystem { if d.Name == filesystem || (d.Label != "" && d.Label == filesystem) {
return d.Name return d.Name, true
} }
if d.ReadBytes > maxReadBytes { if d.ReadBytes > maxReadBytes {
// don't use if device already exists in fsStats // don't use if device already exists in fsStats
@@ -147,7 +163,7 @@ func findFallbackIoDevice(filesystem string, diskIoCounters map[string]disk.IOCo
} }
} }
} }
return maxReadDevice return maxReadDevice, false
} }
// Sets start values for disk I/O stats. // Sets start values for disk I/O stats.

View File

@@ -52,11 +52,6 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
} }
defer resp.Body.Close() defer resp.Body.Close()
// test sleeping for 1 second if docker 24
if !dm.goodDockerVersion {
time.Sleep(time.Millisecond * 1100)
}
if err := json.NewDecoder(resp.Body).Decode(&dm.apiContainerList); err != nil { if err := json.NewDecoder(resp.Body).Decode(&dm.apiContainerList); err != nil {
return nil, err return nil, err
} }
@@ -85,6 +80,7 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
go func() { go func() {
defer dm.dequeue() defer dm.dequeue()
err := dm.updateContainerStats(ctr) err := dm.updateContainerStats(ctr)
// if error, delete from map and add to failed list to retry
if err != nil { if err != nil {
dm.containerStatsMutex.Lock() dm.containerStatsMutex.Lock()
delete(dm.containerStatsMap, ctr.IdShort) delete(dm.containerStatsMap, ctr.IdShort)
@@ -99,7 +95,6 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
// retry failed containers separately so we can run them in parallel (docker 24 bug) // retry failed containers separately so we can run them in parallel (docker 24 bug)
if len(failedContainters) > 0 { if len(failedContainters) > 0 {
slog.Debug("Retrying failed containers", "count", len(failedContainters)) slog.Debug("Retrying failed containers", "count", len(failedContainters))
time.Sleep(time.Millisecond * 1100) // this is a test for docker 24 bug
for _, ctr := range failedContainters { for _, ctr := range failedContainters {
dm.queue() dm.queue()
go func() { go func() {
@@ -211,12 +206,13 @@ func (dm *dockerManager) deleteContainerStatsSync(id string) {
delete(dm.containerStatsMap, id) delete(dm.containerStatsMap, id)
} }
// Creates a new http client for Docker API // Creates a new http client for Docker or Podman API
func newDockerManager() *dockerManager { func newDockerManager(a *Agent) *dockerManager {
dockerHost := "unix:///var/run/docker.sock" dockerHost, exists := os.LookupEnv("DOCKER_HOST")
if dockerHostEnv, exists := os.LookupEnv("DOCKER_HOST"); exists { if exists {
slog.Info("DOCKER_HOST", "host", dockerHostEnv) slog.Info("DOCKER_HOST", "host", dockerHost)
dockerHost = dockerHostEnv } else {
dockerHost = getDockerHost()
} }
parsedURL, err := url.Parse(dockerHost) parsedURL, err := url.Parse(dockerHost)
@@ -264,6 +260,13 @@ func newDockerManager() *dockerManager {
sem: make(chan struct{}, 5), sem: make(chan struct{}, 5),
} }
// If using podman, return client
if strings.Contains(dockerHost, "podman") {
a.systemInfo.Podman = true
dockerClient.goodDockerVersion = true
return dockerClient
}
// Check docker version // Check docker version
// (versions before 25.0.0 have a bug with one-shot which requires all requests to be made in one batch) // (versions before 25.0.0 have a bug with one-shot which requires all requests to be made in one batch)
var versionInfo struct { var versionInfo struct {
@@ -287,3 +290,15 @@ func newDockerManager() *dockerManager {
return dockerClient return dockerClient
} }
// Test docker / podman sockets and return if one exists
func getDockerHost() string {
scheme := "unix://"
socks := []string{"/var/run/docker.sock", fmt.Sprintf("/run/user/%v/podman/podman.sock", os.Getuid())}
for _, sock := range socks {
if _, err := os.Stat(sock); err == nil {
return scheme + sock
}
}
return scheme + socks[0]
}

View File

@@ -0,0 +1,248 @@
package agent
import (
"beszel/internal/entities/system"
"bufio"
"encoding/json"
"fmt"
"os/exec"
"strconv"
"strings"
"sync"
"time"
"golang.org/x/exp/slog"
)
// GPUManager manages data collection for GPUs (either Nvidia or AMD)
type GPUManager struct {
nvidiaSmi bool
rocmSmi bool
GpuDataMap map[string]*system.GPUData
mutex sync.Mutex
}
// RocmSmiJson represents the JSON structure of rocm-smi output
type RocmSmiJson struct {
ID string `json:"GUID"`
Name string `json:"Card series"`
Temperature string `json:"Temperature (Sensor edge) (C)"`
MemoryUsed string `json:"VRAM Total Used Memory (B)"`
MemoryTotal string `json:"VRAM Total Memory (B)"`
Usage string `json:"GPU use (%)"`
Power string `json:"Current Socket Graphics Package Power (W)"`
}
// gpuCollector defines a collector for a specific GPU management utility (nvidia-smi or rocm-smi)
type gpuCollector struct {
name string
cmd *exec.Cmd
parse func([]byte) bool // returns true if valid data was found
}
var errNoValidData = fmt.Errorf("no valid GPU data found") // Error for missing data
// starts and manages the ongoing collection of GPU data for the specified GPU management utility
func (c *gpuCollector) start() {
for {
err := c.collect()
if err != nil {
if err == errNoValidData {
slog.Warn(c.name + " found no valid GPU data, stopping")
break
}
slog.Warn(c.name+" failed, restarting", "err", err)
time.Sleep(time.Second * 5)
continue
}
}
}
// collect executes the command, parses output with the assigned parser function
func (c *gpuCollector) collect() error {
stdout, err := c.cmd.StdoutPipe()
if err != nil {
return err
}
if err := c.cmd.Start(); err != nil {
return err
}
scanner := bufio.NewScanner(stdout)
buf := make([]byte, 0, 8*1024)
scanner.Buffer(buf, bufio.MaxScanTokenSize)
hasValidData := false
for scanner.Scan() {
if c.parse(scanner.Bytes()) {
hasValidData = true
}
}
if !hasValidData {
return errNoValidData
}
if err := scanner.Err(); err != nil {
return fmt.Errorf("scanner error: %w", err)
}
return c.cmd.Wait()
}
// parseNvidiaData parses the output of nvidia-smi and updates the GPUData map
func (gm *GPUManager) parseNvidiaData(output []byte) bool {
fields := strings.Split(string(output), ", ")
if len(fields) < 7 {
return false
}
gm.mutex.Lock()
defer gm.mutex.Unlock()
lines := strings.Split(string(output), "\n")
for _, line := range lines {
if line != "" {
fields := strings.Split(line, ", ")
if len(fields) >= 7 {
id := fields[0]
temp, _ := strconv.ParseFloat(fields[2], 64)
memoryUsage, _ := strconv.ParseFloat(fields[3], 64)
totalMemory, _ := strconv.ParseFloat(fields[4], 64)
usage, _ := strconv.ParseFloat(fields[5], 64)
power, _ := strconv.ParseFloat(fields[6], 64)
// add gpu if not exists
if _, ok := gm.GpuDataMap[id]; !ok {
name := strings.TrimPrefix(fields[1], "NVIDIA ")
gm.GpuDataMap[id] = &system.GPUData{Name: strings.TrimSuffix(name, " Laptop GPU")}
}
// update gpu data
gpu := gm.GpuDataMap[id]
gpu.Temperature = temp
gpu.MemoryUsed = memoryUsage / 1.024
gpu.MemoryTotal = totalMemory / 1.024
gpu.Usage += usage
gpu.Power += power
gpu.Count++
}
}
}
return true
}
// parseAmdData parses the output of rocm-smi and updates the GPUData map
func (gm *GPUManager) parseAmdData(output []byte) bool {
var rocmSmiInfo map[string]RocmSmiJson
if err := json.Unmarshal(output, &rocmSmiInfo); err != nil || len(rocmSmiInfo) == 0 {
return false
}
gm.mutex.Lock()
defer gm.mutex.Unlock()
for _, v := range rocmSmiInfo {
temp, _ := strconv.ParseFloat(v.Temperature, 64)
memoryUsage, _ := strconv.ParseFloat(v.MemoryUsed, 64)
totalMemory, _ := strconv.ParseFloat(v.MemoryTotal, 64)
usage, _ := strconv.ParseFloat(v.Usage, 64)
power, _ := strconv.ParseFloat(v.Power, 64)
memoryUsage = bytesToMegabytes(memoryUsage)
totalMemory = bytesToMegabytes(totalMemory)
if _, ok := gm.GpuDataMap[v.ID]; !ok {
gm.GpuDataMap[v.ID] = &system.GPUData{Name: v.Name}
}
gpu := gm.GpuDataMap[v.ID]
gpu.Temperature = temp
gpu.MemoryUsed = memoryUsage
gpu.MemoryTotal = totalMemory
gpu.Usage += usage
gpu.Power += power
gpu.Count++
}
return true
}
// sums and resets the current GPU utilization data since the last update
func (gm *GPUManager) GetCurrentData() map[string]system.GPUData {
gm.mutex.Lock()
defer gm.mutex.Unlock()
// check for GPUs with the same name
nameCounts := make(map[string]int)
for _, gpu := range gm.GpuDataMap {
nameCounts[gpu.Name]++
}
// copy / reset the data
gpuData := make(map[string]system.GPUData, len(gm.GpuDataMap))
for id, gpu := range gm.GpuDataMap {
// sum the data
gpu.Temperature = twoDecimals(gpu.Temperature)
gpu.MemoryUsed = twoDecimals(gpu.MemoryUsed)
gpu.MemoryTotal = twoDecimals(gpu.MemoryTotal)
gpu.Usage = twoDecimals(gpu.Usage / gpu.Count)
gpu.Power = twoDecimals(gpu.Power / gpu.Count)
// reset the count
gpu.Count = 1
// dereference to avoid overwriting anything else
gpuCopy := *gpu
// append id to the name if there are multiple GPUs with the same name
if nameCounts[gpu.Name] > 1 {
gpuCopy.Name = fmt.Sprintf("%s %s", gpu.Name, id)
}
gpuData[id] = gpuCopy
}
return gpuData
}
// detectGPUs returns the GPU brand (nvidia or amd) or an error if none is found
// todo: make sure there's actually a GPU, not just if the command exists
func (gm *GPUManager) detectGPUs() error {
if err := exec.Command("nvidia-smi").Run(); err == nil {
gm.nvidiaSmi = true
}
if err := exec.Command("rocm-smi").Run(); err == nil {
gm.rocmSmi = true
}
if gm.nvidiaSmi || gm.rocmSmi {
return nil
}
return fmt.Errorf("no GPU found - install nvidia-smi or rocm-smi")
}
// startCollector starts the appropriate GPU data collector based on the command
func (gm *GPUManager) startCollector(command string) {
switch command {
case "nvidia-smi":
nvidia := gpuCollector{
name: "nvidia-smi",
cmd: exec.Command("nvidia-smi", "-l", "4",
"--query-gpu=index,name,temperature.gpu,memory.used,memory.total,utilization.gpu,power.draw",
"--format=csv,noheader,nounits"),
parse: gm.parseNvidiaData,
}
go nvidia.start()
case "rocm-smi":
amdCollector := gpuCollector{
name: "rocm-smi",
cmd: exec.Command("/bin/sh", "-c",
"while true; do rocm-smi --showid --showtemp --showuse --showpower --showproductname --showmeminfo vram --json; sleep 4.3; done"),
parse: gm.parseAmdData,
}
go amdCollector.start()
}
}
// NewGPUManager creates and initializes a new GPUManager
func NewGPUManager() (*GPUManager, error) {
var gm GPUManager
if err := gm.detectGPUs(); err != nil {
return nil, err
}
gm.GpuDataMap = make(map[string]*system.GPUData, 1)
if gm.nvidiaSmi {
gm.startCollector("nvidia-smi")
}
if gm.rocmSmi {
gm.startCollector("rocm-smi")
}
return &gm, nil
}

View File

@@ -26,7 +26,7 @@ func (a *Agent) startServer(pubKey []byte, addr string) {
func (a *Agent) handleSession(s sshServer.Session) { func (a *Agent) handleSession(s sshServer.Session) {
stats := a.gatherStats() stats := a.gatherStats()
if err := json.NewEncoder(s).Encode(stats); err != nil { if err := json.NewEncoder(s).Encode(stats); err != nil {
slog.Error("Error encoding stats", "err", err) slog.Error("Error encoding stats", "err", err, "stats", stats)
s.Exit(1) s.Exit(1)
return return
} }

View File

@@ -116,11 +116,17 @@ func (a *Agent) getSystemStats() system.Stats {
continue continue
} }
secondsElapsed := time.Since(stats.Time).Seconds() secondsElapsed := time.Since(stats.Time).Seconds()
readPerSecond := float64(d.ReadBytes-stats.TotalRead) / secondsElapsed readPerSecond := bytesToMegabytes(float64(d.ReadBytes-stats.TotalRead) / secondsElapsed)
writePerSecond := float64(d.WriteBytes-stats.TotalWrite) / secondsElapsed writePerSecond := bytesToMegabytes(float64(d.WriteBytes-stats.TotalWrite) / secondsElapsed)
// check for invalid values and reset stats if so
if readPerSecond < 0 || writePerSecond < 0 || readPerSecond > 50_000 || writePerSecond > 50_000 {
slog.Warn("Invalid disk I/O. Resetting.", "name", d.Name, "read", readPerSecond, "write", writePerSecond)
a.initializeDiskIoStats(ioCounters)
break
}
stats.Time = time.Now() stats.Time = time.Now()
stats.DiskReadPs = bytesToMegabytes(readPerSecond) stats.DiskReadPs = readPerSecond
stats.DiskWritePs = bytesToMegabytes(writePerSecond) stats.DiskWritePs = writePerSecond
stats.TotalRead = d.ReadBytes stats.TotalRead = d.ReadBytes
stats.TotalWrite = d.WriteBytes stats.TotalWrite = d.WriteBytes
// if root filesystem, update system stats // if root filesystem, update system stats
@@ -153,7 +159,7 @@ func (a *Agent) getSystemStats() system.Stats {
networkRecvPs := bytesToMegabytes(recvPerSecond) networkRecvPs := bytesToMegabytes(recvPerSecond)
// add check for issue (#150) where sent is a massive number // add check for issue (#150) where sent is a massive number
if networkSentPs > 10_000 || networkRecvPs > 10_000 { if networkSentPs > 10_000 || networkRecvPs > 10_000 {
slog.Warn("Invalid network stats. Resetting.", "sent", networkSentPs, "recv", networkRecvPs) slog.Warn("Invalid net stats. Resetting.", "sent", networkSentPs, "recv", networkRecvPs)
for _, v := range netIO { for _, v := range netIO {
if _, exists := a.netInterfaces[v.Name]; !exists { if _, exists := a.netInterfaces[v.Name]; !exists {
continue continue
@@ -206,6 +212,22 @@ func (a *Agent) getSystemStats() system.Stats {
} }
} }
// GPU data
if a.gpuManager != nil {
if gpuData := a.gpuManager.GetCurrentData(); len(gpuData) > 0 {
systemStats.GPUData = gpuData
// add temperatures
if systemStats.Temperatures == nil {
systemStats.Temperatures = make(map[string]float64, len(gpuData))
}
for _, gpu := range gpuData {
if gpu.Temperature > 0 {
systemStats.Temperatures[gpu.Name] = gpu.Temperature
}
}
}
}
// update base system info // update base system info
a.systemInfo.Cpu = systemStats.Cpu a.systemInfo.Cpu = systemStats.Cpu
a.systemInfo.MemPct = systemStats.MemPct a.systemInfo.MemPct = systemStats.MemPct

View File

@@ -11,11 +11,10 @@ import (
"github.com/containrrr/shoutrrr" "github.com/containrrr/shoutrrr"
"github.com/goccy/go-json" "github.com/goccy/go-json"
"github.com/labstack/echo/v5"
"github.com/pocketbase/dbx" "github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/apis"
"github.com/pocketbase/pocketbase/models" "github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/tools/mailer" "github.com/pocketbase/pocketbase/tools/mailer"
"github.com/pocketbase/pocketbase/tools/types" "github.com/pocketbase/pocketbase/tools/types"
"github.com/spf13/cast" "github.com/spf13/cast"
@@ -48,8 +47,8 @@ type SystemAlertStats struct {
} }
type SystemAlertData struct { type SystemAlertData struct {
systemRecord *models.Record systemRecord *core.Record
alertRecord *models.Record alertRecord *core.Record
name string name string
unit string unit string
val float64 val float64
@@ -68,12 +67,12 @@ func NewAlertManager(app *pocketbase.PocketBase) *AlertManager {
} }
} }
func (am *AlertManager) HandleSystemAlerts(systemRecord *models.Record, systemInfo system.Info, temperatures map[string]float64, extraFs map[string]*system.FsStats) error { func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, systemInfo system.Info, temperatures map[string]float64, extraFs map[string]*system.FsStats) error {
// start := time.Now() // start := time.Now()
// defer func() { // defer func() {
// log.Println("alert stats took", time.Since(start)) // log.Println("alert stats took", time.Since(start))
// }() // }()
alertRecords, err := am.app.Dao().FindRecordsByExpr("alerts", alertRecords, err := am.app.FindAllRecords("alerts",
dbx.NewExp("system={:system}", dbx.Params{"system": systemRecord.Id}), dbx.NewExp("system={:system}", dbx.Params{"system": systemRecord.Id}),
) )
if err != nil || len(alertRecords) == 0 { if err != nil || len(alertRecords) == 0 {
@@ -82,7 +81,7 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *models.Record, systemIn
} }
var validAlerts []SystemAlertData var validAlerts []SystemAlertData
now := systemRecord.Updated.Time().UTC() now := systemRecord.GetDateTime("updated").Time().UTC()
oldestTime := now oldestTime := now
for _, alertRecord := range alertRecords { for _, alertRecord := range alertRecords {
@@ -155,7 +154,7 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *models.Record, systemIn
Created types.DateTime `db:"created"` Created types.DateTime `db:"created"`
}{} }{}
err = am.app.Dao().DB(). err = am.app.DB().
Select("stats", "created"). Select("stats", "created").
From("system_stats"). From("system_stats").
Where(dbx.NewExp( Where(dbx.NewExp(
@@ -325,27 +324,28 @@ func (am *AlertManager) sendSystemAlert(alert SystemAlertData) {
body := fmt.Sprintf("%s averaged %.2f%s for the previous %v %s.", alert.descriptor, alert.val, alert.unit, alert.min, minutesLabel) body := fmt.Sprintf("%s averaged %.2f%s for the previous %v %s.", alert.descriptor, alert.val, alert.unit, alert.min, minutesLabel)
alert.alertRecord.Set("triggered", alert.triggered) alert.alertRecord.Set("triggered", alert.triggered)
if err := am.app.Dao().SaveRecord(alert.alertRecord); err != nil { if err := am.app.Save(alert.alertRecord); err != nil {
// app.Logger().Error("failed to save alert record", "err", err.Error()) // app.Logger().Error("failed to save alert record", "err", err.Error())
return return
} }
// expand the user relation and send the alert // expand the user relation and send the alert
if errs := am.app.Dao().ExpandRecord(alert.alertRecord, []string{"user"}, nil); len(errs) > 0 { if errs := am.app.ExpandRecord(alert.alertRecord, []string{"user"}, nil); len(errs) > 0 {
// app.Logger().Error("failed to expand user relation", "errs", errs) // app.Logger().Error("failed to expand user relation", "errs", errs)
return return
} }
if user := alert.alertRecord.ExpandedOne("user"); user != nil { if user := alert.alertRecord.ExpandedOne("user"); user != nil {
am.sendAlert(AlertMessageData{ am.sendAlert(AlertMessageData{
UserID: user.GetId(), UserID: user.Id,
Title: subject, Title: subject,
Message: body, Message: body,
Link: am.app.Settings().Meta.AppUrl + "/system/" + url.PathEscape(systemName), Link: am.app.Settings().Meta.AppURL + "/system/" + url.PathEscape(systemName),
LinkText: "View " + systemName, LinkText: "View " + systemName,
}) })
} }
} }
func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *models.Record) error { // todo: allow x minutes downtime before sending alert
func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *core.Record) error {
var alertStatus string var alertStatus string
switch newStatus { switch newStatus {
case "up": case "up":
@@ -361,9 +361,9 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
return nil return nil
} }
// check if use // check if use
alertRecords, err := am.app.Dao().FindRecordsByExpr("alerts", alertRecords, err := am.app.FindAllRecords("alerts",
dbx.HashExp{ dbx.HashExp{
"system": oldSystemRecord.GetId(), "system": oldSystemRecord.Id,
"name": "Status", "name": "Status",
}, },
) )
@@ -373,7 +373,7 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
} }
for _, alertRecord := range alertRecords { for _, alertRecord := range alertRecords {
// expand the user relation // expand the user relation
if errs := am.app.Dao().ExpandRecord(alertRecord, []string{"user"}, nil); len(errs) > 0 { if errs := am.app.ExpandRecord(alertRecord, []string{"user"}, nil); len(errs) > 0 {
return fmt.Errorf("failed to expand: %v", errs) return fmt.Errorf("failed to expand: %v", errs)
} }
user := alertRecord.ExpandedOne("user") user := alertRecord.ExpandedOne("user")
@@ -387,10 +387,10 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
// send alert // send alert
systemName := oldSystemRecord.GetString("name") systemName := oldSystemRecord.GetString("name")
am.sendAlert(AlertMessageData{ am.sendAlert(AlertMessageData{
UserID: user.GetId(), UserID: user.Id,
Title: fmt.Sprintf("Connection to %s is %s %v", systemName, alertStatus, emoji), Title: fmt.Sprintf("Connection to %s is %s %v", systemName, alertStatus, emoji),
Message: fmt.Sprintf("Connection to %s is %s", systemName, alertStatus), Message: fmt.Sprintf("Connection to %s is %s", systemName, alertStatus),
Link: am.app.Settings().Meta.AppUrl + "/system/" + url.PathEscape(systemName), Link: am.app.Settings().Meta.AppURL + "/system/" + url.PathEscape(systemName),
LinkText: "View " + systemName, LinkText: "View " + systemName,
}) })
} }
@@ -399,7 +399,7 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
func (am *AlertManager) sendAlert(data AlertMessageData) { func (am *AlertManager) sendAlert(data AlertMessageData) {
// get user settings // get user settings
record, err := am.app.Dao().FindFirstRecordByFilter( record, err := am.app.FindFirstRecordByFilter(
"user_settings", "user={:user}", "user_settings", "user={:user}",
dbx.Params{"user": data.UserID}, dbx.Params{"user": data.UserID},
) )
@@ -511,19 +511,19 @@ func sliceContains(slice []string, item string) bool {
return false return false
} }
func (am *AlertManager) SendTestNotification(c echo.Context) error { func (am *AlertManager) SendTestNotification(e *core.RequestEvent) error {
requestData := apis.RequestInfo(c) info, _ := e.RequestInfo()
if requestData.AuthRecord == nil { if info.Auth == nil {
return apis.NewForbiddenError("Forbidden", nil) return apis.NewForbiddenError("Forbidden", nil)
} }
url := c.QueryParam("url") url := e.Request.URL.Query().Get("url")
// log.Println("url", url) // log.Println("url", url)
if url == "" { if url == "" {
return c.JSON(200, map[string]string{"err": "URL is required"}) return e.JSON(200, map[string]string{"err": "URL is required"})
} }
err := am.SendShoutrrrAlert(url, "Test Alert", "This is a notification from Beszel.", am.app.Settings().Meta.AppUrl, "View Beszel") err := am.SendShoutrrrAlert(url, "Test Alert", "This is a notification from Beszel.", am.app.Settings().Meta.AppURL, "View Beszel")
if err != nil { if err != nil {
return c.JSON(200, map[string]string{"err": err.Error()}) return e.JSON(200, map[string]string{"err": err.Error()})
} }
return c.JSON(200, map[string]bool{"err": false}) return e.JSON(200, map[string]bool{"err": false})
} }

View File

@@ -28,6 +28,17 @@ type Stats struct {
MaxNetworkRecv float64 `json:"nrm,omitempty"` MaxNetworkRecv float64 `json:"nrm,omitempty"`
Temperatures map[string]float64 `json:"t,omitempty"` Temperatures map[string]float64 `json:"t,omitempty"`
ExtraFs map[string]*FsStats `json:"efs,omitempty"` ExtraFs map[string]*FsStats `json:"efs,omitempty"`
GPUData map[string]GPUData `json:"g,omitempty"`
}
type GPUData struct {
Name string `json:"n"`
Temperature float64 `json:"-"`
MemoryUsed float64 `json:"mu,omitempty"`
MemoryTotal float64 `json:"mt,omitempty"`
Usage float64 `json:"u"`
Power float64 `json:"p,omitempty"`
Count float64 `json:"-"`
} }
type FsStats struct { type FsStats struct {
@@ -63,6 +74,7 @@ type Info struct {
DiskPct float64 `json:"dp"` DiskPct float64 `json:"dp"`
Bandwidth float64 `json:"b"` Bandwidth float64 `json:"b"`
AgentVersion string `json:"v"` AgentVersion string `json:"v"`
Podman bool `json:"p,omitempty"`
} }
// Final data structure to return to the hub // Final data structure to return to the hub

View File

@@ -8,10 +8,9 @@ import (
"path/filepath" "path/filepath"
"strconv" "strconv"
"github.com/labstack/echo/v5"
"github.com/pocketbase/dbx" "github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/apis"
"github.com/pocketbase/pocketbase/models" "github.com/pocketbase/pocketbase/core"
"github.com/spf13/cast" "github.com/spf13/cast"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@@ -46,11 +45,11 @@ func (h *Hub) syncSystemsWithConfig() error {
return nil return nil
} }
var firstUser *models.Record var firstUser *core.Record
// Create a map of email to user ID // Create a map of email to user ID
userEmailToID := make(map[string]string) userEmailToID := make(map[string]string)
users, err := h.app.Dao().FindRecordsByExpr("users", dbx.NewExp("id != ''")) users, err := h.app.FindAllRecords("users", dbx.NewExp("id != ''"))
if err != nil { if err != nil {
return err return err
} }
@@ -85,13 +84,13 @@ func (h *Hub) syncSystemsWithConfig() error {
} }
// Get existing systems // Get existing systems
existingSystems, err := h.app.Dao().FindRecordsByExpr("systems", dbx.NewExp("id != ''")) existingSystems, err := h.app.FindAllRecords("systems", dbx.NewExp("id != ''"))
if err != nil { if err != nil {
return err return err
} }
// Create a map of existing systems for easy lookup // Create a map of existing systems for easy lookup
existingSystemsMap := make(map[string]*models.Record) existingSystemsMap := make(map[string]*core.Record)
for _, system := range existingSystems { for _, system := range existingSystems {
key := system.GetString("host") + ":" + system.GetString("port") key := system.GetString("host") + ":" + system.GetString("port")
existingSystemsMap[key] = system existingSystemsMap[key] = system
@@ -105,24 +104,24 @@ func (h *Hub) syncSystemsWithConfig() error {
existingSystem.Set("name", sysConfig.Name) existingSystem.Set("name", sysConfig.Name)
existingSystem.Set("users", sysConfig.Users) existingSystem.Set("users", sysConfig.Users)
existingSystem.Set("port", sysConfig.Port) existingSystem.Set("port", sysConfig.Port)
if err := h.app.Dao().SaveRecord(existingSystem); err != nil { if err := h.app.Save(existingSystem); err != nil {
return err return err
} }
delete(existingSystemsMap, key) delete(existingSystemsMap, key)
} else { } else {
// Create new system // Create new system
systemsCollection, err := h.app.Dao().FindCollectionByNameOrId("systems") systemsCollection, err := h.app.FindCollectionByNameOrId("systems")
if err != nil { if err != nil {
return fmt.Errorf("failed to find systems collection: %v", err) return fmt.Errorf("failed to find systems collection: %v", err)
} }
newSystem := models.NewRecord(systemsCollection) newSystem := core.NewRecord(systemsCollection)
newSystem.Set("name", sysConfig.Name) newSystem.Set("name", sysConfig.Name)
newSystem.Set("host", sysConfig.Host) newSystem.Set("host", sysConfig.Host)
newSystem.Set("port", sysConfig.Port) newSystem.Set("port", sysConfig.Port)
newSystem.Set("users", sysConfig.Users) newSystem.Set("users", sysConfig.Users)
newSystem.Set("info", system.Info{}) newSystem.Set("info", system.Info{})
newSystem.Set("status", "pending") newSystem.Set("status", "pending")
if err := h.app.Dao().SaveRecord(newSystem); err != nil { if err := h.app.Save(newSystem); err != nil {
return fmt.Errorf("failed to create new system: %v", err) return fmt.Errorf("failed to create new system: %v", err)
} }
} }
@@ -130,7 +129,7 @@ func (h *Hub) syncSystemsWithConfig() error {
// Delete systems not in config // Delete systems not in config
for _, system := range existingSystemsMap { for _, system := range existingSystemsMap {
if err := h.app.Dao().DeleteRecord(system); err != nil { if err := h.app.Delete(system); err != nil {
return err return err
} }
} }
@@ -142,7 +141,7 @@ func (h *Hub) syncSystemsWithConfig() error {
// Generates content for the config.yml file as a YAML string // Generates content for the config.yml file as a YAML string
func (h *Hub) generateConfigYAML() (string, error) { func (h *Hub) generateConfigYAML() (string, error) {
// Fetch all systems from the database // Fetch all systems from the database
systems, err := h.app.Dao().FindRecordsByFilter("systems", "id != ''", "name", -1, 0) systems, err := h.app.FindRecordsByFilter("systems", "id != ''", "name", -1, 0)
if err != nil { if err != nil {
return "", err return "", err
} }
@@ -195,7 +194,7 @@ func (h *Hub) generateConfigYAML() (string, error) {
// New helper function to get a map of user IDs to emails // New helper function to get a map of user IDs to emails
func (h *Hub) getUserEmailMap(userIDs []string) (map[string]string, error) { func (h *Hub) getUserEmailMap(userIDs []string) (map[string]string, error) {
users, err := h.app.Dao().FindRecordsByIds("users", userIDs) users, err := h.app.FindRecordsByIds("users", userIDs)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -209,14 +208,14 @@ func (h *Hub) getUserEmailMap(userIDs []string) (map[string]string, error) {
} }
// Returns the current config.yml file as a JSON object // Returns the current config.yml file as a JSON object
func (h *Hub) getYamlConfig(c echo.Context) error { func (h *Hub) getYamlConfig(e *core.RequestEvent) error {
requestData := apis.RequestInfo(c) info, _ := e.RequestInfo()
if requestData.AuthRecord == nil || requestData.AuthRecord.GetString("role") != "admin" { if info.Auth == nil || info.Auth.GetString("role") != "admin" {
return apis.NewForbiddenError("Forbidden", nil) return apis.NewForbiddenError("Forbidden", nil)
} }
configContent, err := h.generateConfigYAML() configContent, err := h.generateConfigYAML()
if err != nil { if err != nil {
return err return err
} }
return c.JSON(200, map[string]string{"config": configContent}) return e.JSON(200, map[string]string{"config": configContent})
} }

View File

@@ -14,6 +14,7 @@ import (
"encoding/pem" "encoding/pem"
"fmt" "fmt"
"log" "log"
"net"
"net/http" "net/http"
"net/http/httputil" "net/http/httputil"
"net/url" "net/url"
@@ -23,37 +24,31 @@ import (
"time" "time"
"github.com/goccy/go-json" "github.com/goccy/go-json"
"github.com/labstack/echo/v5"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/apis"
"github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/models"
"github.com/pocketbase/pocketbase/plugins/migratecmd" "github.com/pocketbase/pocketbase/plugins/migratecmd"
"github.com/pocketbase/pocketbase/tools/cron"
"golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh"
) )
type Hub struct { type Hub struct {
app *pocketbase.PocketBase app *pocketbase.PocketBase
connectionLock *sync.Mutex systemConnections sync.Map
systemConnections map[string]*ssh.Client
sshClientConfig *ssh.ClientConfig sshClientConfig *ssh.ClientConfig
pubKey string pubKey string
am *alerts.AlertManager am *alerts.AlertManager
um *users.UserManager um *users.UserManager
rm *records.RecordManager rm *records.RecordManager
systemStats *models.Collection systemStats *core.Collection
containerStats *models.Collection containerStats *core.Collection
} }
func NewHub(app *pocketbase.PocketBase) *Hub { func NewHub(app *pocketbase.PocketBase) *Hub {
return &Hub{ return &Hub{
app: app, app: app,
connectionLock: &sync.Mutex{}, am: alerts.NewAlertManager(app),
systemConnections: make(map[string]*ssh.Client), um: users.NewUserManager(app),
am: alerts.NewAlertManager(app), rm: records.NewRecordManager(app),
um: users.NewUserManager(app),
rm: records.NewRecordManager(app),
} }
} }
@@ -69,128 +64,140 @@ func (h *Hub) Run() {
}) })
// initial setup // initial setup
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error { h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
// create ssh client config // create ssh client config
err := h.createSSHClientConfig() err := h.createSSHClientConfig()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
// set general settings
settings := h.app.Settings()
// batch requests (for global alerts)
settings.Batch.Enabled = true
// set auth settings // set auth settings
usersCollection, err := h.app.Dao().FindCollectionByNameOrId("users") usersCollection, err := h.app.FindCollectionByNameOrId("users")
if err != nil { if err != nil {
return err return err
} }
usersAuthOptions := usersCollection.AuthOptions() // disable email auth if DISABLE_PASSWORD_AUTH env var is set
usersAuthOptions.AllowUsernameAuth = false usersCollection.PasswordAuth.Enabled = os.Getenv("DISABLE_PASSWORD_AUTH") != "true"
if os.Getenv("DISABLE_PASSWORD_AUTH") == "true" { usersCollection.PasswordAuth.IdentityFields = []string{"email"}
usersAuthOptions.AllowEmailAuth = false // disable oauth if no providers are configured (todo: remove this in post 0.9.0 release)
} else { if usersCollection.OAuth2.Enabled {
usersAuthOptions.AllowEmailAuth = true usersCollection.OAuth2.Enabled = len(usersCollection.OAuth2.Providers) > 0
} }
usersCollection.SetOptions(usersAuthOptions) // allow oauth user creation if USER_CREATION is set
if err := h.app.Dao().SaveCollection(usersCollection); err != nil { if os.Getenv("USER_CREATION") == "true" {
cr := "@request.context = 'oauth2'"
usersCollection.CreateRule = &cr
} else {
usersCollection.CreateRule = nil
}
if err := h.app.Save(usersCollection); err != nil {
return err return err
} }
// sync systems with config // sync systems with config
return h.syncSystemsWithConfig() h.syncSystemsWithConfig()
return se.Next()
}) })
// serve web ui // serve web ui
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error { h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
switch isGoRun { switch isGoRun {
case true: case true:
proxy := httputil.NewSingleHostReverseProxy(&url.URL{ proxy := httputil.NewSingleHostReverseProxy(&url.URL{
Scheme: "http", Scheme: "http",
Host: "localhost:5173", Host: "localhost:5173",
}) })
e.Router.Any("/*", echo.WrapHandler(proxy)) se.Router.Any("/", func(e *core.RequestEvent) error {
proxy.ServeHTTP(e.Response, e.Request)
return nil
})
default: default:
csp, cspExists := os.LookupEnv("CSP") csp, cspExists := os.LookupEnv("CSP")
e.Router.Any("/*", func(c echo.Context) error { se.Router.Any("/{path...}", func(e *core.RequestEvent) error {
if cspExists { if cspExists {
c.Response().Header().Del("X-Frame-Options") e.Response.Header().Del("X-Frame-Options")
c.Response().Header().Set("Content-Security-Policy", csp) e.Response.Header().Set("Content-Security-Policy", csp)
} }
indexFallback := !strings.HasPrefix(c.Request().URL.Path, "/static/") indexFallback := !strings.HasPrefix(e.Request.URL.Path, "/static/")
return apis.StaticDirectoryHandler(site.Dist, indexFallback)(c) return apis.Static(site.DistDirFS, indexFallback)(e)
}) })
} }
return nil return se.Next()
}) })
// set up scheduled jobs / ticker for system updates // set up scheduled jobs / ticker for system updates
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error { h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
// 15 second ticker for system updates // 15 second ticker for system updates
go h.startSystemUpdateTicker() go h.startSystemUpdateTicker()
// set up cron jobs // set up cron jobs
scheduler := cron.New()
// delete old records once every hour // delete old records once every hour
scheduler.MustAdd("delete old records", "8 * * * *", h.rm.DeleteOldRecords) h.app.Cron().MustAdd("delete old records", "8 * * * *", h.rm.DeleteOldRecords)
// create longer records every 10 minutes // create longer records every 10 minutes
scheduler.MustAdd("create longer records", "*/10 * * * *", func() { h.app.Cron().MustAdd("create longer records", "*/10 * * * *", func() {
if systemStats, containerStats, err := h.getCollections(); err == nil { if systemStats, containerStats, err := h.getCollections(); err == nil {
h.rm.CreateLongerRecords([]*models.Collection{systemStats, containerStats}) h.rm.CreateLongerRecords([]*core.Collection{systemStats, containerStats})
} }
}) })
scheduler.Start() return se.Next()
return nil
}) })
// custom api routes // custom api routes
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error { h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
// returns public key // returns public key
e.Router.GET("/api/beszel/getkey", func(c echo.Context) error { se.Router.GET("/api/beszel/getkey", func(e *core.RequestEvent) error {
requestData := apis.RequestInfo(c) info, _ := e.RequestInfo()
if requestData.AuthRecord == nil { if info.Auth == nil {
return apis.NewForbiddenError("Forbidden", nil) return apis.NewForbiddenError("Forbidden", nil)
} }
return c.JSON(http.StatusOK, map[string]string{"key": h.pubKey, "v": beszel.Version}) return e.JSON(http.StatusOK, map[string]string{"key": h.pubKey, "v": beszel.Version})
}) })
// check if first time setup on login page // check if first time setup on login page
e.Router.GET("/api/beszel/first-run", func(c echo.Context) error { se.Router.GET("/api/beszel/first-run", func(e *core.RequestEvent) error {
adminNum, err := h.app.Dao().TotalAdmins() total, err := h.app.CountRecords("users")
if err != nil { return e.JSON(http.StatusOK, map[string]bool{"firstRun": err == nil && total == 0})
return err
}
return c.JSON(http.StatusOK, map[string]bool{"firstRun": adminNum == 0})
}) })
// send test notification // send test notification
e.Router.GET("/api/beszel/send-test-notification", h.am.SendTestNotification) se.Router.GET("/api/beszel/send-test-notification", h.am.SendTestNotification)
// API endpoint to get config.yml content // API endpoint to get config.yml content
e.Router.GET("/api/beszel/config-yaml", h.getYamlConfig) se.Router.GET("/api/beszel/config-yaml", h.getYamlConfig)
return nil // create first user endpoint only needed if no users exist
if totalUsers, _ := h.app.CountRecords("users"); totalUsers == 0 {
se.Router.POST("/api/beszel/create-user", h.um.CreateFirstUser)
}
return se.Next()
}) })
// system creation defaults // system creation defaults
h.app.OnModelBeforeCreate("systems").Add(func(e *core.ModelEvent) error { h.app.OnRecordCreate("systems").BindFunc(func(e *core.RecordEvent) error {
record := e.Model.(*models.Record) e.Record.Set("info", system.Info{})
record.Set("info", system.Info{}) e.Record.Set("status", "pending")
record.Set("status", "pending") return e.Next()
return nil
}) })
// immediately create connection for new systems // immediately create connection for new systems
h.app.OnModelAfterCreate("systems").Add(func(e *core.ModelEvent) error { h.app.OnRecordAfterCreateSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
go h.updateSystem(e.Model.(*models.Record)) go h.updateSystem(e.Record)
return nil return e.Next()
}) })
// handle default values for user / user_settings creation // handle default values for user / user_settings creation
h.app.OnModelBeforeCreate("users").Add(h.um.InitializeUserRole) h.app.OnRecordCreate("users").BindFunc(h.um.InitializeUserRole)
h.app.OnModelBeforeCreate("user_settings").Add(h.um.InitializeUserSettings) h.app.OnRecordCreate("user_settings").BindFunc(h.um.InitializeUserSettings)
// empty info for systems that are paused // empty info for systems that are paused
h.app.OnModelBeforeUpdate("systems").Add(func(e *core.ModelEvent) error { h.app.OnRecordUpdate("systems").BindFunc(func(e *core.RecordEvent) error {
if e.Model.(*models.Record).GetString("status") == "paused" { if e.Record.GetString("status") == "paused" {
e.Model.(*models.Record).Set("info", system.Info{}) e.Record.Set("info", system.Info{})
} }
return nil return e.Next()
}) })
// do things after a systems record is updated // do things after a systems record is updated
h.app.OnModelAfterUpdate("systems").Add(func(e *core.ModelEvent) error { h.app.OnRecordAfterUpdateSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
newRecord := e.Model.(*models.Record) newRecord := e.Record.Fresh()
oldRecord := newRecord.OriginalCopy() oldRecord := newRecord.Original()
newStatus := newRecord.GetString("status") newStatus := newRecord.GetString("status")
// if system is disconnected and connection exists, remove it // if system is disconnected and connection exists, remove it
@@ -205,15 +212,13 @@ func (h *Hub) Run() {
h.am.HandleStatusAlerts(newStatus, oldRecord) h.am.HandleStatusAlerts(newStatus, oldRecord)
} }
return e.Next()
return nil
}) })
// do things after a systems record is deleted // if system is deleted, close connection
h.app.OnModelAfterDelete("systems").Add(func(e *core.ModelEvent) error { h.app.OnRecordAfterDeleteSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
// if system connection exists, close it h.deleteSystemConnection(e.Record)
h.deleteSystemConnection(e.Model.(*models.Record)) return e.Next()
return nil
}) })
if err := h.app.Start(); err != nil { if err := h.app.Start(); err != nil {
@@ -222,14 +227,14 @@ func (h *Hub) Run() {
} }
func (h *Hub) startSystemUpdateTicker() { func (h *Hub) startSystemUpdateTicker() {
ticker := time.NewTicker(15 * time.Second) c := time.Tick(15 * time.Second)
for range ticker.C { for range c {
h.updateSystems() h.updateSystems()
} }
} }
func (h *Hub) updateSystems() { func (h *Hub) updateSystems() {
records, err := h.app.Dao().FindRecordsByFilter( records, err := h.app.FindRecordsByFilter(
"2hz5ncl8tizk5nx", // systems collection "2hz5ncl8tizk5nx", // systems collection
"status != 'paused'", // filter "status != 'paused'", // filter
"updated", // sort "updated", // sort
@@ -258,13 +263,13 @@ func (h *Hub) updateSystems() {
} }
} }
func (h *Hub) updateSystem(record *models.Record) { func (h *Hub) updateSystem(record *core.Record) {
var client *ssh.Client var client *ssh.Client
var err error var err error
// check if system connection data exists // check if system connection exists
if _, ok := h.systemConnections[record.Id]; ok { if existingClient, ok := h.systemConnections.Load(record.Id); ok {
client = h.systemConnections[record.Id] client = existingClient.(*ssh.Client)
} else { } else {
// create system connection // create system connection
client, err = h.createSystemConnection(record) client, err = h.createSystemConnection(record)
@@ -275,9 +280,7 @@ func (h *Hub) updateSystem(record *models.Record) {
} }
return return
} }
h.connectionLock.Lock() h.systemConnections.Store(record.Id, client)
h.systemConnections[record.Id] = client
h.connectionLock.Unlock()
} }
// get system stats from agent // get system stats from agent
var systemData system.CombinedData var systemData system.CombinedData
@@ -286,6 +289,7 @@ func (h *Hub) updateSystem(record *models.Record) {
// if previous connection was closed, try again // if previous connection was closed, try again
h.app.Logger().Error("Existing SSH connection closed. Retrying...", "host", record.GetString("host"), "port", record.GetString("port")) h.app.Logger().Error("Existing SSH connection closed. Retrying...", "host", record.GetString("host"), "port", record.GetString("port"))
h.deleteSystemConnection(record) h.deleteSystemConnection(record)
time.Sleep(time.Millisecond * 100)
h.updateSystem(record) h.updateSystem(record)
return return
} }
@@ -294,10 +298,9 @@ func (h *Hub) updateSystem(record *models.Record) {
return return
} }
// update system record // update system record
dao := h.app.Dao()
record.Set("status", "up") record.Set("status", "up")
record.Set("info", systemData.Info) record.Set("info", systemData.Info)
if err := dao.SaveRecord(record); err != nil { if err := h.app.SaveNoValidate(record); err != nil {
h.app.Logger().Error("Failed to update record: ", "err", err.Error()) h.app.Logger().Error("Failed to update record: ", "err", err.Error())
} }
// add system_stats and container_stats records // add system_stats and container_stats records
@@ -305,42 +308,42 @@ func (h *Hub) updateSystem(record *models.Record) {
h.app.Logger().Error("Failed to get collections: ", "err", err.Error()) h.app.Logger().Error("Failed to get collections: ", "err", err.Error())
} else { } else {
// add new system_stats record // add new system_stats record
systemStatsRecord := models.NewRecord(systemStats) systemStatsRecord := core.NewRecord(systemStats)
systemStatsRecord.Set("system", record.Id) systemStatsRecord.Set("system", record.Id)
systemStatsRecord.Set("stats", systemData.Stats) systemStatsRecord.Set("stats", systemData.Stats)
systemStatsRecord.Set("type", "1m") systemStatsRecord.Set("type", "1m")
if err := dao.SaveRecord(systemStatsRecord); err != nil { if err := h.app.SaveNoValidate(systemStatsRecord); err != nil {
h.app.Logger().Error("Failed to save record: ", "err", err.Error()) h.app.Logger().Error("Failed to save record: ", "err", err.Error())
} }
// add new container_stats record // add new container_stats record
if len(systemData.Containers) > 0 { if len(systemData.Containers) > 0 {
containerStatsRecord := models.NewRecord(containerStats) containerStatsRecord := core.NewRecord(containerStats)
containerStatsRecord.Set("system", record.Id) containerStatsRecord.Set("system", record.Id)
containerStatsRecord.Set("stats", systemData.Containers) containerStatsRecord.Set("stats", systemData.Containers)
containerStatsRecord.Set("type", "1m") containerStatsRecord.Set("type", "1m")
if err := dao.SaveRecord(containerStatsRecord); err != nil { if err := h.app.SaveNoValidate(containerStatsRecord); err != nil {
h.app.Logger().Error("Failed to save record: ", "err", err.Error()) h.app.Logger().Error("Failed to save record: ", "err", err.Error())
} }
} }
} }
// system info alerts (todo: extra fs alerts) // system info alerts
if err := h.am.HandleSystemAlerts(record, systemData.Info, systemData.Stats.Temperatures, systemData.Stats.ExtraFs); err != nil { if err := h.am.HandleSystemAlerts(record, systemData.Info, systemData.Stats.Temperatures, systemData.Stats.ExtraFs); err != nil {
h.app.Logger().Error("System alerts error", "err", err.Error()) h.app.Logger().Error("System alerts error", "err", err.Error())
} }
} }
// return system_stats and container_stats collections // return system_stats and container_stats collections
func (h *Hub) getCollections() (*models.Collection, *models.Collection, error) { func (h *Hub) getCollections() (*core.Collection, *core.Collection, error) {
if h.systemStats == nil { if h.systemStats == nil {
systemStats, err := h.app.Dao().FindCollectionByNameOrId("system_stats") systemStats, err := h.app.FindCollectionByNameOrId("system_stats")
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
h.systemStats = systemStats h.systemStats = systemStats
} }
if h.containerStats == nil { if h.containerStats == nil {
containerStats, err := h.app.Dao().FindCollectionByNameOrId("container_stats") containerStats, err := h.app.FindCollectionByNameOrId("container_stats")
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@@ -350,28 +353,27 @@ func (h *Hub) getCollections() (*models.Collection, *models.Collection, error) {
} }
// set system to specified status and save record // set system to specified status and save record
func (h *Hub) updateSystemStatus(record *models.Record, status string) { func (h *Hub) updateSystemStatus(record *core.Record, status string) {
if record.GetString("status") != status { if record.Fresh().GetString("status") != status {
record.Set("status", status) record.Set("status", status)
if err := h.app.Dao().SaveRecord(record); err != nil { if err := h.app.SaveNoValidate(record); err != nil {
h.app.Logger().Error("Failed to update record: ", "err", err.Error()) h.app.Logger().Error("Failed to update record: ", "err", err.Error())
} }
} }
} }
func (h *Hub) deleteSystemConnection(record *models.Record) { // delete system connection from map and close connection
if _, ok := h.systemConnections[record.Id]; ok { func (h *Hub) deleteSystemConnection(record *core.Record) {
if h.systemConnections[record.Id] != nil { if client, ok := h.systemConnections.Load(record.Id); ok {
h.systemConnections[record.Id].Close() if sshClient := client.(*ssh.Client); sshClient != nil {
sshClient.Close()
} }
h.connectionLock.Lock() h.systemConnections.Delete(record.Id)
defer h.connectionLock.Unlock()
delete(h.systemConnections, record.Id)
} }
} }
func (h *Hub) createSystemConnection(record *models.Record) (*ssh.Client, error) { func (h *Hub) createSystemConnection(record *core.Record) (*ssh.Client, error) {
client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%s", record.GetString("host"), record.GetString("port")), h.sshClientConfig) client, err := ssh.Dial("tcp", net.JoinHostPort(record.GetString("host"), record.GetString("port")), h.sshClientConfig)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -397,14 +399,14 @@ func (h *Hub) createSSHClientConfig() error {
ssh.PublicKeys(signer), ssh.PublicKeys(signer),
}, },
HostKeyCallback: ssh.InsecureIgnoreHostKey(), HostKeyCallback: ssh.InsecureIgnoreHostKey(),
Timeout: 5 * time.Second, Timeout: 4 * time.Second,
} }
return nil return nil
} }
// Fetches system stats from the agent and decodes the json data into the provided struct // Fetches system stats from the agent and decodes the json data into the provided struct
func (h *Hub) requestJsonFromAgent(client *ssh.Client, systemData *system.CombinedData) error { func (h *Hub) requestJsonFromAgent(client *ssh.Client, systemData *system.CombinedData) error {
session, err := newSessionWithTimeout(client, 5*time.Second) session, err := newSessionWithTimeout(client, 4*time.Second)
if err != nil { if err != nil {
return fmt.Errorf("bad client") return fmt.Errorf("bad client")
} }

View File

@@ -11,8 +11,7 @@ import (
"github.com/goccy/go-json" "github.com/goccy/go-json"
"github.com/pocketbase/dbx" "github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/daos" "github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/models"
"github.com/pocketbase/pocketbase/tools/types" "github.com/pocketbase/pocketbase/tools/types"
) )
@@ -41,7 +40,7 @@ func NewRecordManager(app *pocketbase.PocketBase) *RecordManager {
} }
// Create longer records by averaging shorter records // Create longer records by averaging shorter records
func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) { func (rm *RecordManager) CreateLongerRecords(collections []*core.Collection) {
// start := time.Now() // start := time.Now()
longerRecordData := []LongerRecordData{ longerRecordData := []LongerRecordData{
{ {
@@ -71,8 +70,8 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
}, },
} }
// wrap the operations in a transaction // wrap the operations in a transaction
rm.app.Dao().RunInTransaction(func(txDao *daos.Dao) error { rm.app.RunInTransaction(func(txApp core.App) error {
activeSystems, err := txDao.FindRecordsByExpr("systems", dbx.NewExp("status = 'up'")) activeSystems, err := txApp.FindAllRecords("systems", dbx.NewExp("status = 'up'"))
if err != nil { if err != nil {
log.Println("failed to get active systems", "err", err.Error()) log.Println("failed to get active systems", "err", err.Error())
return err return err
@@ -92,7 +91,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
for _, collection := range collections { for _, collection := range collections {
// check creation time of last longer record if not 10m, since 10m is created every run // check creation time of last longer record if not 10m, since 10m is created every run
if recordData.longerType != "10m" { if recordData.longerType != "10m" {
lastLongerRecord, err := txDao.FindFirstRecordByFilter( lastLongerRecord, err := txApp.FindFirstRecordByFilter(
collection.Id, collection.Id,
"type = {:type} && system = {:system} && created > {:created}", "type = {:type} && system = {:system} && created > {:created}",
dbx.Params{"type": recordData.longerType, "system": system.Id, "created": longerRecordPeriod}, dbx.Params{"type": recordData.longerType, "system": system.Id, "created": longerRecordPeriod},
@@ -106,7 +105,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
// get shorter records from the past x minutes // get shorter records from the past x minutes
var stats RecordStats var stats RecordStats
err := txDao.DB(). err := txApp.DB().
Select("stats"). Select("stats").
From(collection.Name). From(collection.Name).
AndWhere(dbx.NewExp( AndWhere(dbx.NewExp(
@@ -125,7 +124,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
continue continue
} }
// average the shorter records and create longer record // average the shorter records and create longer record
longerRecord := models.NewRecord(collection) longerRecord := core.NewRecord(collection)
longerRecord.Set("system", system.Id) longerRecord.Set("system", system.Id)
longerRecord.Set("type", recordData.longerType) longerRecord.Set("type", recordData.longerType)
switch collection.Name { switch collection.Name {
@@ -134,7 +133,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
case "container_stats": case "container_stats":
longerRecord.Set("stats", rm.AverageContainerStats(stats)) longerRecord.Set("stats", rm.AverageContainerStats(stats))
} }
if err := txDao.SaveRecord(longerRecord); err != nil { if err := txApp.SaveNoValidate(longerRecord); err != nil {
log.Println("failed to save longer record", "err", err.Error()) log.Println("failed to save longer record", "err", err.Error())
} }
} }
@@ -149,17 +148,14 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
// Calculate the average stats of a list of system_stats records without reflect // Calculate the average stats of a list of system_stats records without reflect
func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats { func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
sum := system.Stats{ sum := system.Stats{}
Temperatures: make(map[string]float64),
ExtraFs: make(map[string]*system.FsStats),
}
count := float64(len(records)) count := float64(len(records))
// use different counter for temps in case some records don't have them // use different counter for temps in case some records don't have them
tempCount := float64(0) tempCount := float64(0)
var stats system.Stats var stats system.Stats
for i := range records { for i := range records {
stats = system.Stats{} // Zero the struct before unmarshalling
json.Unmarshal(records[i].Stats, &stats) json.Unmarshal(records[i].Stats, &stats)
sum.Cpu += stats.Cpu sum.Cpu += stats.Cpu
sum.Mem += stats.Mem sum.Mem += stats.Mem
@@ -184,6 +180,9 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
sum.MaxDiskWritePs = max(sum.MaxDiskWritePs, stats.MaxDiskWritePs, stats.DiskWritePs) sum.MaxDiskWritePs = max(sum.MaxDiskWritePs, stats.MaxDiskWritePs, stats.DiskWritePs)
// add temps to sum // add temps to sum
if stats.Temperatures != nil { if stats.Temperatures != nil {
if sum.Temperatures == nil {
sum.Temperatures = make(map[string]float64, len(stats.Temperatures))
}
tempCount++ tempCount++
for key, value := range stats.Temperatures { for key, value := range stats.Temperatures {
if _, ok := sum.Temperatures[key]; !ok { if _, ok := sum.Temperatures[key]; !ok {
@@ -194,6 +193,9 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
} }
// add extra fs to sum // add extra fs to sum
if stats.ExtraFs != nil { if stats.ExtraFs != nil {
if sum.ExtraFs == nil {
sum.ExtraFs = make(map[string]*system.FsStats, len(stats.ExtraFs))
}
for key, value := range stats.ExtraFs { for key, value := range stats.ExtraFs {
if _, ok := sum.ExtraFs[key]; !ok { if _, ok := sum.ExtraFs[key]; !ok {
sum.ExtraFs[key] = &system.FsStats{} sum.ExtraFs[key] = &system.FsStats{}
@@ -207,6 +209,25 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
sum.ExtraFs[key].MaxDiskWritePS = max(sum.ExtraFs[key].MaxDiskWritePS, value.MaxDiskWritePS, value.DiskWritePs) sum.ExtraFs[key].MaxDiskWritePS = max(sum.ExtraFs[key].MaxDiskWritePS, value.MaxDiskWritePS, value.DiskWritePs)
} }
} }
// add GPU data
if stats.GPUData != nil {
if sum.GPUData == nil {
sum.GPUData = make(map[string]system.GPUData, len(stats.GPUData))
}
for id, value := range stats.GPUData {
if _, ok := sum.GPUData[id]; !ok {
sum.GPUData[id] = system.GPUData{Name: value.Name}
}
gpu := sum.GPUData[id]
gpu.Temperature += value.Temperature
gpu.MemoryUsed += value.MemoryUsed
gpu.MemoryTotal += value.MemoryTotal
gpu.Usage += value.Usage
gpu.Power += value.Power
gpu.Count += value.Count
sum.GPUData[id] = gpu
}
}
} }
stats = system.Stats{ stats = system.Stats{
@@ -232,14 +253,14 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
MaxNetworkRecv: sum.MaxNetworkRecv, MaxNetworkRecv: sum.MaxNetworkRecv,
} }
if len(sum.Temperatures) != 0 { if sum.Temperatures != nil {
stats.Temperatures = make(map[string]float64, len(sum.Temperatures)) stats.Temperatures = make(map[string]float64, len(sum.Temperatures))
for key, value := range sum.Temperatures { for key, value := range sum.Temperatures {
stats.Temperatures[key] = twoDecimals(value / tempCount) stats.Temperatures[key] = twoDecimals(value / tempCount)
} }
} }
if len(sum.ExtraFs) != 0 { if sum.ExtraFs != nil {
stats.ExtraFs = make(map[string]*system.FsStats, len(sum.ExtraFs)) stats.ExtraFs = make(map[string]*system.FsStats, len(sum.ExtraFs))
for key, value := range sum.ExtraFs { for key, value := range sum.ExtraFs {
stats.ExtraFs[key] = &system.FsStats{ stats.ExtraFs[key] = &system.FsStats{
@@ -253,6 +274,21 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
} }
} }
if sum.GPUData != nil {
stats.GPUData = make(map[string]system.GPUData, len(sum.GPUData))
for id, value := range sum.GPUData {
stats.GPUData[id] = system.GPUData{
Name: value.Name,
Temperature: twoDecimals(value.Temperature / count),
MemoryUsed: twoDecimals(value.MemoryUsed / count),
MemoryTotal: twoDecimals(value.MemoryTotal / count),
Usage: twoDecimals(value.Usage / count),
Power: twoDecimals(value.Power / count),
Count: twoDecimals(value.Count / count),
}
}
}
return stats return stats
} }
@@ -318,7 +354,7 @@ func (rm *RecordManager) DeleteOldRecords() {
retention: 30 * 24 * time.Hour, retention: 30 * 24 * time.Hour,
}, },
} }
db := rm.app.Dao().NonconcurrentDB() db := rm.app.NonconcurrentDB()
for _, recordData := range recordData { for _, recordData := range recordData {
for _, collectionSlug := range collections { for _, collectionSlug := range collections {
formattedDate := time.Now().UTC().Add(-recordData.retention).Format(types.DefaultDateLayout) formattedDate := time.Now().UTC().Add(-recordData.retention).Format(types.DefaultDateLayout)

View File

@@ -2,11 +2,13 @@
package users package users
import ( import (
"beszel/migrations"
"log" "log"
"net/http"
"strings"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/models"
) )
type UserManager struct { type UserManager struct {
@@ -26,16 +28,17 @@ func NewUserManager(app *pocketbase.PocketBase) *UserManager {
} }
} }
func (um *UserManager) InitializeUserRole(e *core.ModelEvent) error { // Initialize user role if not set
user := e.Model.(*models.Record) func (um *UserManager) InitializeUserRole(e *core.RecordEvent) error {
if user.GetString("role") == "" { if e.Record.GetString("role") == "" {
user.Set("role", "user") e.Record.Set("role", "user")
} }
return nil return e.Next()
} }
func (um *UserManager) InitializeUserSettings(e *core.ModelEvent) error { // Initialize user settings with defaults if not set
record := e.Model.(*models.Record) func (um *UserManager) InitializeUserSettings(e *core.RecordEvent) error {
record := e.Record
// intialize settings with defaults // intialize settings with defaults
settings := UserSettings{ settings := UserSettings{
// Language: "en", // Language: "en",
@@ -46,7 +49,7 @@ func (um *UserManager) InitializeUserSettings(e *core.ModelEvent) error {
record.UnmarshalJSONField("settings", &settings) record.UnmarshalJSONField("settings", &settings)
if len(settings.NotificationEmails) == 0 { if len(settings.NotificationEmails) == 0 {
// get user email from auth record // get user email from auth record
if errs := um.app.Dao().ExpandRecord(record, []string{"user"}, nil); len(errs) == 0 { if errs := um.app.ExpandRecord(record, []string{"user"}, nil); len(errs) == 0 {
// app.Logger().Error("failed to expand user relation", "errs", errs) // app.Logger().Error("failed to expand user relation", "errs", errs)
if user := record.ExpandedOne("user"); user != nil { if user := record.ExpandedOne("user"); user != nil {
settings.NotificationEmails = []string{user.GetString("email")} settings.NotificationEmails = []string{user.GetString("email")}
@@ -61,5 +64,57 @@ func (um *UserManager) InitializeUserSettings(e *core.ModelEvent) error {
// settings.NotificationWebhooks = []string{""} // settings.NotificationWebhooks = []string{""}
// } // }
record.Set("settings", settings) record.Set("settings", settings)
return nil return e.Next()
}
// Custom API endpoint to create the first user.
// Mimics previous default behavior in PocketBase < 0.23.0 allowing user to be created through the Beszel UI.
func (um *UserManager) CreateFirstUser(e *core.RequestEvent) error {
// check that there are no users
totalUsers, err := um.app.CountRecords("users")
if err != nil || totalUsers > 0 {
return e.JSON(http.StatusForbidden, map[string]string{"err": "Forbidden"})
}
// check that there is only one superuser and the email matches the email of the superuser we set up in initial-settings.go
adminUsers, err := um.app.FindAllRecords(core.CollectionNameSuperusers)
if err != nil || len(adminUsers) != 1 || adminUsers[0].GetString("email") != migrations.TempAdminEmail {
return e.JSON(http.StatusForbidden, map[string]string{"err": "Forbidden"})
}
// create first user using supplied email and password in request body
data := struct {
Email string `json:"email"`
Password string `json:"password"`
}{}
if err := e.BindBody(&data); err != nil {
return e.JSON(http.StatusBadRequest, map[string]string{"err": err.Error()})
}
if data.Email == "" || data.Password == "" {
return e.JSON(http.StatusBadRequest, map[string]string{"err": "Bad request"})
}
collection, _ := um.app.FindCollectionByNameOrId("users")
user := core.NewRecord(collection)
user.SetEmail(data.Email)
user.SetPassword(data.Password)
user.Set("role", "admin")
user.Set("verified", true)
if username := strings.Split(data.Email, "@")[0]; len(username) > 2 {
user.Set("username", username)
}
if err := um.app.Save(user); err != nil {
return e.JSON(http.StatusInternalServerError, map[string]string{"err": err.Error()})
}
// create superuser using the email of the first user
collection, _ = um.app.FindCollectionByNameOrId(core.CollectionNameSuperusers)
adminUser := core.NewRecord(collection)
adminUser.SetEmail(data.Email)
adminUser.SetPassword(data.Password)
if err := um.app.Save(adminUser); err != nil {
return e.JSON(http.StatusInternalServerError, map[string]string{"err": err.Error()})
}
// delete the intial superuser
if err := um.app.Delete(adminUsers[0]); err != nil {
return e.JSON(http.StatusInternalServerError, map[string]string{"err": err.Error()})
}
return e.JSON(http.StatusOK, map[string]string{"msg": "User created"})
} }

View File

@@ -1,481 +0,0 @@
package migrations
import (
"encoding/json"
"github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/daos"
m "github.com/pocketbase/pocketbase/migrations"
"github.com/pocketbase/pocketbase/models"
)
func init() {
m.Register(func(db dbx.Builder) error {
jsonData := `[
{
"id": "2hz5ncl8tizk5nx",
"created": "2024-07-07 16:08:20.979Z",
"updated": "2024-10-12 18:55:51.623Z",
"name": "systems",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "7xloxkwk",
"name": "name",
"type": "text",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
},
{
"system": false,
"id": "waj7seaf",
"name": "status",
"type": "select",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"up",
"down",
"paused",
"pending"
]
}
},
{
"system": false,
"id": "ve781smf",
"name": "host",
"type": "text",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
},
{
"system": false,
"id": "pij0k2jk",
"name": "port",
"type": "text",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
},
{
"system": false,
"id": "qoq64ntl",
"name": "info",
"type": "json",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSize": 2000000
}
},
{
"system": false,
"id": "jcarjnjj",
"name": "users",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": null,
"displayFields": null
}
}
],
"indexes": [],
"listRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id",
"viewRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id",
"createRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id && @request.auth.role != \"readonly\"",
"updateRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id && @request.auth.role != \"readonly\"",
"deleteRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id && @request.auth.role != \"readonly\"",
"options": {}
},
{
"id": "ej9oowivz8b2mht",
"created": "2024-07-07 16:09:09.179Z",
"updated": "2024-10-12 18:55:51.623Z",
"name": "system_stats",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "h9sg148r",
"name": "system",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "2hz5ncl8tizk5nx",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "azftn0be",
"name": "stats",
"type": "json",
"required": true,
"presentable": false,
"unique": false,
"options": {
"maxSize": 2000000
}
},
{
"system": false,
"id": "m1ekhli3",
"name": "type",
"type": "select",
"required": true,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"1m",
"10m",
"20m",
"120m",
"480m"
]
}
}
],
"indexes": [
"CREATE INDEX ` + "`" + `idx_GxIee0j` + "`" + ` ON ` + "`" + `system_stats` + "`" + ` (` + "`" + `system` + "`" + `)"
],
"listRule": "@request.auth.id != \"\"",
"viewRule": null,
"createRule": null,
"updateRule": null,
"deleteRule": null,
"options": {}
},
{
"id": "juohu4jipgc13v7",
"created": "2024-07-07 16:09:57.976Z",
"updated": "2024-10-12 18:55:51.623Z",
"name": "container_stats",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "hutcu6ps",
"name": "system",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "2hz5ncl8tizk5nx",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "r39hhnil",
"name": "stats",
"type": "json",
"required": true,
"presentable": false,
"unique": false,
"options": {
"maxSize": 2000000
}
},
{
"system": false,
"id": "vo7iuj96",
"name": "type",
"type": "select",
"required": true,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"1m",
"10m",
"20m",
"120m",
"480m"
]
}
}
],
"indexes": [],
"listRule": "@request.auth.id != \"\"",
"viewRule": null,
"createRule": null,
"updateRule": null,
"deleteRule": null,
"options": {}
},
{
"id": "_pb_users_auth_",
"created": "2024-07-14 16:25:18.226Z",
"updated": "2024-10-12 22:27:19.081Z",
"name": "users",
"type": "auth",
"system": false,
"schema": [
{
"system": false,
"id": "qkbp58ae",
"name": "role",
"type": "select",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"user",
"admin",
"readonly"
]
}
},
{
"system": false,
"id": "users_avatar",
"name": "avatar",
"type": "file",
"required": false,
"presentable": false,
"unique": false,
"options": {
"mimeTypes": [
"image/jpeg",
"image/png",
"image/svg+xml",
"image/gif",
"image/webp"
],
"thumbs": null,
"maxSelect": 1,
"maxSize": 5242880,
"protected": false
}
}
],
"indexes": [],
"listRule": "id = @request.auth.id",
"viewRule": "id = @request.auth.id",
"createRule": null,
"updateRule": null,
"deleteRule": null,
"options": {
"allowEmailAuth": true,
"allowOAuth2Auth": true,
"allowUsernameAuth": false,
"exceptEmailDomains": null,
"manageRule": null,
"minPasswordLength": 8,
"onlyEmailDomains": null,
"onlyVerified": true,
"requireEmail": false
}
},
{
"id": "elngm8x1l60zi2v",
"created": "2024-07-15 01:16:04.044Z",
"updated": "2024-10-12 22:27:29.128Z",
"name": "alerts",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "hn5ly3vi",
"name": "user",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "g5sl3jdg",
"name": "system",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "2hz5ncl8tizk5nx",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "zj3ingrv",
"name": "name",
"type": "select",
"required": true,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"Status",
"CPU",
"Memory",
"Disk",
"Temperature",
"Bandwidth"
]
}
},
{
"system": false,
"id": "o2ablxvn",
"name": "value",
"type": "number",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": null,
"noDecimal": false
}
},
{
"system": false,
"id": "fstdehcq",
"name": "min",
"type": "number",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 60,
"noDecimal": true
}
},
{
"system": false,
"id": "6hgdf6hs",
"name": "triggered",
"type": "bool",
"required": false,
"presentable": false,
"unique": false,
"options": {}
}
],
"indexes": [],
"listRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
"viewRule": "",
"createRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
"updateRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
"deleteRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
"options": {}
},
{
"id": "4afacsdnlu8q8r2",
"created": "2024-09-12 17:42:55.324Z",
"updated": "2024-10-12 18:55:51.624Z",
"name": "user_settings",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "d5vztyxa",
"name": "user",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": false,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "xcx4qgqq",
"name": "settings",
"type": "json",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSize": 2000000
}
}
],
"indexes": [
"CREATE UNIQUE INDEX ` + "`" + `idx_30Lwgf2` + "`" + ` ON ` + "`" + `user_settings` + "`" + ` (` + "`" + `user` + "`" + `)"
],
"listRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
"viewRule": null,
"createRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
"updateRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
"deleteRule": null,
"options": {}
}
]`
collections := []*models.Collection{}
if err := json.Unmarshal([]byte(jsonData), &collections); err != nil {
return err
}
return daos.New(db).ImportCollections(collections, true, nil)
}, func(db dbx.Builder) error {
return nil
})
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +1,29 @@
package migrations package migrations
import ( import (
"github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/daos"
m "github.com/pocketbase/pocketbase/migrations" m "github.com/pocketbase/pocketbase/migrations"
) )
func init() { var (
m.Register(func(db dbx.Builder) error { TempAdminEmail = "_@b.b"
dao := daos.New(db) )
settings, _ := dao.FindSettings() func init() {
m.Register(func(app core.App) error {
// initial settings
settings := app.Settings()
settings.Meta.AppName = "Beszel" settings.Meta.AppName = "Beszel"
settings.Meta.HideControls = true settings.Meta.HideControls = true
settings.Logs.MinLevel = 4
return dao.SaveSettings(settings) if err := app.Save(settings); err != nil {
return err
}
// create superuser
collection, _ := app.FindCollectionByNameOrId(core.CollectionNameSuperusers)
user := core.NewRecord(collection)
user.SetEmail(TempAdminEmail)
user.SetRandomPassword()
return app.Save(user)
}, nil) }, nil)
} }

Binary file not shown.

View File

@@ -3,11 +3,11 @@ package site
import ( import (
"embed" "embed"
"io/fs"
"github.com/labstack/echo/v5"
) )
//go:embed all:dist //go:embed all:dist
var assets embed.FS var distDir embed.FS
var Dist = echo.MustSubFS(assets, "dist") // DistDirFS contains the embedded dist directory files (without the "dist" prefix)
var DistDirFS, _ = fs.Sub(distDir, "dist")

View File

@@ -1,7 +1,31 @@
import type { LinguiConfig } from "@lingui/conf" import type { LinguiConfig } from "@lingui/conf"
const config: LinguiConfig = { const config: LinguiConfig = {
locales: ["en", "ar", "de", "es", "fr", "it", "ja", "ko", "pt", "tr", "ru", "uk", "vi", "zh-CN", "zh-HK"], locales: [
"en",
"ar",
"cs",
"da",
"de",
"es",
"fa",
"fr",
"hr",
"it",
"ja",
"ko",
"nl",
"pl",
"pt",
"tr",
"ru",
"sl",
"sv",
"uk",
"vi",
"zh-CN",
"zh-HK",
],
sourceLocale: "en", sourceLocale: "en",
compileNamespace: "ts", compileNamespace: "ts",
catalogs: [ catalogs: [

File diff suppressed because it is too large Load Diff

View File

@@ -5,61 +5,61 @@
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "lingui extract --overwrite && lingui compile && vite build",
"preview": "vite preview", "preview": "vite preview",
"sync": "lingui extract --overwrite && lingui compile", "sync": "lingui extract --overwrite && lingui compile",
"sync_and_purge": "lingui extract --overwrite --clean && lingui compile" "sync_and_purge": "lingui extract --overwrite --clean && lingui compile"
}, },
"dependencies": { "dependencies": {
"@henrygd/queue": "^1.0.7", "@henrygd/queue": "^1.0.7",
"@lingui/detect-locale": "^4.13.0", "@lingui/detect-locale": "^4.14.1",
"@lingui/macro": "^4.13.0", "@lingui/macro": "^4.14.1",
"@lingui/react": "^4.13.0", "@lingui/react": "^4.14.1",
"@nanostores/react": "^0.7.3", "@nanostores/react": "^0.7.3",
"@nanostores/router": "^0.11.0", "@nanostores/router": "^0.11.0",
"@radix-ui/react-alert-dialog": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.1.4",
"@radix-ui/react-checkbox": "^1.1.2", "@radix-ui/react-checkbox": "^1.1.3",
"@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dialog": "^1.1.4",
"@radix-ui/react-direction": "^1.1.0", "@radix-ui/react-direction": "^1.1.0",
"@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-dropdown-menu": "^2.1.4",
"@radix-ui/react-label": "^2.1.0", "@radix-ui/react-label": "^2.1.1",
"@radix-ui/react-select": "^2.1.2", "@radix-ui/react-select": "^2.1.4",
"@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-separator": "^1.1.1",
"@radix-ui/react-slider": "^1.2.1", "@radix-ui/react-slider": "^1.2.2",
"@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-slot": "^1.1.1",
"@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-switch": "^1.1.2",
"@radix-ui/react-tabs": "^1.1.1", "@radix-ui/react-tabs": "^1.1.2",
"@radix-ui/react-toast": "^1.2.2", "@radix-ui/react-toast": "^1.2.4",
"@radix-ui/react-tooltip": "^1.1.3", "@radix-ui/react-tooltip": "^1.1.6",
"@tanstack/react-table": "^8.20.5", "@tanstack/react-table": "^8.20.6",
"class-variance-authority": "^0.7.0", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cmdk": "^1.0.0", "cmdk": "^1.0.4",
"d3-time": "^3.1.0", "d3-time": "^3.1.0",
"lucide-react": "^0.452.0", "lucide-react": "^0.452.0",
"nanostores": "^0.11.3", "nanostores": "^0.11.3",
"pocketbase": "^0.21.5", "pocketbase": "^0.22.1",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"recharts": "^2.13.0", "recharts": "^2.15.0",
"tailwind-merge": "^2.5.4", "tailwind-merge": "^2.5.5",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"valibot": "^0.36.0" "valibot": "^0.36.0"
}, },
"devDependencies": { "devDependencies": {
"@lingui/cli": "^4.13.0", "@lingui/cli": "^4.14.1",
"@lingui/swc-plugin": "^4.1.0", "@lingui/swc-plugin": "^4.1.0",
"@lingui/vite-plugin": "^4.13.0", "@lingui/vite-plugin": "^4.14.1",
"@types/bun": "^1.1.11", "@types/bun": "^1.1.14",
"@types/react": "^18.3.11", "@types/react": "^18.3.17",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^18.3.5",
"@vitejs/plugin-react-swc": "^3.7.1", "@vitejs/plugin-react-swc": "^3.7.2",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"postcss": "^8.4.47", "postcss": "^8.4.49",
"tailwindcss": "^3.4.14", "tailwindcss": "^3.4.17",
"tailwindcss-rtl": "^0.9.0", "tailwindcss-rtl": "^0.9.0",
"typescript": "^5.6.3", "typescript": "^5.7.2",
"vite": "^5.4.9" "vite": "^5.4.11"
}, },
"overrides": { "overrides": {
"@nanostores/router": { "@nanostores/router": {

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.2 6.9c-1 0-2.5-1-4-1-2 0-4 1.1-5 3-2 3.6-.5 9 1.5 12 1 1.5 2.3 3.2 3.8 3.1 1.6 0 2.1-1 4-1 1.8 0 2.3 1 4 1 1.6 0 2.6-1.5 3.6-3a13 13 0 0 0 1.7-3.4 5.3 5.3 0 0 1-.6-9.4 5.6 5.6 0 0 0-4.4-2.4C14.8 5.6 13 7 12.2 7zm3.3-3c.9-1 1.4-2.5 1.3-3.9-1.2 0-2.7.8-3.6 1.8A5 5 0 0 0 12 5.5c1.3.1 2.7-.7 3.5-1.7"/></svg>

Before

Width:  |  Height:  |  Size: 378 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M.8 1.2a.8.8 0 0 0-.8 1l3.3 19.7c0 .5.5.9 1 .9h15.6a.8.8 0 0 0 .8-.7l3.3-20a.8.8 0 0 0-.8-.9zm13.7 14.3h-5l-1.3-7h7.5z"/></svg>

Before

Width:  |  Height:  |  Size: 196 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.3 4.4a19.8 19.8 0 0 0-4.9-1.5L14.7 4C13 4 11.1 4 9.3 4.1L8.6 3a19.7 19.7 0 0 0-5 1.5C.6 9-.4 13.6.1 18.1c2 1.5 4 2.4 6 3h.1c.5-.6.9-1.3 1.2-2l-1.9-1V18l.4-.3c4 1.8 8.2 1.8 12.1 0h.1l.4.3v.1a12.3 12.3 0 0 1-2 1l1.3 2c2-.6 4-1.5 6-3h.1c.5-5.2-.8-9.7-3.6-13.7zM8 15.4c-1.2 0-2.1-1.2-2.1-2.5s1-2.4 2.1-2.4c1.2 0 2.2 1 2.2 2.4 0 1.3-1 2.4-2.2 2.4zm8 0c-1.2 0-2.2-1.2-2.2-2.5s1-2.4 2.2-2.4c1.2 0 2.2 1 2.2 2.4 0 1.3-1 2.4-2.2 2.4Z"/></svg>

Before

Width:  |  Height:  |  Size: 506 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.1 23.7v-8H6.6V12h2.5v-1.5c0-4.1 1.8-6 5.9-6h1.4a8.7 8.7 0 0 1 1.2.3V8a8.6 8.6 0 0 0-.7 0 26.8 26.8 0 0 0-.7 0c-.7 0-1.3 0-1.7.3a1.7 1.7 0 0 0-.7.6c-.2.4-.3 1-.3 1.7V12h3.9l-.4 2.1-.3 1.6h-3.2V24a12 12 0 1 0-4.4-.3Z"/></svg>

Before

Width:  |  Height:  |  Size: 295 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4.2 4.6a4.2 4.2 0 0 0-2.9 1.1C-.4 7.3 0 9.7.1 10.1c0 .4.3 1.6 1.2 2.7C3 15 6.8 15 6.8 15S7.3 16 8 17c1 1.3 2 2.3 2.9 2.4H18s.4 0 1-.4c.6-.3 1-.9 1-.9s.6-.5 1.3-1.7l.5-1s2.1-4.6 2.1-9c0-1.2-.4-1.5-.4-1.5l-.4-.2s-4.5.3-6.8.3h-1.5v4.5l-.6-.3V5h-3.5l-6-.4h-.6zm.4 1.8s.3 2.3.7 3.6c.2 1.1 1 3 1 3l-1.7-.3c-1-.4-1.4-.8-1.4-.8s-.8-.5-1.1-1.5c-.7-1.7 0-2.7 0-2.7s.2-.9 1.4-1.1c.4-.2.9-.2 1-.2zM12.9 9l.5.1.9.4-.6 1.1a.7.7 0 0 0-.6.4.7.7 0 0 0 .1.7l-1 2a.7.7 0 0 0-.6.5.7.7 0 0 0 .3.7.7.7 0 0 0 1-.2.7.7 0 0 0-.2-.8l1-2a.7.7 0 0 0 .2 0 .7.7 0 0 0 .3 0 8.8 8.8 0 0 1 1 .4.8.8 0 0 1 .3.3l-.1.6c0 .3-.7 1.5-.7 1.5a.7.7 0 0 0-.7.5.7.7 0 1 0 1.2-.2l.2-.5.5-1.1c0-.1.2-.4.1-.8a1 1 0 0 0-.5-.7l-1-.6-.1-.2a.7.7 0 0 0-.2-.3l.5-1 3 1.4s.4.2.5.6v.6L16 16.8s-.2.5-.7.5a1 1 0 0 1-.4 0h-.2L10.4 15s-.4-.2-.5-.6l.1-.7 2-4.2s.3-.4.5-.5A.9.9 0 0 1 13 9z"/></svg>

Before

Width:  |  Height:  |  Size: 907 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm6 5.3c.4 0 .7.3.7.6v1.5a.6.6 0 0 1-.6.6H9.8C8.8 8 8 8.8 8 9.8v5.6c0 .3.3.6.6.6h5.6c1 0 1.8-.8 1.8-1.8V14a.6.6 0 0 0-.6-.6h-4.1a.6.6 0 0 1-.6-.6v-1.4a.6.6 0 0 1 .6-.6H18c.3 0 .6.2.6.6v3.4a4 4 0 0 1-4 4H5.9a.6.6 0 0 1-.6-.6V9.8a4.4 4.4 0 0 1 4.5-4.5H18Z"/></svg>

Before

Width:  |  Height:  |  Size: 406 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 .3a12 12 0 0 0-3.8 23.4c.6.1.8-.3.8-.6v-2c-3.3.7-4-1.6-4-1.6-.6-1.4-1.4-1.8-1.4-1.8-1-.7.1-.7.1-.7 1.2 0 1.9 1.2 1.9 1.2 1 1.8 2.8 1.3 3.5 1 0-.8.4-1.3.7-1.6-2.7-.3-5.5-1.3-5.5-6 0-1.2.5-2.3 1.3-3.1-.2-.4-.6-1.6 0-3.2 0 0 1-.3 3.4 1.2a11.5 11.5 0 0 1 6 0c2.3-1.5 3.3-1.2 3.3-1.2.6 1.6.2 2.8 0 3.2.9.8 1.3 1.9 1.3 3.2 0 4.6-2.8 5.6-5.5 5.9.5.4.9 1 .9 2.2v3.3c0 .3.1.7.8.6A12 12 0 0 0 12 .3"/></svg>

Before

Width:  |  Height:  |  Size: 470 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.6 9.6 20.3 1a.9.9 0 0 0-.3-.4.9.9 0 0 0-1 0 .9.9 0 0 0-.3.5l-2.2 6.7h-9L5.3 1.1A.9.9 0 0 0 5 .6a.9.9 0 0 0-1 0 .9.9 0 0 0-.3.4L.4 9.5a6 6 0 0 0 2 7.1l5 3.8 2.5 1.8 1.5 1.1a1 1 0 0 0 1.2 0l1.5-1 2.5-2 5-3.7a6 6 0 0 0 2-7z"/></svg>

Before

Width:  |  Height:  |  Size: 302 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.5 11v3.2h7.8a7 7 0 0 1-1.8 4.1 8 8 0 0 1-6 2.4c-4.8 0-8.6-3.9-8.6-8.7a8.6 8.6 0 0 1 14.5-6.4l2.3-2.3C18.7 1.4 16 0 12.5 0 5.9 0 .3 5.4.3 12S6 24 12.5 24a11 11 0 0 0 8.4-3.4c2.1-2.1 2.8-5.2 2.8-7.6 0-.8 0-1.5-.2-2h-11z"/></svg>

Before

Width:  |  Height:  |  Size: 299 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 0C5.8.2 5 .4 4.1.7 3.3 1 2.7 1.4 2 2c-.7.7-1 1.4-1.4 2.2C.3 4.9.1 5.8.1 7a84.6 84.6 0 0 0 .5 12.8c.4.8.8 1.4 1.4 2.1.7.7 1.4 1 2.2 1.4.7.3 1.6.5 2.9.5a85 85 0 0 0 12.8-.5c.8-.4 1.4-.8 2.1-1.4.7-.7 1-1.4 1.4-2.2.3-.7.5-1.6.5-2.9a85 85 0 0 0-.5-12.8C23 3.3 22.6 2.7 22 2c-.7-.7-1.4-1-2.2-1.4-.7-.3-1.6-.5-2.9-.5A85.5 85.5 0 0 0 7 0m.2 21.7c-1.2 0-1.8-.3-2.3-.4-.5-.2-1-.5-1.3-1-.5-.3-.7-.7-1-1.3-.1-.4-.3-1-.4-2.2a84.8 84.8 0 0 1 .4-12c.2-.5.5-1 1-1.3.3-.5.7-.7 1.3-1 .4-.1 1-.3 2.2-.4a84.4 84.4 0 0 1 12 .4c.5.3 1 .5 1.3 1 .5.3.7.7 1 1.3.1.4.3 1 .4 2.2a82.7 82.7 0 0 1-.4 12c-.2.5-.5 1-1 1.3-.3.5-.7.7-1.3 1-.4.1-1 .3-2.2.4a84.9 84.9 0 0 1-9.7 0M17 5.6A1.4 1.4 0 1 0 18.4 4 1.4 1.4 0 0 0 17 5.6M5.8 12a6.2 6.2 0 1 0 12.4 0 6.2 6.2 0 0 0-12.4 0M8 12a4 4 0 1 1 4 4 4 4 0 0 1-4-4"/></svg>

Before

Width:  |  Height:  |  Size: 856 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.5.9 11 2.7v18.1c-4.1-.5-7.3-2.7-7.3-5.5 0-2.5 2.8-4.7 6.7-5.4V7.6C4.4 8.3 0 11.5 0 15.3c0 4 4.7 7.3 11 7.8l3.5-1.7V.9m.7 6.7V10c1.4.3 2.7.7 3.7 1.3l-2 1.1L24 14l-.5-5.2-1.9 1c-1.7-1-4-1.8-6.4-2z"/></svg>

Before

Width:  |  Height:  |  Size: 276 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23 7.2c0-3-2.4-5.6-5.2-6.5-3.5-1.1-8.1-1-11.4.6-4 2-5.3 6-5.4 10.2C1 15 1.3 24 6.4 24c3.8 0 4.3-4.8 6-7.1 1.3-1.7 3-2.2 4.9-2.7a7.1 7.1 0 0 0 5.7-7Z"/></svg>

Before

Width:  |  Height:  |  Size: 227 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.7 0 12 0zm5.5 17.3c-.2.4-.6.5-1 .3-2.8-1.8-6.4-2.1-10.6-1.2-.4.2-.7-.1-.9-.5 0-.4.2-.8.6-.9 4.5-1 8.5-.6 11.6 1.3.4.2.5.7.3 1zM19 14c-.3.5-.9.6-1.3.3-3.2-2-8.2-2.5-12-1.3-.4 0-1-.2-1-.6-.2-.5 0-1 .5-1.2 4.4-1.3 9.8-.6 13.5 1.6.4.2.6.8.3 1.2zm0-3.3A19.9 19.9 0 0 0 5.3 9.3c-.6.2-1.2-.2-1.4-.7-.2-.6.2-1.2.7-1.4 4.3-1.3 11.3-1 15.7 1.6.6.3.7 1 .4 1.6-.3.4-1 .6-1.5.3z"/></svg>

Before

Width:  |  Height:  |  Size: 495 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m15.4 18-2.1-4.2h-3l5 10.2 5.2-10.2h-3m-7-5.6 2.8 5.6h4.2L10.5 0l-7 13.8h4.1"/></svg>

Before

Width:  |  Height:  |  Size: 154 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.6 4.7h1.7V10h-1.7zm4.7 0H18V10h-1.7zM6 0 1.7 4.3v15.4H7V24l4.2-4.3h3.5l7.7-7.7V0zm14.6 11.1L17 14.6h-3.4l-3 3v-3H7V1.7h13.7Z"/></svg>

Before

Width:  |  Height:  |  Size: 206 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M22.5 6c-.8.3-1.6.6-2.5.7.9-.5 1.6-1.4 1.9-2.4-.8.5-1.8.9-2.7 1a4.3 4.3 0 0 0-7.3 4C8.2 9 5 7.3 3 4.8a4.2 4.2 0 0 0 1.3 5.7c-.7 0-1.3-.2-2-.5 0 2.1 1.6 3.8 3.5 4.2a4.2 4.2 0 0 1-2 .1 4.3 4.3 0 0 0 4 3A8.5 8.5 0 0 1 2.7 19h-1A12.1 12.1 0 0 0 20.3 8.8v-.6c.8-.6 1.5-1.3 2-2.2"/></svg>

Before

Width:  |  Height:  |  Size: 371 B

View File

@@ -20,6 +20,7 @@ import { useStore } from "@nanostores/react"
import { cn, copyToClipboard, isReadOnlyUser } from "@/lib/utils" import { cn, copyToClipboard, isReadOnlyUser } from "@/lib/utils"
import { navigate } from "./router" import { navigate } from "./router"
import { Trans } from "@lingui/macro" import { Trans } from "@lingui/macro"
import { i18n } from "@lingui/core"
export function AddSystemButton({ className }: { className?: string }) { export function AddSystemButton({ className }: { className?: string }) {
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
@@ -36,23 +37,26 @@ export function AddSystemButton({ className }: { className?: string }) {
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
# monitor other disks / partitions by mounting a folder in /extra-filesystems # monitor other disks / partitions by mounting a folder in /extra-filesystems
# - /mnt/disk1/.beszel:/extra-filesystems/disk1:ro # - /mnt/disk/.beszel:/extra-filesystems/sda1:ro
environment: environment:
PORT: ${port} PORT: ${port}
KEY: "${publicKey}"`) KEY: "${publicKey}"`)
} }
function copyInstallCommand(port: string) { function copyInstallCommand(port: string) {
copyToClipboard( let cmd = `curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh -o install-agent.sh && chmod +x install-agent.sh && ./install-agent.sh -p ${port} -k "${publicKey}"`
`curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh -o install-agent.sh && chmod +x install-agent.sh && ./install-agent.sh -p ${port} -k "${publicKey}"` // add china mirrors flag if zh-CN
) if ((i18n.locale + navigator.language).includes("zh-CN")) {
cmd += ` --china-mirrors`
}
copyToClipboard(cmd)
} }
async function handleSubmit(e: SubmitEvent) { async function handleSubmit(e: SubmitEvent) {
e.preventDefault() e.preventDefault()
const formData = new FormData(e.target as HTMLFormElement) const formData = new FormData(e.target as HTMLFormElement)
const data = Object.fromEntries(formData) as Record<string, any> const data = Object.fromEntries(formData) as Record<string, any>
data.users = pb.authStore.model!.id data.users = pb.authStore.record!.id
try { try {
setOpen(false) setOpen(false)
await pb.collection("systems").create(data) await pb.collection("systems").create(data)
@@ -107,33 +111,27 @@ export function AddSystemButton({ className }: { className?: string }) {
</DialogDescription> </DialogDescription>
</TabsContent> </TabsContent>
<form onSubmit={handleSubmit as any}> <form onSubmit={handleSubmit as any}>
<div className="grid gap-3 mt-1 mb-4"> <div className="grid xs:grid-cols-[auto_1fr] gap-y-3 gap-x-4 items-center mt-1 mb-4">
<div className="grid grid-cols-4 items-center gap-4"> <Label htmlFor="name" className="xs:text-end">
<Label htmlFor="name" className="text-end"> <Trans>Name</Trans>
<Trans>Name</Trans> </Label>
</Label> <Input id="name" name="name" className="" required />
<Input id="name" name="name" className="col-span-3" required /> <Label htmlFor="host" className="xs:text-end">
</div> <Trans>Host / IP</Trans>
<div className="grid grid-cols-4 items-center gap-4"> </Label>
<Label htmlFor="host" className="text-end"> <Input id="host" name="host" className="" required />
<Trans>Host / IP</Trans> <Label htmlFor="port" className="xs:text-end">
</Label> <Trans>Port</Trans>
<Input id="host" name="host" className="col-span-3" required /> </Label>
</div> <Input ref={port} name="port" id="port" defaultValue="45876" className="" required />
<div className="grid grid-cols-4 items-center gap-4"> <Label htmlFor="pkey" className="xs:text-end whitespace-pre">
<Label htmlFor="port" className="text-end"> <Trans comment="Use 'Key' if your language requires many more characters">Public Key</Trans>
<Trans>Port</Trans> </Label>
</Label> <div className="relative">
<Input ref={port} name="port" id="port" defaultValue="45876" className="col-span-3" required /> <Input readOnly id="pkey" value={publicKey} className="" required></Input>
</div>
<div className="grid grid-cols-4 items-center gap-4 relative">
<Label htmlFor="pkey" className="text-end whitespace-pre">
<Trans comment="Use 'Key' if your language requires many more characters">Public Key</Trans>
</Label>
<Input readOnly id="pkey" value={publicKey} className="col-span-3" required></Input>
<div <div
className={ className={
"h-6 w-24 bg-gradient-to-r rtl:bg-gradient-to-l from-transparent to-background to-65% absolute end-1 pointer-events-none" "h-6 w-24 bg-gradient-to-r rtl:bg-gradient-to-l from-transparent to-background to-65% absolute top-2 end-1 pointer-events-none"
} }
></div> ></div>
<TooltipProvider delayDuration={100}> <TooltipProvider delayDuration={100}>
@@ -142,7 +140,7 @@ export function AddSystemButton({ className }: { className?: string }) {
<Button <Button
type="button" type="button"
variant={"link"} variant={"link"}
className="absolute end-0" className="absolute end-0 top-0"
onClick={() => copyToClipboard(publicKey)} onClick={() => copyToClipboard(publicKey)}
> >
<Copy className="h-4 w-4 " /> <Copy className="h-4 w-4 " />

View File

@@ -5,7 +5,6 @@ import { AlertInfo, AlertRecord, SystemRecord } from "@/types"
import { lazy, Suspense, useRef, useState } from "react" import { lazy, Suspense, useRef, useState } from "react"
import { toast } from "../ui/use-toast" import { toast } from "../ui/use-toast"
import { RecordOptions } from "pocketbase" import { RecordOptions } from "pocketbase"
import { newQueue, Queue } from "@henrygd/queue"
import { Trans, t, Plural } from "@lingui/macro" import { Trans, t, Plural } from "@lingui/macro"
interface AlertData { interface AlertData {
@@ -20,8 +19,6 @@ interface AlertData {
const Slider = lazy(() => import("@/components/ui/slider")) const Slider = lazy(() => import("@/components/ui/slider"))
let queue: Queue
const failedUpdateToast = () => const failedUpdateToast = () =>
toast({ toast({
title: t`Failed to update alert`, title: t`Failed to update alert`,
@@ -49,7 +46,7 @@ export function SystemAlert({
} else if (checked) { } else if (checked) {
pb.collection("alerts").create({ pb.collection("alerts").create({
system: system.id, system: system.id,
user: pb.authStore.model!.id, user: pb.authStore.record!.id,
name: data.key, name: data.key,
value: value, value: value,
min: min, min: min,
@@ -88,11 +85,7 @@ export function SystemAlertGlobal({
data.checked = false data.checked = false
data.val = data.min = 0 data.val = data.min = 0
data.updateAlert = (checked: boolean, value: number, min: number) => { data.updateAlert = async (checked: boolean, value: number, min: number) => {
if (!queue) {
queue = newQueue(5)
}
const { set, populatedSet } = systemsWithExistingAlerts.current const { set, populatedSet } = systemsWithExistingAlerts.current
// if overwrite checked, make sure all alerts will be overwritten // if overwrite checked, make sure all alerts will be overwritten
@@ -105,48 +98,57 @@ export function SystemAlertGlobal({
min, min,
triggered: false, triggered: false,
} }
for (let system of systems) {
// if overwrite is false and system is in set (alert existed), skip
if (!overwrite && set.has(system.id)) {
continue
}
// find matching existing alert
const existingAlert = alerts.find((alert) => alert.system === system.id && data.key === alert.name)
// if first run, add system to set (alert already existed when global panel was opened)
if (existingAlert && !populatedSet && !overwrite) {
set.add(system.id)
continue
}
const requestOptions: RecordOptions = {
requestKey: system.id,
}
// checked - make sure alert is created or updated // we can only send 50 in one batch
if (checked) { let done = 0
if (existingAlert) {
// console.log('updating', system.name) while (done < systems.length) {
queue const batch = pb.createBatch()
.add(() => pb.collection("alerts").update(existingAlert.id, recordData, requestOptions)) let batchSize = 0
.catch(failedUpdateToast)
} else { for (let i = done; i < Math.min(done + 50, systems.length); i++) {
// console.log('creating', system.name) const system = systems[i]
queue // if overwrite is false and system is in set (alert existed), skip
.add(() => if (!overwrite && set.has(system.id)) {
pb.collection("alerts").create( continue
{
system: system.id,
user: pb.authStore.model!.id,
name: data.key,
...recordData,
},
requestOptions
)
)
.catch(failedUpdateToast)
} }
} else if (existingAlert) { // find matching existing alert
// console.log('deleting', system.name) const existingAlert = alerts.find((alert) => alert.system === system.id && data.key === alert.name)
queue.add(() => pb.collection("alerts").delete(existingAlert.id)).catch(failedUpdateToast) // if first run, add system to set (alert already existed when global panel was opened)
if (existingAlert && !populatedSet && !overwrite) {
set.add(system.id)
continue
}
batchSize++
const requestOptions: RecordOptions = {
requestKey: system.id,
}
// checked - make sure alert is created or updated
if (checked) {
if (existingAlert) {
batch.collection("alerts").update(existingAlert.id, recordData, requestOptions)
} else {
batch.collection("alerts").create(
{
system: system.id,
user: pb.authStore.record!.id,
name: data.key,
...recordData,
},
requestOptions
)
}
} else if (existingAlert) {
batch.collection("alerts").delete(existingAlert.id)
}
}
try {
batchSize && batch.send()
} catch (e) {
failedUpdateToast()
} finally {
done += 50
} }
} }
systemsWithExistingAlerts.current.populatedSet = true systemsWithExistingAlerts.current.populatedSet = true

View File

@@ -33,11 +33,15 @@ export default memo(function AreaChartDefault({
unit = " MB/s", unit = " MB/s",
chartName, chartName,
chartData, chartData,
max,
tickFormatter,
}: { }: {
maxToggled?: boolean maxToggled?: boolean
unit?: string unit?: string
chartName: string chartName: string
chartData: ChartData chartData: ChartData
max?: number
tickFormatter?: (value: number) => string
}) { }) {
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth() const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
const { i18n } = useLingui() const { i18n } = useLingui()
@@ -52,19 +56,21 @@ export default memo(function AreaChartDefault({
return [[t`CPU Usage`, "cpu", 1, 0.4]] return [[t`CPU Usage`, "cpu", 1, 0.4]]
} else if (chartName === "dio") { } else if (chartName === "dio") {
return [ return [
[t({ message: "Write", comment: "Context is disk write" }), "dw", 3, 0.3], [t({ message: "Write", comment: "Disk write" }), "dw", 3, 0.3],
[t({ message: "Read", comment: "Context is disk read" }), "dr", 1, 0.3], [t({ message: "Read", comment: "Disk read" }), "dr", 1, 0.3],
] ]
} else if (chartName === "bw") { } else if (chartName === "bw") {
return [ return [
[t({ message: "Sent", comment: "Context is network bytes sent (upload)" }), "ns", 5, 0.2], [t({ message: "Sent", comment: "Network bytes sent (upload)" }), "ns", 5, 0.2],
[t({ message: "Received", comment: "Context is network bytes received (download)" }), "nr", 2, 0.2], [t({ message: "Received", comment: "Network bytes received (download)" }), "nr", 2, 0.2],
] ]
} else if (chartName.startsWith("efs")) { } else if (chartName.startsWith("efs")) {
return [ return [
[t`Read`, `${chartName}.w`, 3, 0.3], [t`Write`, `${chartName}.w`, 3, 0.3],
[t`Write`, `${chartName}.r`, 1, 0.3], [t`Read`, `${chartName}.r`, 1, 0.3],
] ]
} else if (chartName.startsWith("g.")) {
return [chartName.includes("mu") ? [t`Used`, chartName, 2, 0.25] : [t`Usage`, chartName, 1, 0.4]]
} }
return [] return []
}, [chartName, i18n.locale]) }, [chartName, i18n.locale])
@@ -89,8 +95,14 @@ export default memo(function AreaChartDefault({
orientation={chartData.orientation} orientation={chartData.orientation}
className="tracking-tighter" className="tracking-tighter"
width={yAxisWidth} width={yAxisWidth}
domain={[0, max ?? "auto"]}
tickFormatter={(value) => { tickFormatter={(value) => {
const val = toFixedWithoutTrailingZeros(value, 2) + unit let val: string
if (tickFormatter) {
val = tickFormatter(value)
} else {
val = toFixedWithoutTrailingZeros(value, 2) + unit
}
return updateYAxisWidth(val) return updateYAxisWidth(val)
}} }}
tickLine={false} tickLine={false}

View File

@@ -116,9 +116,9 @@ export default memo(function ContainerChart({
} }
// data function // data function
if (isNetChart) { if (isNetChart) {
obj.dataFunction = (key: string, data: any) => (data[key]?.nr ?? 0) + (data[key]?.ns ?? 0) obj.dataFunction = (key: string, data: any) => (data[key] ? data[key].nr + data[key].ns : null)
} else { } else {
obj.dataFunction = (key: string, data: any) => data[key]?.[dataKey] ?? 0 obj.dataFunction = (key: string, data: any) => data[key]?.[dataKey] ?? null
} }
return obj return obj
}, []) }, [])

View File

@@ -27,6 +27,11 @@ export default memo(function DiskChart({
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth() const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
const { _ } = useLingui() const { _ } = useLingui()
// round to nearest GB
if (diskSize >= 100) {
diskSize = Math.round(diskSize)
}
if (chartData.systemStats.length === 0) { if (chartData.systemStats.length === 0) {
return null return null
} }

View File

@@ -0,0 +1,112 @@
import { CartesianGrid, Line, LineChart, YAxis } from "recharts"
import {
ChartContainer,
ChartLegend,
ChartLegendContent,
ChartTooltip,
ChartTooltipContent,
xAxis,
} from "@/components/ui/chart"
import {
useYAxisWidth,
cn,
formatShortDate,
toFixedWithoutTrailingZeros,
decimalString,
chartMargin,
} from "@/lib/utils"
import { ChartData } from "@/types"
import { memo, useMemo } from "react"
export default memo(function GpuPowerChart({ chartData }: { chartData: ChartData }) {
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
if (chartData.systemStats.length === 0) {
return null
}
/** Format temperature data for chart and assign colors */
const newChartData = useMemo(() => {
const newChartData = { data: [], colors: {} } as {
data: Record<string, number | string>[]
colors: Record<string, string>
}
const powerSums = {} as Record<string, number>
for (let data of chartData.systemStats) {
let newData = { created: data.created } as Record<string, number | string>
for (let gpu of Object.values(data.stats?.g ?? {})) {
if (gpu.p) {
const name = gpu.n
newData[name] = gpu.p
powerSums[name] = (powerSums[name] ?? 0) + newData[name]
}
}
newChartData.data.push(newData)
}
const keys = Object.keys(powerSums).sort((a, b) => powerSums[b] - powerSums[a])
for (let key of keys) {
newChartData.colors[key] = `hsl(${((keys.indexOf(key) * 360) / keys.length) % 360}, 60%, 55%)`
}
return newChartData
}, [chartData])
const colors = Object.keys(newChartData.colors)
// console.log('rendered at', new Date())
return (
<div>
<ChartContainer
className={cn("h-full w-full absolute aspect-auto bg-card opacity-0 transition-opacity", {
"opacity-100": yAxisWidth,
})}
>
<LineChart accessibilityLayer data={newChartData.data} margin={chartMargin}>
<CartesianGrid vertical={false} />
<YAxis
direction="ltr"
orientation={chartData.orientation}
className="tracking-tighter"
domain={[0, "auto"]}
width={yAxisWidth}
tickFormatter={(value) => {
const val = toFixedWithoutTrailingZeros(value, 2)
return updateYAxisWidth(val + "W")
}}
tickLine={false}
axisLine={false}
/>
{xAxis(chartData)}
<ChartTooltip
animationEasing="ease-out"
animationDuration={150}
// @ts-ignore
itemSorter={(a, b) => b.value - a.value}
content={
<ChartTooltipContent
labelFormatter={(_, data) => formatShortDate(data[0].payload.created)}
contentFormatter={(item) => decimalString(item.value) + "W"}
// indicator="line"
/>
}
/>
{colors.map((key) => (
<Line
key={key}
dataKey={key}
name={key}
type="monotoneX"
dot={false}
strokeWidth={1.5}
stroke={newChartData.colors[key]}
isAnimationActive={false}
/>
))}
{colors.length > 1 && <ChartLegend content={<ChartLegendContent />} />}
</LineChart>
</ChartContainer>
</div>
)
})

View File

@@ -1,8 +1,7 @@
import { import {
BookIcon,
DatabaseBackupIcon, DatabaseBackupIcon,
Github,
LayoutDashboard, LayoutDashboard,
LockKeyholeIcon,
LogsIcon, LogsIcon,
MailIcon, MailIcon,
Server, Server,
@@ -115,16 +114,16 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp
</CommandShortcut> </CommandShortcut>
</CommandItem> </CommandItem>
<CommandItem <CommandItem
keywords={["github"]} keywords={["help", "oauth", "oidc"]}
onSelect={() => { onSelect={() => {
window.location.href = "https://github.com/henrygd/beszel/blob/main/readme.md" window.location.href = "https://beszel.dev/guide/what-is-beszel"
}} }}
> >
<Github className="me-2 h-4 w-4" /> <BookIcon className="me-2 h-4 w-4" />
<span> <span>
<Trans>Documentation</Trans> <Trans>Documentation</Trans>
</span> </span>
<CommandShortcut>GitHub</CommandShortcut> <CommandShortcut>beszel.dev</CommandShortcut>
</CommandItem> </CommandItem>
</CommandGroup> </CommandGroup>
{isAdmin() && ( {isAdmin() && (
@@ -174,21 +173,6 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp
<Trans>Admin</Trans> <Trans>Admin</Trans>
</CommandShortcut> </CommandShortcut>
</CommandItem> </CommandItem>
<CommandItem
keywords={["oauth", "oicd"]}
onSelect={() => {
setOpen(false)
window.open("/_/#/settings/auth-providers", "_blank")
}}
>
<LockKeyholeIcon className="me-2 h-4 w-4" />
<span>
<Trans>Auth Providers</Trans>
</span>
<CommandShortcut>
<Trans>Admin</Trans>
</CommandShortcut>
</CommandItem>
<CommandItem <CommandItem
keywords={["email"]} keywords={["email"]}
onSelect={() => { onSelect={() => {

View File

@@ -2,7 +2,7 @@ import { LanguagesIcon } from "lucide-react"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
import languages from "../lib/languages.json" import languages from "@/lib/languages"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
import { useLingui } from "@lingui/react" import { useLingui } from "@lingui/react"
import { dynamicActivate } from "@/lib/i18n" import { dynamicActivate } from "@/lib/i18n"
@@ -22,7 +22,7 @@ export function LangToggle() {
{languages.map(({ lang, label, e }) => ( {languages.map(({ lang, label, e }) => (
<DropdownMenuItem <DropdownMenuItem
key={lang} key={lang}
className={cn("px-3 flex gap-2.5", lang === i18n.locale && "font-semibold")} className={cn("px-2.5 flex gap-2.5", lang === i18n.locale && "font-semibold")}
onClick={() => dynamicActivate(lang)} onClick={() => dynamicActivate(lang)}
> >
<span>{e}</span> {label} <span>{e}</span> {label}

View File

@@ -2,7 +2,7 @@ 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"
import { Label } from "@/components/ui/label" import { Label } from "@/components/ui/label"
import { LoaderCircle, LockIcon, LogInIcon, MailIcon, UserIcon } from "lucide-react" import { LoaderCircle, LockIcon, LogInIcon, MailIcon } from "lucide-react"
import { $authenticated, pb } from "@/lib/stores" import { $authenticated, pb } from "@/lib/stores"
import * as v from "valibot" import * as v from "valibot"
import { toast } from "../ui/use-toast" import { toast } from "../ui/use-toast"
@@ -14,7 +14,7 @@ import { Trans, t } from "@lingui/macro"
const honeypot = v.literal("") const honeypot = v.literal("")
const emailSchema = v.pipe(v.string(), v.email(t`Invalid email address.`)) const emailSchema = v.pipe(v.string(), v.email(t`Invalid email address.`))
const passwordSchema = v.pipe(v.string(), v.minLength(10, t`Password must be at least 10 characters.`)) const passwordSchema = v.pipe(v.string(), v.minLength(8, t`Password must be at least 8 characters.`))
const LoginSchema = v.looseObject({ const LoginSchema = v.looseObject({
name: honeypot, name: honeypot,
@@ -24,14 +24,6 @@ const LoginSchema = v.looseObject({
const RegisterSchema = v.looseObject({ const RegisterSchema = v.looseObject({
name: honeypot, name: honeypot,
username: v.pipe(
v.string(),
v.regex(
/^(?=.*[a-zA-Z])[a-zA-Z0-9_-]+$/,
"Invalid username. You may use alphanumeric characters, underscores, and hyphens."
),
v.minLength(3, "Username must be at least 3 characters long.")
),
email: emailSchema, email: emailSchema,
password: passwordSchema, password: passwordSchema,
passwordConfirm: passwordSchema, passwordConfirm: passwordSchema,
@@ -63,6 +55,8 @@ export function UserAuthForm({
async (e: React.FormEvent<HTMLFormElement>) => { async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault() e.preventDefault()
setIsLoading(true) setIsLoading(true)
// store email for later use if mfa is enabled
let email = ""
try { try {
const formData = new FormData(e.target as HTMLFormElement) const formData = new FormData(e.target as HTMLFormElement)
const data = Object.fromEntries(formData) as Record<string, any> const data = Object.fromEntries(formData) as Record<string, any>
@@ -78,7 +72,8 @@ export function UserAuthForm({
setErrors(errors) setErrors(errors)
return return
} }
const { email, password, passwordConfirm, username } = result.output const { password, passwordConfirm } = result.output
email = result.output.email
if (isFirstRun) { if (isFirstRun) {
// check that passwords match // check that passwords match
if (password !== passwordConfirm) { if (password !== passwordConfirm) {
@@ -86,27 +81,27 @@ export function UserAuthForm({
setErrors({ passwordConfirm: msg }) setErrors({ passwordConfirm: msg })
return return
} }
await pb.admins.create({ await pb.send("/api/beszel/create-user", {
email, method: "POST",
password, body: JSON.stringify({ email, password }),
passwordConfirm: password,
})
await pb.admins.authWithPassword(email, password)
await pb.collection("users").create({
username,
email,
password,
passwordConfirm: password,
role: "admin",
verified: true,
}) })
await pb.collection("users").authWithPassword(email, password) await pb.collection("users").authWithPassword(email, password)
} else { } else {
await pb.collection("users").authWithPassword(email, password) await pb.collection("users").authWithPassword(email, password)
} }
$authenticated.set(true) $authenticated.set(true)
} catch (e) { } catch (err: any) {
showLoginFaliedToast() showLoginFaliedToast()
// todo: implement MFA
// const mfaId = err.response?.mfaId
// if (!mfaId) {
// showLoginFaliedToast()
// throw err
// }
// the user needs to authenticate again with another auth method, for example OTP
// const result = await pb.collection("users").requestOTP(email)
// ... show a modal for users to check their email and to enter the received code ...
// await pb.collection("users").authWithOTP(result.otpId, "EMAIL_CODE", { mfaId: mfaId })
} finally { } finally {
setIsLoading(false) setIsLoading(false)
} }
@@ -118,34 +113,15 @@ export function UserAuthForm({
return null return null
} }
const oauthEnabled = authMethods.oauth2.enabled && authMethods.oauth2.providers.length > 0
const passwordEnabled = authMethods.password.enabled
return ( return (
<div className={cn("grid gap-6", className)} {...props}> <div className={cn("grid gap-6", className)} {...props}>
{authMethods.emailPassword && ( {passwordEnabled && (
<> <>
<form onSubmit={handleSubmit} onChange={() => setErrors({})}> <form onSubmit={handleSubmit} onChange={() => setErrors({})}>
<div className="grid gap-2.5"> <div className="grid gap-2.5">
{isFirstRun && (
<div className="grid gap-1 relative">
<UserIcon className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
<Label className="sr-only" htmlFor="username">
<Trans>Username</Trans>
</Label>
<Input
autoFocus={true}
id="username"
name="username"
required
placeholder={t`username`}
type="username"
autoCapitalize="none"
autoComplete="username"
autoCorrect="off"
disabled={isLoading || isOauthLoading}
className="ps-9"
/>
{errors?.username && <p className="px-1 text-xs text-red-600">{errors.username}</p>}
</div>
)}
<div className="grid gap-1 relative"> <div className="grid gap-1 relative">
<MailIcon className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" /> <MailIcon className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
<Label className="sr-only" htmlFor="email"> <Label className="sr-only" htmlFor="email">
@@ -155,7 +131,7 @@ export function UserAuthForm({
id="email" id="email"
name="email" name="email"
required required
placeholder={isFirstRun ? t`email` : "name@example.com"} placeholder="name@example.com"
type="email" type="email"
autoCapitalize="none" autoCapitalize="none"
autoComplete="email" autoComplete="email"
@@ -178,7 +154,7 @@ export function UserAuthForm({
type="password" type="password"
autoComplete="current-password" autoComplete="current-password"
disabled={isLoading || isOauthLoading} disabled={isLoading || isOauthLoading}
className="ps-9 lowercase" className="ps-9 placeholder:lowercase"
/> />
{errors?.password && <p className="px-1 text-xs text-red-600">{errors.password}</p>} {errors?.password && <p className="px-1 text-xs text-red-600">{errors.password}</p>}
</div> </div>
@@ -196,7 +172,7 @@ export function UserAuthForm({
type="password" type="password"
autoComplete="current-password" autoComplete="current-password"
disabled={isLoading || isOauthLoading} disabled={isLoading || isOauthLoading}
className="ps-9 lowercase" className="ps-9 placeholder:lowercase"
/> />
{errors?.passwordConfirm && <p className="px-1 text-xs text-red-600">{errors.passwordConfirm}</p>} {errors?.passwordConfirm && <p className="px-1 text-xs text-red-600">{errors.passwordConfirm}</p>}
</div> </div>
@@ -204,7 +180,7 @@ export function UserAuthForm({
<div className="sr-only"> <div className="sr-only">
{/* honeypot */} {/* honeypot */}
<label htmlFor="name"></label> <label htmlFor="name"></label>
<input id="name" type="text" name="name" tabIndex={-1} /> <input id="name" type="text" name="name" tabIndex={-1} autoComplete="off" />
</div> </div>
<button className={cn(buttonVariants())} disabled={isLoading}> <button className={cn(buttonVariants())} disabled={isLoading}>
{isLoading ? ( {isLoading ? (
@@ -216,7 +192,7 @@ export function UserAuthForm({
</button> </button>
</div> </div>
</form> </form>
{(isFirstRun || authMethods.authProviders.length > 0) && ( {(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">
@@ -232,15 +208,15 @@ export function UserAuthForm({
</> </>
)} )}
{authMethods.authProviders.length > 0 && ( {oauthEnabled && (
<div className="grid gap-2 -mt-1"> <div className="grid gap-2 -mt-1">
{authMethods.authProviders.map((provider) => ( {authMethods.oauth2.providers.map((provider) => (
<button <button
key={provider.name} key={provider.name}
type="button" type="button"
className={cn(buttonVariants({ variant: "outline" }), { className={cn(buttonVariants({ variant: "outline" }), {
"justify-self-center": !authMethods.emailPassword, "justify-self-center": !passwordEnabled,
"px-5": !authMethods.emailPassword, "px-5": !passwordEnabled,
})} })}
onClick={() => { onClick={() => {
setIsOauthLoading(true) setIsOauthLoading(true)
@@ -279,8 +255,8 @@ export function UserAuthForm({
<LoaderCircle className="me-2 h-4 w-4 animate-spin" /> <LoaderCircle className="me-2 h-4 w-4 animate-spin" />
) : ( ) : (
<img <img
className="me-2 h-4 w-4 dark:invert" className="me-2 h-4 w-4 dark:brightness-0 dark:invert"
src={`/static/${provider.name}.svg`} src={`/_/images/oauth2/${provider.name}.svg`}
alt="" alt=""
onError={(e) => { onError={(e) => {
e.currentTarget.src = "/static/lock.svg" e.currentTarget.src = "/static/lock.svg"
@@ -293,12 +269,12 @@ export function UserAuthForm({
</div> </div>
)} )}
{!authMethods.authProviders.length && 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="/static/github.svg" alt="" /> <img className="me-2 h-4 w-4 dark:invert" src="/_/images/oauth2/github.svg" alt="" />
<span className="translate-y-[1px]">GitHub</span> <span className="translate-y-[1px]">GitHub</span>
</button> </button>
</DialogTrigger> </DialogTrigger>
@@ -316,7 +292,7 @@ export function UserAuthForm({
<Trans> <Trans>
Please see{" "} Please see{" "}
<a <a
href="https://github.com/henrygd/beszel/blob/main/readme.md#oauth--oidc-integration" href="https://beszel.dev/guide/oauth"
className={cn(buttonVariants({ variant: "link" }), "p-0 h-auto")} className={cn(buttonVariants({ variant: "link" }), "p-0 h-auto")}
> >
the documentation the documentation
@@ -329,7 +305,7 @@ export function UserAuthForm({
</Dialog> </Dialog>
)} )}
{authMethods.emailPassword && !isFirstRun && ( {passwordEnabled && !isFirstRun && (
<Link <Link
href="/forgot-password" href="/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"

View File

@@ -7,11 +7,13 @@ import ForgotPassword from "./forgot-pass-form"
import { $router } from "../router" import { $router } from "../router"
import { AuthMethodsList } from "pocketbase" import { AuthMethodsList } from "pocketbase"
import { t } from "@lingui/macro" import { t } from "@lingui/macro"
import { useTheme } from "../theme-provider"
export default function () { export default function () {
const page = useStore($router) const page = useStore($router)
const [isFirstRun, setFirstRun] = useState(false) const [isFirstRun, setFirstRun] = useState(false)
const [authMethods, setAuthMethods] = useState<AuthMethodsList>() const [authMethods, setAuthMethods] = useState<AuthMethodsList>()
const { theme } = useTheme()
useEffect(() => { useEffect(() => {
document.title = t`Login` + " / Beszel" document.title = t`Login` + " / Beszel"
@@ -45,7 +47,11 @@ export default function () {
return ( return (
<div className="min-h-svh grid items-center py-12"> <div className="min-h-svh grid items-center py-12">
<div className="grid gap-5 w-full px-4 mx-auto" style={{ maxWidth: "22em" }}> <div
className="grid gap-5 w-full px-4 mx-auto"
// @ts-ignore
style={{ maxWidth: "22em", "--border": theme == "light" ? "30 8% 80%" : "220 3% 20%" }}
>
<div className="text-center"> <div className="text-center">
<h1 className="mb-3"> <h1 className="mb-3">
<Logo className="h-7 fill-foreground mx-auto" /> <Logo className="h-7 fill-foreground mx-auto" />

View File

@@ -2,7 +2,6 @@ import { useState, lazy, Suspense } from "react"
import { Button, buttonVariants } from "@/components/ui/button" import { Button, buttonVariants } from "@/components/ui/button"
import { import {
DatabaseBackupIcon, DatabaseBackupIcon,
LockKeyholeIcon,
LogOutIcon, LogOutIcon,
LogsIcon, LogsIcon,
SearchIcon, SearchIcon,
@@ -35,7 +34,7 @@ const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0
export default function Navbar() { export default function Navbar() {
return ( return (
<div className="flex items-center h-14 md:h-16 bg-card px-4 pe-3 sm:px-6 border bt-0 rounded-md my-4"> <div className="flex items-center h-14 md:h-16 bg-card px-4 pe-3 sm:px-6 border border-border/60 bt-0 rounded-md my-4">
<Link href="/" aria-label="Home" className="p-2 ps-0 me-3"> <Link href="/" aria-label="Home" className="p-2 ps-0 me-3">
<Logo className="h-[1.1rem] md:h-5 fill-foreground" /> <Logo className="h-[1.1rem] md:h-5 fill-foreground" />
</Link> </Link>
@@ -58,7 +57,7 @@ export default function Navbar() {
</button> </button>
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent align={isReadOnlyUser() ? "end" : "center"} className="min-w-44"> <DropdownMenuContent align={isReadOnlyUser() ? "end" : "center"} className="min-w-44">
<DropdownMenuLabel>{pb.authStore.model?.email}</DropdownMenuLabel> <DropdownMenuLabel>{pb.authStore.record?.email}</DropdownMenuLabel>
<DropdownMenuSeparator /> <DropdownMenuSeparator />
<DropdownMenuGroup> <DropdownMenuGroup>
{isAdmin() && ( {isAdmin() && (
@@ -95,14 +94,6 @@ export default function Navbar() {
</span> </span>
</a> </a>
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem asChild>
<a href="/_/#/settings/auth-providers" target="_blank">
<LockKeyholeIcon className="me-2.5 h-4 w-4" />
<span>
<Trans>Auth Providers</Trans>
</span>
</a>
</DropdownMenuItem>
<DropdownMenuSeparator /> <DropdownMenuSeparator />
</> </>
)} )}

View File

@@ -18,7 +18,6 @@ export default function Home() {
const alerts = useStore($alerts) const alerts = useStore($alerts)
const systems = useStore($systems) const systems = useStore($systems)
// todo: maybe remove active alert if changed
const activeAlerts = useMemo(() => { const activeAlerts = useMemo(() => {
const activeAlerts = alerts.filter((alert) => { const activeAlerts = alerts.filter((alert) => {
const active = alert.triggered && alert.name in alertInfo const active = alert.triggered && alert.name in alertInfo

View File

@@ -8,7 +8,7 @@ import { UserSettings } from "@/types"
import { saveSettings } from "./layout" import { saveSettings } from "./layout"
import { useState } from "react" import { useState } from "react"
import { Trans } from "@lingui/macro" import { Trans } from "@lingui/macro"
import languages from "../../../lib/languages.json" import languages from "@/lib/languages"
import { dynamicActivate } from "@/lib/i18n" import { dynamicActivate } from "@/lib/i18n"
import { useLingui } from "@lingui/react" import { useLingui } from "@lingui/react"
// import { setLang } from "@/lib/i18n" // import { setLang } from "@/lib/i18n"

View File

@@ -193,7 +193,7 @@ const ShoutrrrUrlCard = ({ url, onUrlChange, onRemove }: ShoutrrrUrlCardProps) =
} }
return ( return (
<Card className="bg-muted/30 p-2 md:p-3"> <Card className="bg-muted/40 p-2 md:p-3">
<div className="flex items-center gap-1"> <div className="flex items-center gap-1">
<Input <Input
type="url" type="url"

View File

@@ -45,21 +45,26 @@ export function SidebarNav({ className, items, ...props }: SidebarNavProps) {
{/* Desktop View */} {/* Desktop View */}
<nav className={cn("hidden md:grid gap-1", className)} {...props}> <nav className={cn("hidden md:grid gap-1", className)} {...props}>
{items.map((item) => ( {items.map((item) => {
<Link if (item.admin && !isAdmin()) {
key={item.href} return null
href={item.href} }
className={cn( return (
buttonVariants({ variant: "ghost" }), <Link
"flex items-center gap-3", key={item.href}
page?.path === item.href ? "bg-muted hover:bg-muted" : "hover:bg-muted/50", href={item.href}
"justify-start" className={cn(
)} buttonVariants({ variant: "ghost" }),
> "flex items-center gap-3",
{item.icon && <item.icon className="h-4 w-4" />} page?.path === item.href ? "bg-muted hover:bg-muted" : "hover:bg-muted/50",
{item.title} "justify-start"
</Link> )}
))} >
{item.icon && <item.icon className="h-4 w-4" />}
{item.title}
</Link>
)
})}
</nav> </nav>
</> </>
) )

View File

@@ -1,12 +1,12 @@
import { $systems, pb, $chartTime, $containerFilter, $userSettings, $direction } from "@/lib/stores" import { $systems, pb, $chartTime, $containerFilter, $userSettings, $direction } from "@/lib/stores"
import { ChartData, ChartTimes, ContainerStatsRecord, SystemRecord, SystemStatsRecord } from "@/types" import { ChartData, ChartTimes, ContainerStatsRecord, GPUData, SystemRecord, SystemStatsRecord } from "@/types"
import React, { lazy, useCallback, useEffect, useMemo, useRef, useState } from "react" import React, { lazy, useCallback, useEffect, useMemo, useRef, useState } from "react"
import { Card, CardHeader, CardTitle, CardDescription } from "../ui/card" import { Card, CardHeader, CardTitle, CardDescription } from "../ui/card"
import { useStore } from "@nanostores/react" import { useStore } from "@nanostores/react"
import Spinner from "../spinner" import Spinner from "../spinner"
import { ClockArrowUp, CpuIcon, GlobeIcon, LayoutGridIcon, MonitorIcon, XIcon } from "lucide-react" import { ClockArrowUp, CpuIcon, GlobeIcon, LayoutGridIcon, MonitorIcon, XIcon } from "lucide-react"
import ChartTimeSelect from "../charts/chart-time-select" import ChartTimeSelect from "../charts/chart-time-select"
import { chartTimeData, cn, getPbTimestamp, useLocalStorage } from "@/lib/utils" import { chartTimeData, cn, getPbTimestamp, getSizeAndUnit, toFixedFloat, useLocalStorage } from "@/lib/utils"
import { Separator } from "../ui/separator" import { Separator } from "../ui/separator"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/tooltip" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/tooltip"
import { Button } from "../ui/button" import { Button } from "../ui/button"
@@ -24,6 +24,7 @@ const MemChart = lazy(() => import("../charts/mem-chart"))
const DiskChart = lazy(() => import("../charts/disk-chart")) const DiskChart = lazy(() => import("../charts/disk-chart"))
const SwapChart = lazy(() => import("../charts/swap-chart")) const SwapChart = lazy(() => import("../charts/swap-chart"))
const TemperatureChart = lazy(() => import("../charts/temperature-chart")) const TemperatureChart = lazy(() => import("../charts/temperature-chart"))
const GpuPowerChart = lazy(() => import("../charts/gpu-power-chart"))
const cache = new Map<string, any>() const cache = new Map<string, any>()
@@ -85,6 +86,13 @@ async function getStats<T>(collection: string, system: SystemRecord, chartTime:
}) })
} }
function dockerOrPodman(str: string, system: SystemRecord) {
if (system.info.p) {
str = str.replace("docker", "podman").replace("Docker", "Podman")
}
return str
}
export default function SystemDetail({ name }: { name: string }) { export default function SystemDetail({ name }: { name: string }) {
const direction = useStore($direction) const direction = useStore($direction)
const { _ } = useLingui() const { _ } = useLingui()
@@ -285,13 +293,14 @@ export default function SystemDetail({ name }: { name: string }) {
// if no data, show empty message // if no data, show empty message
const dataEmpty = !chartLoading && chartData.systemStats.length === 0 const dataEmpty = !chartLoading && chartData.systemStats.length === 0
const hasGpuData = Object.keys(systemStats.at(-1)?.stats.g ?? {}).length > 0
return ( return (
<> <>
<div id="chartwrap" className="grid gap-4 mb-10 overflow-x-clip"> <div id="chartwrap" className="grid gap-4 mb-10 overflow-x-clip">
{/* system info */} {/* system info */}
<Card> <Card>
<div className="grid lg:flex gap-4 px-4 sm:px-6 pt-3 sm:pt-4 pb-5"> <div className="grid xl:flex gap-4 px-4 sm:px-6 pt-3 sm:pt-4 pb-5">
<div> <div>
<h1 className="text-[1.6rem] font-semibold mb-1.5">{system.name}</h1> <h1 className="text-[1.6rem] font-semibold mb-1.5">{system.name}</h1>
<div className="flex flex-wrap items-center gap-3 gap-y-2 text-sm opacity-90"> <div className="flex flex-wrap items-center gap-3 gap-y-2 text-sm opacity-90">
@@ -341,8 +350,8 @@ export default function SystemDetail({ name }: { name: string }) {
})} })}
</div> </div>
</div> </div>
<div className="lg:ms-auto flex items-center gap-2 max-sm:-mb-1"> <div className="xl:ms-auto flex items-center gap-2 max-sm:-mb-1">
<ChartTimeSelect className="w-full lg:w-40" /> <ChartTimeSelect className="w-full xl:w-40" />
<TooltipProvider delayDuration={100}> <TooltipProvider delayDuration={100}>
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
@@ -350,7 +359,7 @@ export default function SystemDetail({ name }: { name: string }) {
aria-label={t`Toggle grid`} aria-label={t`Toggle grid`}
variant="outline" variant="outline"
size="icon" size="icon"
className="hidden lg:flex p-0 text-primary" className="hidden xl:flex p-0 text-primary"
onClick={() => setGrid(!grid)} onClick={() => setGrid(!grid)}
> >
{grid ? ( {grid ? (
@@ -383,7 +392,7 @@ export default function SystemDetail({ name }: { name: string }) {
<ChartCard <ChartCard
empty={dataEmpty} empty={dataEmpty}
grid={grid} grid={grid}
title={t`Docker CPU Usage`} title={dockerOrPodman(t`Docker CPU Usage`, system)}
description={t`Average CPU utilization of containers`} description={t`Average CPU utilization of containers`}
cornerEl={containerFilterBar} cornerEl={containerFilterBar}
> >
@@ -395,7 +404,7 @@ export default function SystemDetail({ name }: { name: string }) {
empty={dataEmpty} empty={dataEmpty}
grid={grid} grid={grid}
title={t`Memory Usage`} title={t`Memory Usage`}
description={t`Triggers when memory usage exceeds a threshold.`} description={t`Precise utilization at the recorded time`}
> >
<MemChart chartData={chartData} /> <MemChart chartData={chartData} />
</ChartCard> </ChartCard>
@@ -404,8 +413,8 @@ export default function SystemDetail({ name }: { name: string }) {
<ChartCard <ChartCard
empty={dataEmpty} empty={dataEmpty}
grid={grid} grid={grid}
title={t`Docker Memory Usage`} title={dockerOrPodman(t`Docker Memory Usage`, system)}
description={t`Memory usage of docker containers`} description={dockerOrPodman(t`Memory usage of docker containers`, system)}
cornerEl={containerFilterBar} cornerEl={containerFilterBar}
> >
<ContainerChart chartData={chartData} chartName="mem" dataKey="m" unit=" MB" /> <ContainerChart chartData={chartData} chartName="mem" dataKey="m" unit=" MB" />
@@ -413,11 +422,7 @@ export default function SystemDetail({ name }: { name: string }) {
)} )}
<ChartCard empty={dataEmpty} grid={grid} title={t`Disk Usage`} description={t`Usage of root partition`}> <ChartCard empty={dataEmpty} grid={grid} title={t`Disk Usage`} description={t`Usage of root partition`}>
<DiskChart <DiskChart chartData={chartData} dataKey="stats.du" diskSize={systemStats.at(-1)?.stats.d ?? NaN} />
chartData={chartData}
dataKey="stats.du"
diskSize={Math.round(systemStats.at(-1)?.stats.d ?? NaN)}
/>
</ChartCard> </ChartCard>
<ChartCard <ChartCard
@@ -449,8 +454,8 @@ export default function SystemDetail({ name }: { name: string }) {
> >
<ChartCard <ChartCard
empty={dataEmpty} empty={dataEmpty}
title={t`Docker Network I/O`} title={dockerOrPodman(t`Docker Network I/O`, system)}
description={t`Network traffic of docker containers`} description={dockerOrPodman(t`Network traffic of docker containers`, system)}
cornerEl={containerFilterBar} cornerEl={containerFilterBar}
> >
{/* @ts-ignore */} {/* @ts-ignore */}
@@ -459,6 +464,7 @@ export default function SystemDetail({ name }: { name: string }) {
</div> </div>
)} )}
{/* Swap chart */}
{(systemStats.at(-1)?.stats.su ?? 0) > 0 && ( {(systemStats.at(-1)?.stats.su ?? 0) > 0 && (
<ChartCard <ChartCard
empty={dataEmpty} empty={dataEmpty}
@@ -470,6 +476,7 @@ export default function SystemDetail({ name }: { name: string }) {
</ChartCard> </ChartCard>
)} )}
{/* Temperature chart */}
{systemStats.at(-1)?.stats.t && ( {systemStats.at(-1)?.stats.t && (
<ChartCard <ChartCard
empty={dataEmpty} empty={dataEmpty}
@@ -480,11 +487,61 @@ export default function SystemDetail({ name }: { name: string }) {
<TemperatureChart chartData={chartData} /> <TemperatureChart chartData={chartData} />
</ChartCard> </ChartCard>
)} )}
{/* GPU power draw chart */}
{hasGpuData && (
<ChartCard
empty={dataEmpty}
grid={grid}
title={t`GPU Power Draw`}
description={t`Average power consumption of GPUs`}
>
<GpuPowerChart chartData={chartData} />
</ChartCard>
)}
</div> </div>
{/* GPU charts */}
{hasGpuData && (
<div className="grid xl:grid-cols-2 gap-4">
{Object.keys(systemStats.at(-1)?.stats.g ?? {}).map((id) => {
const gpu = systemStats.at(-1)?.stats.g?.[id] as GPUData
return (
<div key={id} className="contents">
<ChartCard
empty={dataEmpty}
grid={grid}
title={`${gpu.n} ${t`Usage`}`}
description={t`Average utilization of ${gpu.n}`}
>
<AreaChartDefault chartData={chartData} chartName={`g.${id}.u`} unit="%" />
</ChartCard>
<ChartCard
empty={dataEmpty}
grid={grid}
title={`${gpu.n} VRAM`}
description={t`Precise utilization at the recorded time`}
>
<AreaChartDefault
chartData={chartData}
chartName={`g.${id}.mu`}
unit=" MB"
max={gpu.mt}
tickFormatter={(value) => {
const { v, u } = getSizeAndUnit(value, false)
return toFixedFloat(v, 1) + u
}}
/>
</ChartCard>
</div>
)
})}
</div>
)}
{/* extra filesystem charts */} {/* extra filesystem charts */}
{Object.keys(systemStats.at(-1)?.stats.efs ?? {}).length > 0 && ( {Object.keys(systemStats.at(-1)?.stats.efs ?? {}).length > 0 && (
<div className="grid lg:grid-cols-2 gap-4"> <div className="grid xl:grid-cols-2 gap-4">
{Object.keys(systemStats.at(-1)?.stats.efs ?? {}).map((extraFsName) => { {Object.keys(systemStats.at(-1)?.stats.efs ?? {}).map((extraFsName) => {
return ( return (
<div key={extraFsName} className="contents"> <div key={extraFsName} className="contents">
@@ -497,7 +554,7 @@ export default function SystemDetail({ name }: { name: string }) {
<DiskChart <DiskChart
chartData={chartData} chartData={chartData}
dataKey={`stats.efs.${extraFsName}.du`} dataKey={`stats.efs.${extraFsName}.du`}
diskSize={Math.round(systemStats.at(-1)?.stats.efs?.[extraFsName].d ?? NaN)} diskSize={systemStats.at(-1)?.stats.efs?.[extraFsName].d ?? NaN}
/> />
</ChartCard> </ChartCard>
<ChartCard <ChartCard
@@ -599,8 +656,14 @@ function ChartCard({
<CardDescription>{description}</CardDescription> <CardDescription>{description}</CardDescription>
{cornerEl && <div className="relative py-1 block sm:w-44 sm:absolute sm:top-2.5 sm:end-3.5">{cornerEl}</div>} {cornerEl && <div className="relative py-1 block sm:w-44 sm:absolute sm:top-2.5 sm:end-3.5">{cornerEl}</div>}
</CardHeader> </CardHeader>
<div className="ps-0 w-[calc(100%-1.6em)] h-52 relative"> <div className="ps-0 w-[calc(100%-1.5em)] h-48 md:h-52 relative group">
{<Spinner msg={empty ? t`Waiting for enough records to display` : undefined} />} {
<Spinner
msg={empty ? t`Waiting for enough records to display` : undefined}
// className="group-has-[.opacity-100]:opacity-0 transition-opacity"
className="group-has-[.opacity-100]:invisible duration-100"
/>
}
{isIntersecting && children} {isIntersecting && children}
</div> </div>
</Card> </Card>

View File

@@ -1,10 +1,11 @@
import { cn } from "@/lib/utils"
import { LoaderCircleIcon } from "lucide-react" import { LoaderCircleIcon } from "lucide-react"
export default function ({ msg }: { msg?: string }) { export default function ({ msg, className }: { msg?: string; className?: string }) {
return ( return (
<div className="flex flex-col items-center justify-center h-full absolute inset-0"> <div className={cn(className, "flex flex-col items-center justify-center h-full absolute inset-0")}>
{msg ? ( {msg ? (
<p className={"opacity-60 mb-2 text-center px-4"}>{msg}</p> <p className={"opacity-60 mb-2 text-center text-sm px-4"}>{msg}</p>
) : ( ) : (
<LoaderCircleIcon className="animate-spin h-10 w-10 opacity-60" /> <LoaderCircleIcon className="animate-spin h-10 w-10 opacity-60" />
)} )}

View File

@@ -21,6 +21,9 @@ import {
DropdownMenuCheckboxItem, DropdownMenuCheckboxItem,
DropdownMenuContent, DropdownMenuContent,
DropdownMenuItem, DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator, DropdownMenuSeparator,
DropdownMenuTrigger, DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu" } from "@/components/ui/dropdown-menu"
@@ -50,24 +53,32 @@ import {
HardDriveIcon, HardDriveIcon,
ServerIcon, ServerIcon,
CpuIcon, CpuIcon,
ChevronDownIcon, LayoutGridIcon,
LayoutListIcon,
ArrowDownIcon,
ArrowUpIcon,
Settings2Icon,
EyeIcon,
} from "lucide-react" } from "lucide-react"
import { useEffect, useMemo, useState } from "react" import { useEffect, useMemo, useState } from "react"
import { $hubVersion, $systems, pb } from "@/lib/stores" import { $hubVersion, $systems, pb } from "@/lib/stores"
import { useStore } from "@nanostores/react" import { useStore } from "@nanostores/react"
import { cn, copyToClipboard, decimalString, isReadOnlyUser, useLocalStorage } from "@/lib/utils" import { cn, copyToClipboard, decimalString, isReadOnlyUser, useLocalStorage } from "@/lib/utils"
import AlertsButton from "../alerts/alert-button" import AlertsButton from "../alerts/alert-button"
import { navigate } from "../router" import { Link, navigate } from "../router"
import { EthernetIcon } from "../ui/icons" import { EthernetIcon } from "../ui/icons"
import { Trans, t } from "@lingui/macro" import { Trans, t } from "@lingui/macro"
import { useLingui } from "@lingui/react" import { useLingui } from "@lingui/react"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../ui/card" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../ui/card"
import { Input } from "../ui/input" import { Input } from "../ui/input"
import { ClassValue } from "clsx"
type ViewMode = "table" | "grid"
function CellFormatter(info: CellContext<SystemRecord, unknown>) { function CellFormatter(info: CellContext<SystemRecord, unknown>) {
const val = info.getValue() as number const val = info.getValue() as number
return ( return (
<div className="flex gap-1 items-center tabular-nums tracking-tight"> <div className="flex gap-2 items-center tabular-nums tracking-tight">
<span className="min-w-[3.5em]">{decimalString(val, 1)}%</span> <span className="min-w-[3.5em]">{decimalString(val, 1)}%</span>
<span className="grow min-w-10 block bg-muted h-[1em] relative rounded-sm overflow-hidden"> <span className="grow min-w-10 block bg-muted h-[1em] relative rounded-sm overflow-hidden">
<span <span
@@ -75,23 +86,26 @@ function CellFormatter(info: CellContext<SystemRecord, unknown>) {
"absolute inset-0 w-full h-full origin-left", "absolute inset-0 w-full h-full origin-left",
(val < 65 && "bg-green-500") || (val < 90 && "bg-yellow-500") || "bg-red-600" (val < 65 && "bg-green-500") || (val < 90 && "bg-yellow-500") || "bg-red-600"
)} )}
style={{ transform: `scalex(${val}%)` }} style={{
transform: `scalex(${val / 100})`,
}}
></span> ></span>
</span> </span>
</div> </div>
) )
} }
function sortableHeader(column: Column<SystemRecord, unknown>, Icon: any, hideSortIcon = false) { function sortableHeader(column: Column<SystemRecord, unknown>, hideSortIcon = false) {
return ( return (
<Button <Button
variant="ghost" variant="ghost"
className="h-9 px-3 flex" className="h-9 px-3 flex"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")} onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
> >
<Icon className="me-2 h-4 w-4" /> {/* @ts-ignore */}
{column.columnDef?.icon && <column.columnDef.icon className="me-2 size-4" />}
{column.id} {column.id}
{!hideSortIcon && <ArrowUpDownIcon className="ms-2 h-4 w-4" />} {!hideSortIcon && <ArrowUpDownIcon className="ms-2 size-4" />}
</Button> </Button>
) )
} }
@@ -100,9 +114,10 @@ export default function SystemsTable() {
const data = useStore($systems) const data = useStore($systems)
const hubVersion = useStore($hubVersion) const hubVersion = useStore($hubVersion)
const [filter, setFilter] = useState<string>() const [filter, setFilter] = useState<string>()
const [sorting, setSorting] = useState<SortingState>([]) const [sorting, setSorting] = useState<SortingState>([{ id: t`System`, desc: false }])
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]) const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])
const [columnVisibility, setColumnVisibility] = useLocalStorage<VisibilityState>("cols", {}) const [columnVisibility, setColumnVisibility] = useLocalStorage<VisibilityState>("cols", {})
const [viewMode, setViewMode] = useLocalStorage<ViewMode>("viewMode", window.innerWidth > 1024 ? "table" : "grid")
const { i18n } = useLingui() const { i18n } = useLingui()
useEffect(() => { useEffect(() => {
@@ -120,64 +135,64 @@ export default function SystemsTable() {
accessorKey: "name", accessorKey: "name",
id: t`System`, id: t`System`,
enableHiding: false, enableHiding: false,
cell: (info) => { icon: ServerIcon,
const { status } = info.row.original cell: (info) => (
return ( <span className="flex gap-0.5 items-center text-base md:pe-5">
<span className="flex gap-0.5 items-center text-base md:pe-5"> <IndicatorDot system={info.row.original} />
<span <Button
className={cn("w-2 h-2 left-0 rounded-full", { data-nolink
"bg-green-500": status === "up", variant={"ghost"}
"bg-red-500": status === "down", className="text-primary/90 h-7 px-1.5 gap-1.5"
"bg-primary/40": status === "paused", onClick={() => copyToClipboard(info.getValue() as string)}
"bg-yellow-500": status === "pending", >
})} {info.getValue() as string}
style={{ marginBottom: "-1px" }} <CopyIcon className="h-2.5 w-2.5" />
></span> </Button>
<Button </span>
data-nolink ),
variant={"ghost"} header: ({ column }) => sortableHeader(column),
className="text-primary/90 h-7 px-1.5 gap-1.5"
onClick={() => copyToClipboard(info.getValue() as string)}
>
{info.getValue() as string}
<CopyIcon className="h-2.5 w-2.5" />
</Button>
</span>
)
},
header: ({ column }) => sortableHeader(column, ServerIcon),
}, },
{ {
accessorKey: "info.cpu", accessorKey: "info.cpu",
id: t`CPU`, id: t`CPU`,
invertSorting: true, invertSorting: true,
cell: CellFormatter, cell: CellFormatter,
header: ({ column }) => sortableHeader(column, CpuIcon), icon: CpuIcon,
header: ({ column }) => sortableHeader(column),
}, },
{ {
accessorKey: "info.mp", accessorKey: "info.mp",
id: t`Memory`, id: t`Memory`,
invertSorting: true, invertSorting: true,
cell: CellFormatter, cell: CellFormatter,
header: ({ column }) => sortableHeader(column, MemoryStickIcon), icon: MemoryStickIcon,
header: ({ column }) => sortableHeader(column),
}, },
{ {
accessorKey: "info.dp", accessorKey: "info.dp",
id: t`Disk`, id: t`Disk`,
invertSorting: true, invertSorting: true,
cell: CellFormatter, cell: CellFormatter,
header: ({ column }) => sortableHeader(column, HardDriveIcon), icon: HardDriveIcon,
header: ({ column }) => sortableHeader(column),
}, },
{ {
accessorFn: (originalRow) => originalRow.info.b || 0, accessorFn: (originalRow) => originalRow.info.b || 0,
id: t`Net`, id: t`Net`,
invertSorting: true, invertSorting: true,
size: 115, size: 115,
header: ({ column }) => sortableHeader(column, EthernetIcon), icon: EthernetIcon,
cell: (info) => { header: ({ column }) => sortableHeader(column),
cell(info) {
const val = info.getValue() as number const val = info.getValue() as number
return ( return (
<span className="tabular-nums whitespace-nowrap ps-1">{decimalString(val, val >= 100 ? 1 : 2)} MB/s</span> <span
className={cn("tabular-nums whitespace-nowrap", {
"ps-1": viewMode === "table",
})}
>
{decimalString(val, val >= 100 ? 1 : 2)} MB/s
</span>
) )
}, },
}, },
@@ -186,18 +201,23 @@ export default function SystemsTable() {
id: t`Agent`, id: t`Agent`,
invertSorting: true, invertSorting: true,
size: 50, size: 50,
header: ({ column }) => sortableHeader(column, WifiIcon, true), icon: WifiIcon,
cell: (info) => { header: ({ column }) => sortableHeader(column, true),
cell(info) {
const version = info.getValue() as string const version = info.getValue() as string
if (!version || !hubVersion) { if (!version || !hubVersion) {
return null return null
} }
return ( return (
<span className="flex gap-2 items-center md:pe-5 tabular-nums ps-1"> <span
<span className={cn("flex gap-2 items-center md:pe-5 tabular-nums", {
className={cn("w-2 h-2 left-0 rounded-full", version === hubVersion ? "bg-green-500" : "bg-yellow-500")} "ps-1": viewMode === "table",
style={{ marginBottom: "-1px" }} })}
></span> >
<IndicatorDot
system={info.row.original}
className={version === hubVersion ? "bg-green-500" : "bg-yellow-500"}
/>
<span>{info.getValue() as string}</span> <span>{info.getValue() as string}</span>
</span> </span>
) )
@@ -206,83 +226,12 @@ export default function SystemsTable() {
{ {
id: t({ message: "Actions", comment: "Table column" }), id: t({ message: "Actions", comment: "Table column" }),
size: 120, size: 120,
cell: ({ row }) => { cell: ({ row }) => (
const { id, name, status, host } = row.original <div className="flex justify-end items-center gap-1">
return ( <AlertsButton system={row.original} />
<div className={"flex justify-end items-center gap-1"}> <ActionsButton system={row.original} />
<AlertsButton system={row.original} /> </div>
<AlertDialog> ),
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size={"icon"} data-nolink>
<span className="sr-only">
<Trans>Open menu</Trans>
</span>
<MoreHorizontalIcon className="w-5" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem
className={cn(isReadOnlyUser() && "hidden")}
onClick={() => {
pb.collection("systems").update(id, {
status: status === "paused" ? "pending" : "paused",
})
}}
>
{status === "paused" ? (
<>
<PlayCircleIcon className="me-2.5 h-4 w-4" />
<Trans>Resume</Trans>
</>
) : (
<>
<PauseCircleIcon className="me-2.5 h-4 w-4" />
<Trans>Pause</Trans>
</>
)}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => copyToClipboard(host)}>
<CopyIcon className="me-2.5 h-4 w-4" />
<Trans>Copy host</Trans>
</DropdownMenuItem>
<DropdownMenuSeparator className={cn(isReadOnlyUser() && "hidden")} />
<AlertDialogTrigger asChild>
<DropdownMenuItem className={cn(isReadOnlyUser() && "hidden")}>
<Trash2Icon className="me-2.5 h-4 w-4" />
<Trans>Delete</Trans>
</DropdownMenuItem>
</AlertDialogTrigger>
</DropdownMenuContent>
</DropdownMenu>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>
<Trans>Are you sure you want to delete {name}?</Trans>
</AlertDialogTitle>
<AlertDialogDescription>
<Trans>
This action cannot be undone. This will permanently delete all current records for {name} from
the database.
</Trans>
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel>
<Trans>Cancel</Trans>
</AlertDialogCancel>
<AlertDialogAction
className={cn(buttonVariants({ variant: "destructive" }))}
onClick={() => pb.collection("systems").delete(id)}
>
<Trans>Continue</Trans>
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
</div>
)
},
}, },
] as ColumnDef<SystemRecord>[] ] as ColumnDef<SystemRecord>[]
}, [hubVersion, i18n.locale]) }, [hubVersion, i18n.locale])
@@ -325,86 +274,320 @@ export default function SystemsTable() {
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<Button variant="outline"> <Button variant="outline">
<Trans comment="Context: table columns">Columns</Trans>{" "} <Settings2Icon className="me-1.5 size-4 opacity-80" />
<ChevronDownIcon className="ms-1.5 h-4 w-4 opacity-90" /> <Trans>View</Trans>
</Button> </Button>
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent align="end"> <DropdownMenuContent align="end" className="h-72 md:h-auto min-w-48 md:min-w-auto overflow-y-auto">
{table <div className="grid grid-cols-1 md:grid-cols-3 divide-y md:divide-s md:divide-y-0">
.getAllColumns() <div>
.filter((column) => column.getCanHide()) <DropdownMenuLabel className="pt-2 px-3.5 flex items-center gap-2">
.map((column) => { <LayoutGridIcon className="size-4" />
return ( <Trans>Layout</Trans>
<DropdownMenuCheckboxItem </DropdownMenuLabel>
key={column.id} <DropdownMenuSeparator />
checked={column.getIsVisible()} <DropdownMenuRadioGroup
onCheckedChange={(value) => column.toggleVisibility(!!value)} className="px-1 pb-1"
> value={viewMode}
{column.id} onValueChange={(view) => setViewMode(view as ViewMode)}
</DropdownMenuCheckboxItem> >
) <DropdownMenuRadioItem value="table" onSelect={(e) => e.preventDefault()} className="gap-2">
})} <LayoutListIcon className="size-4" />
<Trans>Table</Trans>
</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="grid" onSelect={(e) => e.preventDefault()} className="gap-2">
<LayoutGridIcon className="size-4" />
<Trans>Grid</Trans>
</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</div>
<div>
<DropdownMenuLabel className="pt-2 px-3.5 flex items-center gap-2">
<ArrowUpDownIcon className="size-4" />
<Trans>Sort By</Trans>
</DropdownMenuLabel>
<DropdownMenuSeparator />
<div className="px-1 pb-1">
{table.getAllColumns().map((column) => {
if (column.id === t`Actions` || !column.getCanSort()) return null
let Icon = <span className="w-6"></span>
// if current sort column, show sort direction
if (sorting[0]?.id === column.id) {
if (sorting[0]?.desc) {
Icon = <ArrowUpIcon className="me-2 size-4" />
} else {
Icon = <ArrowDownIcon className="me-2 size-4" />
}
}
return (
<DropdownMenuItem
onSelect={(e) => {
e.preventDefault()
setSorting([{ id: column.id, desc: sorting[0]?.id === column.id && !sorting[0]?.desc }])
}}
key={column.id}
>
{Icon}
{column.id}
</DropdownMenuItem>
)
})}
</div>
</div>
<div>
<DropdownMenuLabel className="pt-2 px-3.5 flex items-center gap-2">
<EyeIcon className="size-4" />
<Trans>Visible Fields</Trans>
</DropdownMenuLabel>
<DropdownMenuSeparator />
<div className="px-1.5 pb-1">
{table
.getAllColumns()
.filter((column) => column.getCanHide())
.map((column) => {
return (
<DropdownMenuCheckboxItem
key={column.id}
onSelect={(e) => e.preventDefault()}
checked={column.getIsVisible()}
onCheckedChange={(value) => column.toggleVisibility(!!value)}
>
{column.id}
</DropdownMenuCheckboxItem>
)
})}
</div>
</div>
</div>
</DropdownMenuContent> </DropdownMenuContent>
</DropdownMenu> </DropdownMenu>
</div> </div>
</div> </div>
</CardHeader> </CardHeader>
<CardContent className="max-sm:p-2"> <div className="p-6 pt-0 max-sm:py-3 max-sm:px-2">
<div className="rounded-md border overflow-hidden"> {viewMode === "table" ? (
<Table> // table layout
<TableHeader className="bg-muted/40"> <div className="rounded-md border overflow-hidden">
{table.getHeaderGroups().map((headerGroup) => ( <Table>
<TableRow key={headerGroup.id}> <TableHeader>
{headerGroup.headers.map((header) => { {table.getHeaderGroups().map((headerGroup) => (
return ( <TableRow key={headerGroup.id}>
<TableHead className="px-2" key={header.id}> {headerGroup.headers.map((header) => {
{header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())} return (
</TableHead> <TableHead className="px-2" key={header.id}>
) {header.isPlaceholder
})} ? null
</TableRow> : flexRender(header.column.columnDef.header, header.getContext())}
))} </TableHead>
</TableHeader> )
<TableBody>
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row) => (
<TableRow
key={row.original.id}
data-state={row.getIsSelected() && "selected"}
className={cn("cursor-pointer transition-opacity", {
"opacity-50": row.original.status === "paused",
})} })}
onClick={(e) => {
const target = e.target as HTMLElement
if (!target.closest("[data-nolink]") && e.currentTarget.contains(target)) {
navigate(`/system/${encodeURIComponent(row.original.name)}`)
}
}}
>
{row.getVisibleCells().map((cell) => (
<TableCell
key={cell.id}
style={{
width: cell.column.getSize() === Number.MAX_SAFE_INTEGER ? "auto" : cell.column.getSize(),
}}
className={cn("overflow-hidden relative", data.length > 10 ? "py-2" : "py-2.5")}
>
{flexRender(cell.column.columnDef.cell, cell.getContext())}
</TableCell>
))}
</TableRow> </TableRow>
)) ))}
) : ( </TableHeader>
<TableRow> <TableBody>
<TableCell colSpan={columns.length} className="h-24 text-center"> {table.getRowModel().rows?.length ? (
<Trans>No systems found.</Trans> table.getRowModel().rows.map((row) => (
</TableCell> <TableRow
</TableRow> key={row.original.id}
)} data-state={row.getIsSelected() && "selected"}
</TableBody> className={cn("cursor-pointer transition-opacity", {
</Table> "opacity-50": row.original.status === "paused",
</div> })}
</CardContent> onClick={(e) => {
const target = e.target as HTMLElement
if (!target.closest("[data-nolink]") && e.currentTarget.contains(target)) {
navigate(`/system/${encodeURIComponent(row.original.name)}`)
}
}}
>
{row.getVisibleCells().map((cell) => (
<TableCell
key={cell.id}
style={{
width: cell.column.getSize() === Number.MAX_SAFE_INTEGER ? "auto" : cell.column.getSize(),
}}
className={cn("overflow-hidden relative", data.length > 10 ? "py-2" : "py-2.5")}
>
{flexRender(cell.column.columnDef.cell, cell.getContext())}
</TableCell>
))}
</TableRow>
))
) : (
<TableRow>
<TableCell colSpan={columns.length} className="h-24 text-center">
<Trans>No systems found.</Trans>
</TableCell>
</TableRow>
)}
</TableBody>
</Table>
</div>
) : (
// grid layout
<div className="grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3">
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row) => {
const system = row.original
const { status } = system
return (
<Card
key={system.id}
className={cn(
"cursor-pointer hover:shadow-md transition-all bg-transparent w-full dark:border-border duration-200 relative",
{
"opacity-50": status === "paused",
}
)}
>
<CardHeader className="py-1 ps-5 pe-3 bg-muted/30 border-b border-border/60">
<div className="flex items-center justify-between gap-2">
<CardTitle className="text-base tracking-normal shrink-1 text-primary/90 flex items-center min-h-10 gap-2.5 min-w-0">
<div className="flex items-center gap-2.5 min-w-0">
<IndicatorDot system={system} />
<CardTitle className="text-[.95em]/normal tracking-normal truncate text-primary/90">
{system.name}
</CardTitle>
</div>
</CardTitle>
{table.getColumn(t`Actions`)?.getIsVisible() && (
<div className="flex gap-1 flex-shrink-0 relative z-10">
<AlertsButton system={system} />
<ActionsButton system={system} />
</div>
)}
</div>
</CardHeader>
<CardContent className="space-y-2.5 text-sm px-5 pt-3.5 pb-4">
{table.getAllColumns().map((column) => {
if (!column.getIsVisible() || column.id === t`System` || column.id === t`Actions`) return null
const cell = row.getAllCells().find((cell) => cell.column.id === column.id)
if (!cell) return null
return (
<div key={column.id} className="flex items-center gap-3">
{/* @ts-ignore */}
{column.columnDef?.icon && (
// @ts-ignore
<column.columnDef.icon className="size-4 text-muted-foreground" />
)}
<div className="flex items-center gap-3 flex-1">
<span className="text-muted-foreground min-w-16">{column.id}:</span>
<div className="flex-1">{flexRender(cell.column.columnDef.cell, cell.getContext())}</div>
</div>
</div>
)
})}
</CardContent>
<Link
href={`/system/${encodeURIComponent(row.original.name)}`}
className="inset-0 absolute w-full h-full"
>
<span className="sr-only">{row.original.name}</span>
</Link>
</Card>
)
})
) : (
<div className="col-span-full text-center py-8">
<Trans>No systems found.</Trans>
</div>
)}
</div>
)}
</div>
</Card> </Card>
) )
} }
function IndicatorDot({ system, className }: { system: SystemRecord; className?: ClassValue }) {
className ||= {
"bg-green-500": system.status === "up",
"bg-red-500": system.status === "down",
"bg-primary/40": system.status === "paused",
"bg-yellow-500": system.status === "pending",
}
return (
<span
className={cn("flex-shrink-0 size-2 rounded-full", className)}
// style={{ marginBottom: "-1px" }}
/>
)
}
function ActionsButton({ system }: { system: SystemRecord }) {
// const [opened, setOpened] = useState(false)
const { id, status, host, name } = system
return (
<AlertDialog>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size={"icon"} data-nolink>
<span className="sr-only">
<Trans>Open menu</Trans>
</span>
<MoreHorizontalIcon className="w-5" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem
className={cn(isReadOnlyUser() && "hidden")}
onClick={() => {
pb.collection("systems").update(id, {
status: status === "paused" ? "pending" : "paused",
})
}}
>
{status === "paused" ? (
<>
<PlayCircleIcon className="me-2.5 size-4" />
<Trans>Resume</Trans>
</>
) : (
<>
<PauseCircleIcon className="me-2.5 size-4" />
<Trans>Pause</Trans>
</>
)}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => copyToClipboard(host)}>
<CopyIcon className="me-2.5 size-4" />
<Trans>Copy host</Trans>
</DropdownMenuItem>
<DropdownMenuSeparator className={cn(isReadOnlyUser() && "hidden")} />
<AlertDialogTrigger asChild>
<DropdownMenuItem className={cn(isReadOnlyUser() && "hidden")}>
<Trash2Icon className="me-2.5 size-4" />
<Trans>Delete</Trans>
</DropdownMenuItem>
</AlertDialogTrigger>
</DropdownMenuContent>
</DropdownMenu>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>
<Trans>Are you sure you want to delete {name}?</Trans>
</AlertDialogTitle>
<AlertDialogDescription>
<Trans>
This action cannot be undone. This will permanently delete all current records for {name} from the
database.
</Trans>
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel>
<Trans>Cancel</Trans>
</AlertDialogCancel>
<AlertDialogAction
className={cn(buttonVariants({ variant: "destructive" }))}
onClick={() => pb.collection("systems").delete(id)}
>
<Trans>Continue</Trans>
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
)
}

View File

@@ -16,7 +16,7 @@ const AlertDialogOverlay = React.forwardRef<
>(({ className, ...props }, ref) => ( >(({ className, ...props }, ref) => (
<AlertDialogPrimitive.Overlay <AlertDialogPrimitive.Overlay
className={cn( className={cn(
"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "fixed inset-0 z-50 bg-black/40 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
className className
)} )}
{...props} {...props}

View File

@@ -11,7 +11,7 @@ const buttonVariants = cva(
variant: { variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/90", default: "bg-primary text-primary-foreground hover:bg-primary/90",
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", outline: "border bg-background hover:bg-accent/70 dark:hover:bg-accent/50 hover:text-accent-foreground",
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground", ghost: "hover:bg-accent hover:text-accent-foreground",
link: "text-primary underline-offset-4 hover:underline", link: "text-primary underline-offset-4 hover:underline",

View File

@@ -3,7 +3,11 @@ import * as React from "react"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => ( const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (
<div ref={ref} className={cn("rounded-lg border bg-card text-card-foreground shadow-sm", className)} {...props} /> <div
ref={ref}
className={cn("rounded-lg border border-border/60 bg-card text-card-foreground shadow-sm", className)}
{...props}
/>
)) ))
Card.displayName = "Card" Card.displayName = "Card"

View File

@@ -334,7 +334,7 @@ const xAxis = function ({ domain, ticks, chartTime }: ChartData) {
allowDataOverflow allowDataOverflow
type="number" type="number"
scale="time" scale="time"
minTickGap={15} minTickGap={12}
tickMargin={8} tickMargin={8}
axisLine={false} axisLine={false}
tickFormatter={chartTimeData[chartTime].format} tickFormatter={chartTimeData[chartTime].format}

View File

@@ -19,7 +19,7 @@ const DialogOverlay = React.forwardRef<
<DialogPrimitive.Overlay <DialogPrimitive.Overlay
ref={ref} ref={ref}
className={cn( className={cn(
"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "fixed inset-0 z-50 bg-black/40 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
className className
)} )}
{...props} {...props}

View File

@@ -33,7 +33,7 @@ const InputTags = React.forwardRef<HTMLInputElement, InputTagsProps>(
return ( return (
<div <div
className={cn( className={cn(
"bg-background min-h-10 flex w-full flex-wrap gap-2 rounded-md border border-input px-3 py-2 text-sm placeholder:text-muted-foreground has-[:focus-visible]:outline-none ring-offset-background has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", "bg-background min-h-10 flex w-full flex-wrap gap-2 rounded-md border px-3 py-2 text-sm placeholder:text-muted-foreground has-[:focus-visible]:outline-none ring-offset-background has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
className className
)} )}
> >

View File

@@ -9,7 +9,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, type,
<input <input
type={type} type={type}
className={cn( className={cn(
"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", "flex h-10 w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
className className
)} )}
ref={ref} ref={ref}

View File

@@ -17,7 +17,7 @@ const SelectTrigger = React.forwardRef<
<SelectPrimitive.Trigger <SelectPrimitive.Trigger
ref={ref} ref={ref}
className={cn( className={cn(
"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", "flex h-10 w-full items-center justify-between rounded-md border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
className className
)} )}
{...props} {...props}

View File

@@ -12,7 +12,9 @@ const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableE
Table.displayName = "Table" Table.displayName = "Table"
const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>( const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(
({ className, ...props }, ref) => <thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} /> ({ className, ...props }, ref) => (
<thead ref={ref} className={cn("bg-muted/30 [&_tr]:border-b", className)} {...props} />
)
) )
TableHeader.displayName = "TableHeader" TableHeader.displayName = "TableHeader"
@@ -34,7 +36,10 @@ const TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTML
({ className, ...props }, ref) => ( ({ className, ...props }, ref) => (
<tr <tr
ref={ref} ref={ref}
className={cn("border-b hover:bg-muted/40 dark:hover:bg-muted/30 data-[state=selected]:bg-muted", className)} className={cn(
"border-b border-border/60 hover:bg-muted/40 dark:hover:bg-muted/20 data-[state=selected]:bg-muted",
className
)}
{...props} {...props}
/> />
) )

View File

@@ -8,7 +8,7 @@ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ classNa
return ( return (
<textarea <textarea
className={cn( className={cn(
"flex min-h-14 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", "flex min-h-14 w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
className className
)} )}
ref={ref} ref={ref}

View File

@@ -34,25 +34,25 @@
.dark { .dark {
color-scheme: dark; color-scheme: dark;
--background: 240 10% 6.2%; --background: 220 5.5% 9%;
--foreground: 0 0% 98.04%; --foreground: 220 2% 97%;
--card: 240 8.57% 8%; --card: 220 5.5% 10.5%;
--card-foreground: 0 0% 98.04%; --card-foreground: 220 2% 97%;
--popover: 240 10% 6.2%; --popover: 220 5.5% 9%;
--popover-foreground: 0 0% 98.04%; --popover-foreground: 220 2% 97%;
--primary: 0 0% 98.04%; --primary: 220 2% 96%;
--primary-foreground: 240 5.88% 10%; --primary-foreground: 220 4% 10%;
--secondary: 240 3.7% 15.88%; --secondary: 220 4% 16%;
--secondary-foreground: 0 0% 98.04%; --secondary-foreground: 220 0% 98%;
--muted: 240 3.7% 15.88%; --muted: 220 6% 16%;
--muted-foreground: 240 5.03% 64.9%; --muted-foreground: 220 4% 67%;
--accent: 240 3.7% 15.88%; --accent: 220 5% 15.5%;
--accent-foreground: 0 0% 98.04%; --accent-foreground: 220 2% 98%;
--destructive: 0 59% 46%; --destructive: 0 62% 46%;
--destructive-foreground: 0 0% 98.04%; --destructive-foreground: 0 0% 97%;
--border: 240 2.86% 12%; --border: 220 3% 16%;
--input: 240 3.7% 15.88%; --input: 220 4% 22%;
--ring: 240 4.88% 86%; --ring: 220 4% 80%;
--radius: 0.8rem; --radius: 0.8rem;
} }
} }

View File

@@ -1,29 +1,43 @@
import { $direction } from "./stores" import { $direction } from "./stores"
import { i18n } from "@lingui/core" import { i18n } from "@lingui/core"
import type { Messages } from "@lingui/core"
import languages from "@/lib/languages"
import { detect, fromUrl, fromStorage, fromNavigator } from "@lingui/detect-locale" import { detect, fromUrl, fromStorage, fromNavigator } from "@lingui/detect-locale"
import { messages as enMessages } from "../locales/en/en.ts" import { messages as enMessages } from "@/locales/en/en.ts"
// const locale = detect(fromUrl("lang"), fromStorage("lang"), fromNavigator(), "en") // let locale = detect(fromUrl("lang"), fromStorage("lang"), fromNavigator(), "en")
const locale = detect(fromStorage("lang"), fromNavigator(), "en") let locale = detect(fromStorage("lang"), fromNavigator(), "en")
// log if dev // log if dev
if (import.meta.env.DEV) { if (import.meta.env.DEV) {
console.log("detected locale", locale) console.log("detected locale", locale)
} }
// activates locale
function activateLocale(locale: string, messages: Messages = enMessages) {
i18n.load(locale, messages)
i18n.activate(locale)
document.documentElement.lang = locale
localStorage.setItem("lang", locale)
$direction.set(locale.startsWith("ar") || locale.startsWith("fa") ? "rtl" : "ltr")
}
// dynamically loads translations for the given locale
export async function dynamicActivate(locale: string) { export async function dynamicActivate(locale: string) {
try { if (locale == "en") {
const { messages } = await import(`../locales/${locale}/${locale}.ts`) activateLocale(locale)
i18n.load(locale, messages) } else {
i18n.activate(locale) try {
document.documentElement.lang = locale const { messages }: { messages: Messages } = await import(`../locales/${locale}/${locale}.ts`)
$direction.set(locale.startsWith("ar") ? "rtl" : "ltr") activateLocale(locale, messages)
localStorage.setItem("lang", locale) } catch (error) {
} catch (error) { console.error(`Error loading ${locale}`, error)
console.error(`Error loading ${locale}`, error) activateLocale("en")
}
} }
} }
// handle zh variants
if (locale?.startsWith("zh-")) { if (locale?.startsWith("zh-")) {
// map zh variants to zh-CN // map zh variants to zh-CN
const zhVariantMap: Record<string, string> = { const zhVariantMap: Record<string, string> = {
@@ -38,9 +52,11 @@ if (locale?.startsWith("zh-")) {
"zh-Hant": "zh-HK", "zh-Hant": "zh-HK",
} }
dynamicActivate(zhVariantMap[locale] || "zh-CN") dynamicActivate(zhVariantMap[locale] || "zh-CN")
} else if (locale && !locale.startsWith("en")) {
dynamicActivate(locale.split("-")[0])
} else { } else {
i18n.load("en", enMessages) locale = (locale || "en").split("-")[0]
i18n.activate("en") // use en if locale is not in languages
if (!languages.some((l) => l.lang === locale)) {
locale = "en"
}
dynamicActivate(locale)
} }

View File

@@ -1,77 +0,0 @@
[
{
"lang": "ar",
"label": "العربية",
"e": "🇵🇸"
},
{
"lang": "de",
"label": "Deutsch",
"e": "🇩🇪"
},
{
"lang": "en",
"label": "English",
"e": "🇺🇸"
},
{
"lang": "es",
"label": "Español",
"e": "🇲🇽"
},
{
"lang": "fr",
"label": "Français",
"e": "🇫🇷"
},
{
"lang": "it",
"label": "Italiano",
"e": "🇮🇹"
},
{
"lang": "ja",
"label": "日本語",
"e": "🇯🇵"
},
{
"lang": "ko",
"label": "한국어",
"e": "🇰🇷"
},
{
"lang": "pt",
"label": "Português",
"e": "🇧🇷"
},
{
"lang": "tr",
"label": "Türkçe",
"e": "🇹🇷"
},
{
"lang": "ru",
"label": "Русский",
"e": "🇷🇺"
},
{
"lang": "uk",
"label": "Українська",
"e": "🇺🇦"
},
{
"lang": "vi",
"label": "Tiếng Việt",
"e": "🇻🇳"
},
{
"lang": "zh-CN",
"label": "简体中文",
"e": "🇨🇳"
},
{
"lang": "zh-HK",
"label": "繁體中文",
"e": "🇭🇰"
}
]

View File

@@ -0,0 +1,117 @@
export default [
{
lang: "ar",
label: "العربية",
e: "🇵🇸",
},
{
lang: "cs",
label: "Čeština",
e: "🇨🇿",
},
{
lang: "da",
label: "Dansk",
e: "🇩🇰",
},
{
lang: "de",
label: "Deutsch",
e: "🇩🇪",
},
{
lang: "en",
label: "English",
e: "🇺🇸",
},
{
lang: "es",
label: "Español",
e: "🇲🇽",
},
{
lang: "fa",
label: "فارسی",
e: "🇮🇷",
},
{
lang: "fr",
label: "Français",
e: "🇫🇷",
},
{
lang: "hr",
label: "Hrvatski",
e: "🇭🇷",
},
{
lang: "it",
label: "Italiano",
e: "🇮🇹",
},
{
lang: "ja",
label: "日本語",
e: "🇯🇵",
},
{
lang: "ko",
label: "한국어",
e: "🇰🇷",
},
{
lang: "nl",
label: "Nederlands",
e: "🇳🇱",
},
{
lang: "pl",
label: "Polski",
e: "🇵🇱",
},
{
lang: "pt",
label: "Português",
e: "🇧🇷",
},
{
lang: "tr",
label: "Türkçe",
e: "🇹🇷",
},
{
lang: "ru",
label: "Русский",
e: "🇷🇺",
},
{
lang: "sl",
label: "Slovenščina",
e: "🇸🇮",
},
{
lang: "sv",
label: "Svenska",
e: "🇸🇪",
},
{
lang: "uk",
label: "Українська",
e: "🇺🇦",
},
{
lang: "vi",
label: "Tiếng Việt",
e: "🇻🇳",
},
{
lang: "zh-CN",
label: "简体中文",
e: "🇨🇳",
},
{
lang: "zh-HK",
label: "繁體中文",
e: "🇭🇰",
},
] as const

View File

@@ -26,7 +26,7 @@ export const $chartTime = atom("1h") as WritableAtom<ChartTimes>
/** User settings */ /** User settings */
export const $userSettings = map<UserSettings>({ export const $userSettings = map<UserSettings>({
chartTime: "1h", chartTime: "1h",
emails: [pb.authStore.model?.email || ""], emails: [pb.authStore.record?.email || ""],
}) })
// update local storage on change // update local storage on change
$userSettings.subscribe((value) => { $userSettings.subscribe((value) => {

View File

@@ -91,8 +91,8 @@ export const updateFavicon = (newIcon: string) => {
;(document.querySelector("link[rel='icon']") as HTMLLinkElement).href = `/static/${newIcon}` ;(document.querySelector("link[rel='icon']") as HTMLLinkElement).href = `/static/${newIcon}`
} }
export const isAdmin = () => pb.authStore.model?.role === "admin" export const isAdmin = () => pb.authStore.record?.role === "admin"
export const isReadOnlyUser = () => pb.authStore.model?.role === "readonly" export const isReadOnlyUser = () => pb.authStore.record?.role === "readonly"
/** Update systems / alerts list when records change */ /** Update systems / alerts list when records change */
export function updateRecordList<T extends RecordModel>(e: RecordSubscription<T>, $store: WritableAtom<T[]>) { export function updateRecordList<T extends RecordModel>(e: RecordSubscription<T>, $store: WritableAtom<T[]>) {
@@ -251,7 +251,7 @@ export async function updateUserSettings() {
} }
// create user settings if error fetching existing // create user settings if error fetching existing
try { try {
const createdSettings = await pb.collection("user_settings").create({ user: pb.authStore.model!.id }) const createdSettings = await pb.collection("user_settings").create({ user: pb.authStore.record!.id })
$userSettings.set(createdSettings.settings) $userSettings.set(createdSettings.settings)
} catch (e) { } catch (e) {
console.log("create settings", e) console.log("create settings", e)
@@ -272,7 +272,7 @@ export const getSizeAndUnit = (n: number, isGigabytes = true) => {
} else if (sizeInGB >= 1) { } else if (sizeInGB >= 1) {
return { v: sizeInGB, u: " GB" } return { v: sizeInGB, u: " GB" }
} }
return { v: n, u: " MB" } return { v: isGigabytes ? sizeInGB * 1_000 : n, u: " MB" }
} }
export const chartMargin = { top: 12 } export const chartMargin = { top: 12 }

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: 2024-11-02 02:13\n" "PO-Revision-Date: 2024-12-17 21: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"
@@ -18,11 +18,11 @@ msgstr ""
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n" "X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n" "X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# يوم} other {# أيام}}" msgstr "{0, plural, one {# يوم} other {# أيام}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# ساعة} other {# ساعات}}" msgstr "{hours, plural, one {# ساعة} other {# ساعات}}"
@@ -47,24 +47,27 @@ msgid "30 days"
msgstr "30 يومًا" msgstr "30 يومًا"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "إجراءات" msgstr "إجراءات"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "التنبيهات النشطة" msgstr "التنبيهات النشطة"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "إضافة <0>نظام</0>" msgstr "إضافة <0>نظام</0>"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "إضافة نظام جديد" msgstr "إضافة نظام جديد"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "إضافة نظام" msgstr "إضافة نظام"
@@ -76,16 +79,15 @@ msgstr "إضافة عنوان URL"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "تعديل خيارات العرض للرسوم البيانية." msgstr "تعديل خيارات العرض للرسوم البيانية."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "مسؤول" msgstr "مسؤول"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "وكيل" msgstr "وكيل"
@@ -95,50 +97,53 @@ msgid "Alerts"
msgstr "التنبيهات" msgstr "التنبيهات"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "جميع الأنظمة" msgstr "جميع الأنظمة"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "هل أنت متأكد أنك تريد حذف {name}؟" msgstr "هل أنت متأكد أنك تريد حذف {name}؟"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "مزودو المصادقة"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "النسخ التلقائي يتطلب سياقًا آمنًا." msgstr "النسخ التلقائي يتطلب سياقًا آمنًا."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "متوسط" msgstr "متوسط"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "متوسط استخدام وحدة المعالجة المركزية للحاويات" msgstr "متوسط استخدام وحدة المعالجة المركزية للحاويات"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "المتوسط يتجاوز <0>{value}{0}</0>" msgstr "المتوسط يتجاوز <0>{value}{0}</0>"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "متوسط ​​استهلاك طاقة GPUs"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "متوسط استخدام وحدة المعالجة المركزية على مستوى النظام" msgstr "متوسط استخدام وحدة المعالجة المركزية على مستوى النظام"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr "متوسط ​​استخدام {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "النسخ الاحتياطية" msgstr "النسخ الاحتياطية"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "عرض النطاق الترددي" msgstr "عرض النطاق الترددي"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
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 "يدعم Beszel OpenID Connect والعديد من مزودي المصادقة OAuth2."
@@ -146,7 +151,7 @@ msgstr "يدعم Beszel OpenID Connect والعديد من مزودي المصا
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "يستخدم Beszel <0>Shoutrrr</0> للتكامل مع خدمات الإشعارات الشهيرة." msgstr "يستخدم Beszel <0>Shoutrrr</0> للتكامل مع خدمات الإشعارات الشهيرة."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "ثنائي" msgstr "ثنائي"
@@ -154,7 +159,7 @@ msgstr "ثنائي"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "ذاكرة التخزين المؤقت / المخازن المؤقتة" msgstr "ذاكرة التخزين المؤقت / المخازن المؤقتة"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "إلغاء" msgstr "إلغاء"
@@ -182,15 +187,10 @@ msgstr "تحقق من السجلات لمزيد من التفاصيل."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "تحقق من خدمة الإشعارات الخاصة بك" msgstr "تحقق من خدمة الإشعارات الخاصة بك"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "انقر للنسخ" msgstr "انقر للنسخ"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "أعمدة"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -200,12 +200,12 @@ msgstr "تعليمات سطر الأوامر"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "قم بتكوين كيفية تلقي إشعارات التنبيه." msgstr "قم بتكوين كيفية تلقي إشعارات التنبيه."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "تأكيد كلمة المرور" msgstr "تأكيد كلمة المرور"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "متابعة" msgstr "متابعة"
@@ -213,15 +213,15 @@ msgstr "متابعة"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "تم النسخ إلى الحافظة" msgstr "تم النسخ إلى الحافظة"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "نسخ" msgstr "نسخ"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "نسخ المضيف" msgstr "نسخ المضيف"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "نسخ أمر لينكس" msgstr "نسخ أمر لينكس"
@@ -229,17 +229,17 @@ msgstr "نسخ أمر لينكس"
msgid "Copy text" msgid "Copy text"
msgstr "نسخ النص" msgstr "نسخ النص"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "المعالج" msgstr "المعالج"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "استخدام وحدة المعالجة المركزية" msgstr "استخدام وحدة المعالجة المركزية"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "إنشاء حساب" msgstr "إنشاء حساب"
@@ -248,8 +248,8 @@ msgstr "إنشاء حساب"
msgid "Dark" msgid "Dark"
msgstr "داكن" msgstr "داكن"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "لوحة التحكم" msgstr "لوحة التحكم"
@@ -257,49 +257,45 @@ msgstr "لوحة التحكم"
msgid "Default time period" msgid "Default time period"
msgstr "الفترة الزمنية الافتراضية" msgstr "الفترة الزمنية الافتراضية"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "حذف" msgstr "حذف"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "القرص" msgstr "القرص"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "إدخال/إخراج القرص" msgstr "إدخال/إخراج القرص"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "استخدام القرص" msgstr "استخدام القرص"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "استخدام القرص لـ {extraFsName}" msgstr "استخدام القرص لـ {extraFsName}"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "استخدام وحدة المعالجة المركزية لـ Docker" msgstr "استخدام CPU لـ Docker"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "استخدام الذاكرة لـ Docker" msgstr "استخدام الذاكرة لـ Docker"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "إدخال/إخراج الشبكة لـ Docker" msgstr "إدخال/إخراج الشبكة لـ Docker"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "التوثيق" msgstr "التوثيق"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "البريد الإلكتروني"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "البريد الإلكتروني" msgstr "البريد الإلكتروني"
@@ -308,7 +304,7 @@ msgstr "البريد الإلكتروني"
msgid "Email notifications" msgid "Email notifications"
msgstr "إشعارات البريد الإلكتروني" msgstr "إشعارات البريد الإلكتروني"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "أدخل عنوان البريد الإلكتروني لإعادة تعيين كلمة المرور" msgstr "أدخل عنوان البريد الإلكتروني لإعادة تعيين كلمة المرور"
@@ -316,13 +312,13 @@ msgstr "أدخل عنوان البريد الإلكتروني لإعادة تع
msgid "Enter email address..." msgid "Enter email address..."
msgstr "أدخل عنوان البريد الإلكتروني..." msgstr "أدخل عنوان البريد الإلكتروني..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "خطأ" msgstr "خطأ"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "يتجاوز {0}{1} في آخر {2, plural, one {# دقيقة} other {# دقائق}}" msgstr "يتجاوز {0}{1} في آخر {2, plural, one {# دقيقة} other {# دقائق}}"
@@ -351,20 +347,20 @@ msgstr "فشل في حفظ الإعدادات"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "فشل في إرسال إشعار الاختبار" msgstr "فشل في إرسال إشعار الاختبار"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "فشل في تحديث التنبيه" msgstr "فشل في تحديث التنبيه"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "تصفية..." msgstr "تصفية..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "لمدة <0>{min}</0> {min, plural, one {دقيقة} other {دقائق}}" msgstr "لمدة <0>{min}</0> {min, plural, one {دقيقة} other {دقائق}}"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "هل نسيت كلمة المرور؟" msgstr "هل نسيت كلمة المرور؟"
@@ -374,7 +370,15 @@ msgstr "هل نسيت كلمة المرور؟"
msgid "General" msgid "General"
msgstr "عام" msgstr "عام"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "استهلاك طاقة GPU"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "شبكة"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "مضيف / IP" msgstr "مضيف / IP"
@@ -387,7 +391,7 @@ msgid "Invalid email address."
msgstr "عنوان البريد الإلكتروني غير صالح." msgstr "عنوان البريد الإلكتروني غير صالح."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "كيرنل" msgstr "كيرنل"
@@ -395,26 +399,30 @@ msgstr "كيرنل"
msgid "Language" msgid "Language"
msgstr "اللغة" msgstr "اللغة"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "التخطيط"
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "فاتح" msgstr "فاتح"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "تسجيل الخروج" msgstr "تسجيل الخروج"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "تسجيل الدخول" msgstr "تسجيل الدخول"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "فشل محاولة تسجيل الدخول" msgstr "فشل محاولة تسجيل الدخول"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "السجلات" msgstr "السجلات"
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "إدارة تفضيلات العرض والإشعارات." msgstr "إدارة تفضيلات العرض والإشعارات."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "1 دقيقة كحد" msgstr "1 دقيقة كحد"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "الذاكرة" msgstr "الذاكرة"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "استخدام الذاكرة" msgstr "استخدام الذاكرة"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "استخدام الذاكرة لحاويات Docker" msgstr "استخدام الذاكرة لحاويات Docker"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "الاسم" msgstr "الاسم"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "الشبكة" msgstr "الشبكة"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "حركة مرور الشبكة لحاويات Docker" msgstr "حركة مرور الشبكة لحاويات Docker"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "حركة مرور الشبكة للواجهات العامة" msgstr "حركة مرور الشبكة للواجهات العامة"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "لم يتم العثور على نتائج." msgstr "لم يتم العثور على نتائج."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "لم يتم العثور على أنظمة." msgstr "لم يتم العثور على أنظمة."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "الإشعارات" msgstr "الإشعارات"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "دعم OAuth 2 / OIDC" msgstr "دعم OAuth 2 / OIDC"
@@ -482,11 +491,11 @@ msgstr "دعم OAuth 2 / OIDC"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "في كل إعادة تشغيل، سيتم تحديث الأنظمة في قاعدة البيانات لتتطابق مع الأنظمة المعرفة في الملف." msgstr "في كل إعادة تشغيل، سيتم تحديث الأنظمة في قاعدة البيانات لتتطابق مع الأنظمة المعرفة في الملف."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "فتح القائمة" msgstr "فتح القائمة"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "أو المتابعة باستخدام" msgstr "أو المتابعة باستخدام"
@@ -494,28 +503,28 @@ msgstr "أو المتابعة باستخدام"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "الكتابة فوق التنبيهات الحالية" msgstr "الكتابة فوق التنبيهات الحالية"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "صفحة" msgstr "صفحة"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "الصفحات / الإعدادات" msgstr "الصفحات / الإعدادات"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "كلمة المرور" msgstr "كلمة المرور"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "يجب أن تكون كلمة المرور مكونة من 10 أحرف على الأقل." msgstr "كلمة المرور يجب أن تتكون من 8 أحرف على الأقل."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "تم استلام طلب إعادة تعيين كلمة المرور" msgstr "تم استلام طلب إعادة تعيين كلمة المرور"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "إيقاف مؤقت" msgstr "إيقاف مؤقت"
@@ -523,20 +532,20 @@ msgstr "إيقاف مؤقت"
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."
msgstr "يرجى <0>تكوين خادم SMTP</0> لضمان تسليم التنبيهات." msgstr "يرجى <0>تكوين خادم SMTP</0> لضمان تسليم التنبيهات."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "يرجى التحقق من السجلات لمزيد من التفاصيل." msgstr "يرجى التحقق من السجلات لمزيد من التفاصيل."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "يرجى التحقق من بيانات الاعتماد الخاصة بك والمحاولة مرة أخرى" msgstr "يرجى التحقق من بيانات الاعتماد الخاصة بك والمحاولة مرة أخرى"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "يرجى إنشاء حساب مسؤول" msgstr "يرجى إنشاء حساب مسؤول"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "يرجى تمكين النوافذ المنبثقة لهذا الموقع" msgstr "يرجى تمكين النوافذ المنبثقة لهذا الموقع"
@@ -544,35 +553,40 @@ msgstr "يرجى تمكين النوافذ المنبثقة لهذا الموق
msgid "Please log in again" msgid "Please log in again"
msgstr "يرجى تسجيل الدخول مرة أخرى" msgstr "يرجى تسجيل الدخول مرة أخرى"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "يرجى الاطلاع على <0>التوثيق</0> للحصول على التعليمات." msgstr "يرجى الاطلاع على <0>التوثيق</0> للحصول على التعليمات."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "يرجى تسجيل الدخول إلى حسابك" msgstr "يرجى تسجيل الدخول إلى حسابك"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "المنفذ" msgstr "المنفذ"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "الاستخدام الدقيق في الوقت المسجل"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "اللغة المفضلة" msgstr "اللغة المفضلة"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "المفتاح العام" msgstr "المفتاح العام"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "قراءة" msgstr "قراءة"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "تم الاستلام" msgstr "تم الاستلام"
@@ -580,7 +594,7 @@ msgstr "تم الاستلام"
msgid "Reset Password" msgid "Reset Password"
msgstr "إعادة تعيين كلمة المرور" msgstr "إعادة تعيين كلمة المرور"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "استئناف" msgstr "استئناف"
@@ -593,11 +607,11 @@ msgstr "احفظ العنوان باستخدام مفتاح الإدخال أو
msgid "Save Settings" msgid "Save Settings"
msgstr "حفظ الإعدادات" msgstr "حفظ الإعدادات"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "بحث" msgstr "بحث"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "البحث عن الأنظمة أو الإعدادات..." msgstr "البحث عن الأنظمة أو الإعدادات..."
@@ -605,8 +619,8 @@ msgstr "البحث عن الأنظمة أو الإعدادات..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "راجع <0>إعدادات الإشعارات</0> لتكوين كيفية تلقي التنبيهات." msgstr "راجع <0>إعدادات الإشعارات</0> لتكوين كيفية تلقي التنبيهات."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "تم الإرسال" msgstr "تم الإرسال"
@@ -614,9 +628,9 @@ msgstr "تم الإرسال"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "يحدد النطاق الزمني الافتراضي للرسوم البيانية عند عرض النظام." msgstr "يحدد النطاق الزمني الافتراضي للرسوم البيانية عند عرض النظام."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -626,34 +640,40 @@ msgstr "الإعدادات"
msgid "Settings saved" msgid "Settings saved"
msgstr "تم حفظ الإعدادات" msgstr "تم حفظ الإعدادات"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "تسجيل الدخول" msgstr "تسجيل الدخول"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "إعدادات SMTP" msgstr "إعدادات SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "الترتيب حسب"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "الحالة" msgstr "الحالة"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "مساحة التبديل المستخدمة من قبل النظام" msgstr "مساحة التبديل المستخدمة من قبل النظام"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "استخدام التبديل" msgstr "استخدام التبديل"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "النظام" msgstr "النظام"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "الأنظمة" msgstr "الأنظمة"
@@ -661,12 +681,16 @@ msgstr "الأنظمة"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "يمكن إدارة الأنظمة في ملف <0>config.yml</0> داخل دليل البيانات الخاص بك." msgstr "يمكن إدارة الأنظمة في ملف <0>config.yml</0> داخل دليل البيانات الخاص بك."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "جدول"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "درجة الحرارة" msgstr "درجة الحرارة"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "درجات حرارة مستشعرات النظام" msgstr "درجات حرارة مستشعرات النظام"
@@ -678,11 +702,11 @@ msgstr "اختبار <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "تم إرسال إشعار الاختبار" msgstr "تم إرسال إشعار الاختبار"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "يجب أن يكون الوكيل قيد التشغيل على النظام للاتصال. انسخ أمر التثبيت للوكيل أدناه." msgstr "يجب أن يكون الوكيل قيد التشغيل على النظام للاتصال. انسخ أمر التثبيت للوكيل أدناه."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "يجب أن يكون الوكيل قيد التشغيل على النظام للاتصال. انسخ <0>docker-compose.yml</0> للوكيل أدناه." msgstr "يجب أن يكون الوكيل قيد التشغيل على النظام للاتصال. انسخ <0>docker-compose.yml</0> للوكيل أدناه."
@@ -690,15 +714,15 @@ msgstr "يجب أن يكون الوكيل قيد التشغيل على النظ
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "ثم قم بتسجيل الدخول إلى الواجهة الخلفية وأعد تعيين كلمة مرور حساب المستخدم الخاص بك في جدول المستخدمين." msgstr "ثم قم بتسجيل الدخول إلى الواجهة الخلفية وأعد تعيين كلمة مرور حساب المستخدم الخاص بك في جدول المستخدمين."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "لا يمكن التراجع عن هذا الإجراء. سيؤدي ذلك إلى حذف جميع السجلات الحالية لـ {name} من قاعدة البيانات بشكل دائم." msgstr "لا يمكن التراجع عن هذا الإجراء. سيؤدي ذلك إلى حذف جميع السجلات الحالية لـ {name} من قاعدة البيانات بشكل دائم."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "معدل نقل {extraFsName}" msgstr "معدل نقل {extraFsName}"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "معدل نقل نظام الملفات الجذر" msgstr "معدل نقل نظام الملفات الجذر"
@@ -706,8 +730,8 @@ msgstr "معدل نقل نظام الملفات الجذر"
msgid "To email(s)" msgid "To email(s)"
msgstr "إلى البريد الإلكتروني" msgstr "إلى البريد الإلكتروني"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "تبديل الشبكة" msgstr "تبديل الشبكة"
@@ -731,10 +755,6 @@ msgstr "يتم التفعيل عندما يتجاوز استخدام وحدة ا
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "يتم التفعيل عندما يتجاوز استخدام الذاكرة عتبة معينة" msgstr "يتم التفعيل عندما يتجاوز استخدام الذاكرة عتبة معينة"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "يتم التفعيل عندما يتجاوز استخدام الذاكرة عتبة معينة."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "يتم التفعيل عندما يتغير الحالة بين التشغيل والإيقاف" msgstr "يتم التفعيل عندما يتغير الحالة بين التشغيل والإيقاف"
@@ -743,41 +763,44 @@ msgstr "يتم التفعيل عندما يتغير الحالة بين التش
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "يتم التفعيل عندما يتجاوز استخدام أي قرص عتبة معينة" msgstr "يتم التفعيل عندما يتجاوز استخدام أي قرص عتبة معينة"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "محدث في الوقت الحقيقي. انقر على نظام لعرض المعلومات." msgstr "محدث في الوقت الحقيقي. انقر على نظام لعرض المعلومات."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "مدة التشغيل" msgstr "مدة التشغيل"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "الاستخدام" msgstr "الاستخدام"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "استخدام القسم الجذر" msgstr "استخدام القسم الجذر"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "مستخدم" msgstr "مستخدم"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "اسم المستخدم"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "اسم المستخدم"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "المستخدمون" msgstr "المستخدمون"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "عرض"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "الأعمدة الظاهرة"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "في انتظار وجود سجلات كافية للعرض" msgstr "في انتظار وجود سجلات كافية للعرض"
@@ -789,9 +812,9 @@ msgstr "هل تريد مساعدتنا في تحسين ترجماتنا؟ تحق
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "إشعارات Webhook / Push" msgstr "إشعارات Webhook / Push"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "كتابة" msgstr "كتابة"

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,831 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: cs\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-17 21:36\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Crowdin-Project: beszel\n"
"X-Crowdin-Project-ID: 733311\n"
"X-Crowdin-Language: cs\n"
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# den} few {# dny} other {# dní}}"
#: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# Hodina} few {# Hodiny} many {# Hodin} other {# Hodin}}"
#: src/lib/utils.ts:139
msgid "1 hour"
msgstr "1 hodina"
#: src/lib/utils.ts:162
msgid "1 week"
msgstr "1 týden"
#: src/lib/utils.ts:147
msgid "12 hours"
msgstr "12 hodin"
#: src/lib/utils.ts:155
msgid "24 hours"
msgstr "24 hodin"
#: src/lib/utils.ts:170
msgid "30 days"
msgstr "30 dní"
#. Table column
#: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions"
msgstr "Akce"
#: src/components/routes/home.tsx:61
msgid "Active Alerts"
msgstr "Aktivní výstrahy"
#: src/components/add-system.tsx:78
msgid "Add <0>System</0>"
msgstr "Přidat <0>Systém</0>"
#: src/components/add-system.tsx:87
msgid "Add New System"
msgstr "Přidat nový systém"
#: src/components/add-system.tsx:165
#: src/components/add-system.tsx:176
msgid "Add system"
msgstr "Přidat systém"
#: src/components/routes/settings/notifications.tsx:156
msgid "Add URL"
msgstr "Přidat URL"
#: src/components/routes/settings/general.tsx:81
msgid "Adjust display options for charts."
msgstr "Upravit možnosti zobrazení pro grafy."
#: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:188
msgid "Admin"
msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:201
msgid "Agent"
msgstr "Agent"
#: src/components/alerts/alert-button.tsx:32
#: src/components/alerts/alert-button.tsx:68
msgid "Alerts"
msgstr "Výstrahy"
#: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:266
msgid "All Systems"
msgstr "Všechny systémy"
#: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?"
msgstr "Opravdu chcete odstranit {name}?"
#: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context."
msgstr "Automatická kopie vyžaduje zabezpečený kontext."
#: src/components/routes/system.tsx:625
msgid "Average"
msgstr "Průměr"
#: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers"
msgstr "Průměrné využití CPU kontejnerů"
#: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>"
msgstr "Průměr je vyšší než <0>{value}{0}</0>"
#: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Průměrná spotřeba energie GPU"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization"
msgstr "Průměrné využití CPU v celém systému"
#: src/components/routes/system.tsx:515
msgid "Average utilization of {0}"
msgstr "Průměrné využití {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups"
msgstr "Zálohy"
#: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307
msgid "Bandwidth"
msgstr "Přenos"
#: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel podporuje OpenID Connect a mnoho poskytovatelů OAuth2 ověřování."
#: src/components/routes/settings/notifications.tsx:127
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel používá <0>Shoutrrr</0> k integraci s populárními notifikačními službami."
#: src/components/add-system.tsx:92
msgid "Binary"
msgstr "Binary"
#: src/components/charts/mem-chart.tsx:89
msgid "Cache / Buffers"
msgstr "Cache / vyrovnávací paměť"
#: src/components/systems-table/systems-table.tsx:581
msgid "Cancel"
msgstr "Zrušit"
#: src/components/routes/settings/config-yaml.tsx:68
msgid "Caution - potential data loss"
msgstr "Upozornění - možná ztráta dat"
#: src/components/routes/settings/general.tsx:36
msgid "Change general application options."
msgstr "Změnit obecné nastavení aplikace."
#: src/components/routes/settings/general.tsx:78
msgid "Chart options"
msgstr "Možnosti grafu"
#: src/components/login/forgot-pass-form.tsx:34
msgid "Check {email} for a reset link."
msgstr "Zkontrolujte {email} pro odkaz na obnovení."
#: src/components/routes/settings/layout.tsx:40
msgid "Check logs for more details."
msgstr "Pro více informací zkontrolujte logy."
#: src/components/routes/settings/notifications.tsx:183
msgid "Check your notification service"
msgstr "Zkontrolujte službu upozornění"
#: src/components/add-system.tsx:151
msgid "Click to copy"
msgstr "Klikněte pro zkopírování"
#: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions"
msgstr "Instrukce příkazového řádku"
#: src/components/routes/settings/notifications.tsx:77
msgid "Configure how you receive alert notifications."
msgstr "Konfigurace způsobu přijímání upozornění."
#: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:170
msgid "Confirm password"
msgstr "Potvrdit heslo"
#: src/components/systems-table/systems-table.tsx:587
msgid "Continue"
msgstr "Pokračovat"
#: src/lib/utils.ts:25
msgid "Copied to clipboard"
msgstr "Zkopírováno do schránky"
#: src/components/add-system.tsx:162
msgid "Copy"
msgstr "Kopírovat"
#: src/components/systems-table/systems-table.tsx:556
msgid "Copy host"
msgstr "Kopírovat hostitele"
#: src/components/add-system.tsx:173
msgid "Copy Linux command"
msgstr "Kopírovat příkaz Linux"
#: src/components/copy-to-clipboard.tsx:13
msgid "Copy text"
msgstr "Kopírovat text"
#: src/components/systems-table/systems-table.tsx:157
msgid "CPU"
msgstr "Procesor"
#: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289
msgid "CPU Usage"
msgstr "Využití procesoru"
#: src/components/login/auth-form.tsx:191
msgid "Create account"
msgstr "Vytvořit účet"
#. Dark theme
#: src/components/mode-toggle.tsx:21
msgid "Dark"
msgstr "Tmavý"
#: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:34
msgid "Dashboard"
msgstr "Přehled"
#: src/components/routes/settings/general.tsx:85
msgid "Default time period"
msgstr "Výchozí doba"
#: src/components/systems-table/systems-table.tsx:562
msgid "Delete"
msgstr "Odstranit"
#: src/components/systems-table/systems-table.tsx:173
msgid "Disk"
msgstr "Disk"
#: src/components/routes/system.tsx:431
msgid "Disk I/O"
msgstr "Disk I/O"
#: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301
msgid "Disk Usage"
msgstr "Využití disku"
#: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}"
msgstr "Využití disku {extraFsName}"
#: src/components/routes/system.tsx:395
msgid "Docker CPU Usage"
msgstr "Využití CPU Dockeru"
#: src/components/routes/system.tsx:416
msgid "Docker Memory Usage"
msgstr "Využití paměti Dockeru"
#: src/components/routes/system.tsx:457
msgid "Docker Network I/O"
msgstr "Síťové I/O Dockeru"
#: src/components/command-palette.tsx:124
msgid "Documentation"
msgstr "Dokumentace"
#: src/components/login/auth-form.tsx:128
#: src/components/login/forgot-pass-form.tsx:53
msgid "Email"
msgstr "Email"
#: src/components/routes/settings/notifications.tsx:91
msgid "Email notifications"
msgstr "Emailová upozornění"
#: src/components/login/login.tsx:38
msgid "Enter email address to reset password"
msgstr "Zadejte e-mailovou adresu pro obnovu hesla"
#: src/components/routes/settings/notifications.tsx:111
msgid "Enter email address..."
msgstr "Zadejte e-mailovou adresu..."
#: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187
msgid "Error"
msgstr "Chyba"
#: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Překračuje {0}{1} za {2, plural, one {poslední # minutu} few {poslední # minuty} other {posledních # minut}}"
#: src/components/routes/settings/config-yaml.tsx:72
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
msgstr "Stávající systémy, které nejsou definovány v <0>config.yml</0>, budou odstraněny. Provádějte pravidelné zálohování."
#: src/components/routes/settings/config-yaml.tsx:93
msgid "Export configuration"
msgstr "Exportovat konfiguraci"
#: src/components/routes/settings/config-yaml.tsx:48
msgid "Export your current systems configuration."
msgstr "Exportovat aktuální konfiguraci systémů."
#: src/lib/utils.ts:38
msgid "Failed to authenticate"
msgstr "Ověření se nezdařilo"
#: src/components/routes/settings/layout.tsx:39
#: src/components/routes/settings/notifications.tsx:62
msgid "Failed to save settings"
msgstr "Nepodařilo se uložit nastavení"
#: src/components/routes/settings/notifications.tsx:188
msgid "Failed to send test notification"
msgstr "Nepodařilo se odeslat testovací oznámení"
#: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert"
msgstr "Nepodařilo se aktualizovat upozornění"
#: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:273
msgid "Filter..."
msgstr "Filtr..."
#: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Za <0>{min}</0> {min, plural, one {minutu} few {minuty} other {minut}}"
#: src/components/login/auth-form.tsx:313
msgid "Forgot password?"
msgstr "Zapomněli jste heslo?"
#. Context: General settings
#: src/components/routes/settings/general.tsx:33
#: src/components/routes/settings/layout.tsx:51
msgid "General"
msgstr "Obecné"
#: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "Spotřeba energie GPU"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Mřížka"
#: src/components/add-system.tsx:120
msgid "Host / IP"
msgstr "Hostitel / IP"
#: src/components/login/forgot-pass-form.tsx:93
msgid "If you've lost the password to your admin account, you may reset it using the following command."
msgstr "Pokud jste ztratili heslo k vašemu účtu správce, můžete jej obnovit pomocí následujícího příkazu."
#: src/components/login/auth-form.tsx:16
msgid "Invalid email address."
msgstr "Neplatná e-mailová adresa."
#. Linux kernel
#: src/components/routes/system.tsx:262
msgid "Kernel"
msgstr "Kernel"
#: src/components/routes/settings/general.tsx:45
msgid "Language"
msgstr "Jazyk"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Rozvržení"
#. Light theme
#: src/components/mode-toggle.tsx:16
msgid "Light"
msgstr "Světlý"
#: src/components/navbar.tsx:104
msgid "Log Out"
msgstr "Odhlásit"
#: src/components/login/login.tsx:19
msgid "Login"
msgstr "Přihlásit"
#: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed"
msgstr "Pokus o přihlášení selhal"
#: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:85
msgid "Logs"
msgstr "Logy"
#: src/components/routes/settings/notifications.tsx:80
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
msgstr "Hledáte místo kde vytvářet upozornění? Klikněte na ikonu zvonku <0/> v systémové tabulce."
#: src/components/routes/settings/layout.tsx:85
msgid "Manage display and notification preferences."
msgstr "Správa nastavení zobrazení a oznámení."
#. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:628
msgid "Max 1 min"
msgstr "Max. 1 min"
#: src/components/systems-table/systems-table.tsx:165
msgid "Memory"
msgstr "Paměť"
#: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295
msgid "Memory Usage"
msgstr "Využití paměti"
#: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers"
msgstr "Využití paměti docker kontejnerů"
#: src/components/add-system.tsx:116
msgid "Name"
msgstr "Název"
#: src/components/systems-table/systems-table.tsx:181
msgid "Net"
msgstr "Síť"
#: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers"
msgstr "Síťový provoz kontejnerů docker"
#: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces"
msgstr "Síťový provoz veřejných rozhraní"
#: src/components/command-palette.tsx:49
msgid "No results found."
msgstr "Nenalezeny žádné výskyty."
#: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found."
msgstr "Nenalezeny žádné systémy."
#: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74
msgid "Notifications"
msgstr "Upozornění"
#: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support"
msgstr "Podpora OAuth 2 / OIDC"
#: src/components/routes/settings/config-yaml.tsx:61
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "Při každém restartu budou systémy v databázi aktualizovány tak, aby odpovídaly systémům definovaným v souboru."
#: src/components/systems-table/systems-table.tsx:528
msgid "Open menu"
msgstr "Otevřít menu"
#: src/components/login/auth-form.tsx:203
msgid "Or continue with"
msgstr "Nebo pokračujte s"
#: src/components/alerts/alert-button.tsx:109
msgid "Overwrite existing alerts"
msgstr "Přepsat existující upozornění"
#: src/components/command-palette.tsx:84
msgid "Page"
msgstr "Stránka"
#: src/components/command-palette.tsx:71
msgid "Pages / Settings"
msgstr "Stránky / Nastavení"
#: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:152
msgid "Password"
msgstr "Heslo"
#: src/components/login/auth-form.tsx:17
msgid "Password must be at least 8 characters."
msgstr "Heslo musí obsahovat alespoň 8 znaků."
#: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received"
msgstr "Žádost o obnovu hesla byla přijata"
#: src/components/systems-table/systems-table.tsx:550
msgid "Pause"
msgstr "Pozastavit"
#: src/components/routes/settings/notifications.tsx:95
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
msgstr "<0>nakonfigurujte SMTP server</0> pro zajištění toho, aby byla upozornění doručena."
#: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details."
msgstr "Pro více informací zkontrolujte logy."
#: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again"
msgstr "Zkontrolujte prosím Vaše přihlašovací údaje a zkuste to znovu"
#: src/components/login/login.tsx:36
msgid "Please create an admin account"
msgstr "Vytvořte si prosím účet administrátora"
#: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site"
msgstr "Prosím povolte vyskakovací okna pro tento web"
#: src/lib/utils.ts:39
msgid "Please log in again"
msgstr "Přihlaste se prosím znovu"
#: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions."
msgstr "Instrukce naleznete v <0>dokumentaci</0>."
#: src/components/login/login.tsx:40
msgid "Please sign in to your account"
msgstr "Přihlaste se prosím k vašemu účtu"
#: src/components/add-system.tsx:124
msgid "Port"
msgstr "Port"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Přesné využití v zaznamenaném čase"
#: src/components/routes/settings/general.tsx:58
msgid "Preferred Language"
msgstr "Upřednostňovaný jazyk"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:128
msgid "Public Key"
msgstr "Veřejný klíč"
#. Disk read
#: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:70
msgid "Read"
msgstr "Číst"
#. Network bytes received (download)
#: src/components/charts/area-chart.tsx:65
msgid "Received"
msgstr "Přijato"
#: src/components/login/forgot-pass-form.tsx:76
msgid "Reset Password"
msgstr "Obnovit heslo"
#: src/components/systems-table/systems-table.tsx:545
msgid "Resume"
msgstr "Pokračovat"
#: src/components/routes/settings/notifications.tsx:117
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
msgstr "Adresu uložte pomocí klávesy enter nebo čárky. Pro deaktivaci e-mailových oznámení ponechte prázdné pole."
#: src/components/routes/settings/general.tsx:106
#: src/components/routes/settings/notifications.tsx:167
msgid "Save Settings"
msgstr "Uložit nastavení"
#: src/components/navbar.tsx:133
msgid "Search"
msgstr "Hledat"
#: src/components/command-palette.tsx:46
msgid "Search for systems or settings..."
msgstr "Hledat systémy nebo nastavení..."
#: src/components/alerts/alert-button.tsx:71
msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Podívejte se na <0>nastavení upozornění</0> pro nastavení toho, jak přijímáte upozornění."
#. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:64
msgid "Sent"
msgstr "Odeslat"
#: src/components/routes/settings/general.tsx:100
msgid "Sets the default time range for charts when a system is viewed."
msgstr "Nastaví výchozí časový rozsah grafů, když je systém zobrazen."
#: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82
msgid "Settings"
msgstr "Nastavení"
#: src/components/routes/settings/layout.tsx:33
msgid "Settings saved"
msgstr "Nastavení uloženo"
#: src/components/login/auth-form.tsx:191
msgid "Sign in"
msgstr "Přihlásit se"
#: src/components/command-palette.tsx:185
msgid "SMTP settings"
msgstr "Nastavení SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Seřadit podle"
#: src/lib/utils.ts:282
msgid "Status"
msgstr "Stav"
#: src/components/routes/system.tsx:473
msgid "Swap space used by the system"
msgstr "Swap prostor využívaný systémem"
#: src/components/routes/system.tsx:472
msgid "Swap Usage"
msgstr "Swap využití"
#. System theme
#: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System"
msgstr "Systém"
#: src/components/navbar.tsx:77
msgid "Systems"
msgstr "Systémy"
#: src/components/routes/settings/config-yaml.tsx:55
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Systémy lze spravovat v souboru <0>config.yml</0> uvnitř datového adresáře."
#: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabulka"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314
msgid "Temperature"
msgstr "Teplota"
#: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors"
msgstr "Teploty systémových senzorů"
#: src/components/routes/settings/notifications.tsx:211
msgid "Test <0>URL</0>"
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/notifications.tsx:182
msgid "Test notification sent"
msgstr "Testovací oznámení odesláno"
#: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "Agent musí být v systému spuštěn, aby se mohl připojit. Zkopírujte níže uvedený instalační příkaz pro agenta."
#: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "Agent musí být v systému spuštěn, aby se mohl připojit. Zkopírujte níže uvedený soubor<0>docker-compose.yml</0> pro agenta."
#: src/components/login/forgot-pass-form.tsx:98
msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Poté se přihlaste do backendu a obnovte heslo k uživatelskému účtu v tabulce uživatelů."
#: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Tuto akci nelze vzít zpět. Tím se z databáze trvale odstraní všechny aktuální záznamy pro {name}."
#: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}"
msgstr "Propustnost {extraFsName}"
#: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem"
msgstr "Propustnost kořenového souborového systému"
#: src/components/routes/settings/notifications.tsx:106
msgid "To email(s)"
msgstr "Na email(y)"
#: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:372
msgid "Toggle grid"
msgstr "Přepnout mřížku"
#: src/components/mode-toggle.tsx:33
msgid "Toggle theme"
msgstr "Přepnout motiv"
#: src/lib/utils.ts:317
msgid "Triggers when any sensor exceeds a threshold"
msgstr "Spustí se, když některý senzor překročí prahovou hodnotu"
#: src/lib/utils.ts:310
msgid "Triggers when combined up/down exceeds a threshold"
msgstr "Spustí se, když kombinace up/down překročí prahovou hodnotu"
#: src/lib/utils.ts:292
msgid "Triggers when CPU usage exceeds a threshold"
msgstr "Spustí se, když využití procesoru překročí prahovou hodnotu"
#: src/lib/utils.ts:298
msgid "Triggers when memory usage exceeds a threshold"
msgstr "Spustí se, když využití paměti překročí prahovou hodnotu"
#: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down"
msgstr "Spouští se, když se změní dostupnost"
#: src/lib/utils.ts:304
msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Spustí se, když využití disku překročí prahovou hodnotu"
#: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information."
msgstr "Aktualizováno v reálném čase. Klepnutím na systém zobrazíte informace."
#: src/components/routes/system.tsx:261
msgid "Uptime"
msgstr "Doba provozu"
#: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage"
msgstr "Využití"
#: src/components/routes/system.tsx:424
msgid "Usage of root partition"
msgstr "Využití kořenového oddílu"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56
msgid "Used"
msgstr "Využito"
#: src/components/command-palette.tsx:142
#: src/components/navbar.tsx:69
msgid "Users"
msgstr "Uživatelé"
#: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Zobrazení"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Viditelné sloupce"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display"
msgstr "Čeká se na dostatek záznamů k zobrazení"
#: src/components/routes/settings/general.tsx:48
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
msgstr "Chcete nám pomoci s našimi překlady ještě lépe? Podívejte se na <0>Crowdin</0> pro více informací."
#: src/components/routes/settings/notifications.tsx:124
msgid "Webhook / Push notifications"
msgstr "Webhook / Push oznámení"
#. Disk write
#: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:69
msgid "Write"
msgstr "Psát"
#: src/components/routes/settings/layout.tsx:61
msgid "YAML Config"
msgstr "YAML konfigurace"
#: src/components/routes/settings/config-yaml.tsx:45
msgid "YAML Configuration"
msgstr "YAML konfigurace"
#: src/components/routes/settings/layout.tsx:34
msgid "Your user settings have been updated."
msgstr "Vaše uživatelská nastavení byla aktualizována."

View File

@@ -0,0 +1,831 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: da\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-01-05 19:49\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: beszel\n"
"X-Crowdin-Project-ID: 733311\n"
"X-Crowdin-Language: da\n"
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# day} other {# days}}"
#: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# hour} other {# hours}}"
#: src/lib/utils.ts:139
msgid "1 hour"
msgstr "1 time"
#: src/lib/utils.ts:162
msgid "1 week"
msgstr "1 uge"
#: src/lib/utils.ts:147
msgid "12 hours"
msgstr "12 timer"
#: src/lib/utils.ts:155
msgid "24 hours"
msgstr "24 timer"
#: src/lib/utils.ts:170
msgid "30 days"
msgstr "30 dage"
#. Table column
#: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions"
msgstr "Handlinger"
#: src/components/routes/home.tsx:61
msgid "Active Alerts"
msgstr "Aktive Alarmer"
#: src/components/add-system.tsx:78
msgid "Add <0>System</0>"
msgstr "Tilføj <0>System</0>"
#: src/components/add-system.tsx:87
msgid "Add New System"
msgstr "Tilføj nyt system"
#: src/components/add-system.tsx:165
#: src/components/add-system.tsx:176
msgid "Add system"
msgstr "Tilføj system"
#: src/components/routes/settings/notifications.tsx:156
msgid "Add URL"
msgstr "Tilføj URL"
#: src/components/routes/settings/general.tsx:81
msgid "Adjust display options for charts."
msgstr "Juster visningsindstillinger for diagrammer."
#: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:188
msgid "Admin"
msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:201
msgid "Agent"
msgstr "Agent"
#: src/components/alerts/alert-button.tsx:32
#: src/components/alerts/alert-button.tsx:68
msgid "Alerts"
msgstr "Alarmer"
#: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:266
msgid "All Systems"
msgstr "Alle systemer"
#: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?"
msgstr "Er du sikker på, at du vil slette {name}?"
#: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context."
msgstr "Automatisk kopiering kræver en sikker kontekst."
#: src/components/routes/system.tsx:625
msgid "Average"
msgstr "Gennemsnitlig"
#: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers"
msgstr "Gennemsnitlig CPU udnyttelse af containere"
#: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>"
msgstr "Gennemsnit overstiger <0>{value}{0}</0>"
#: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Gennemsnitligt strømforbrug for GPU'er"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization"
msgstr "Gennemsnitlig systembaseret CPU-udnyttelse"
#: src/components/routes/system.tsx:515
msgid "Average utilization of {0}"
msgstr "Gennemsnitlig udnyttelse af {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups"
msgstr "Sikkerhedskopier"
#: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307
msgid "Bandwidth"
msgstr "Båndbredde"
#: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel understøtter OpenID Connect og mange OAuth2 godkendelsesudbydere."
#: src/components/routes/settings/notifications.tsx:127
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel bruger <0>Shoutrrr</0> til at integrere med populære notifikationstjenester."
#: src/components/add-system.tsx:92
msgid "Binary"
msgstr "Binær"
#: src/components/charts/mem-chart.tsx:89
msgid "Cache / Buffers"
msgstr "Cache / Buffere"
#: src/components/systems-table/systems-table.tsx:581
msgid "Cancel"
msgstr "Fortryd"
#: src/components/routes/settings/config-yaml.tsx:68
msgid "Caution - potential data loss"
msgstr "Forsigtig - muligt tab af data"
#: src/components/routes/settings/general.tsx:36
msgid "Change general application options."
msgstr "Skift generelle applikationsindstillinger."
#: src/components/routes/settings/general.tsx:78
msgid "Chart options"
msgstr "Diagrammuligheder"
#: src/components/login/forgot-pass-form.tsx:34
msgid "Check {email} for a reset link."
msgstr "Tjek {email} for et nulstillingslink."
#: src/components/routes/settings/layout.tsx:40
msgid "Check logs for more details."
msgstr "Tjek logfiler for flere detaljer."
#: src/components/routes/settings/notifications.tsx:183
msgid "Check your notification service"
msgstr "Tjek din notifikationstjeneste"
#: src/components/add-system.tsx:151
msgid "Click to copy"
msgstr "Klik for at kopiere"
#: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions"
msgstr "Instruktioner for kommandolinje"
#: src/components/routes/settings/notifications.tsx:77
msgid "Configure how you receive alert notifications."
msgstr "Konfigurer hvordan du modtager advarselsmeddelelser."
#: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:170
msgid "Confirm password"
msgstr "Bekræft adgangskode"
#: src/components/systems-table/systems-table.tsx:587
msgid "Continue"
msgstr "Forsæt"
#: src/lib/utils.ts:25
msgid "Copied to clipboard"
msgstr "Kopieret til udklipsholder"
#: src/components/add-system.tsx:162
msgid "Copy"
msgstr "Kopier"
#: src/components/systems-table/systems-table.tsx:556
msgid "Copy host"
msgstr "Kopier host"
#: src/components/add-system.tsx:173
msgid "Copy Linux command"
msgstr "Kopier Linux kommando"
#: src/components/copy-to-clipboard.tsx:13
msgid "Copy text"
msgstr "Kopier tekst"
#: src/components/systems-table/systems-table.tsx:157
msgid "CPU"
msgstr "CPU"
#: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289
msgid "CPU Usage"
msgstr "CPU forbrug"
#: src/components/login/auth-form.tsx:191
msgid "Create account"
msgstr "Opret konto"
#. Dark theme
#: src/components/mode-toggle.tsx:21
msgid "Dark"
msgstr "Mørk"
#: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:34
msgid "Dashboard"
msgstr "Oversigtspanel"
#: src/components/routes/settings/general.tsx:85
msgid "Default time period"
msgstr "Standard tidsperiode"
#: src/components/systems-table/systems-table.tsx:562
msgid "Delete"
msgstr "Slet"
#: src/components/systems-table/systems-table.tsx:173
msgid "Disk"
msgstr "Disk"
#: src/components/routes/system.tsx:431
msgid "Disk I/O"
msgstr "Disk I/O"
#: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301
msgid "Disk Usage"
msgstr "Diskforbrug"
#: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}"
msgstr "Diskforbrug af {extraFsName}"
#: src/components/routes/system.tsx:395
msgid "Docker CPU Usage"
msgstr "Docker CPU forbrug"
#: src/components/routes/system.tsx:416
msgid "Docker Memory Usage"
msgstr "Docker Hukommelsesforbrug"
#: src/components/routes/system.tsx:457
msgid "Docker Network I/O"
msgstr "Docker Netværk I/O"
#: src/components/command-palette.tsx:124
msgid "Documentation"
msgstr "Dokumentation"
#: src/components/login/auth-form.tsx:128
#: src/components/login/forgot-pass-form.tsx:53
msgid "Email"
msgstr "E-mail"
#: src/components/routes/settings/notifications.tsx:91
msgid "Email notifications"
msgstr "Email-notifikationer"
#: src/components/login/login.tsx:38
msgid "Enter email address to reset password"
msgstr "Indtast e-mailadresse for at nulstille adgangskoden"
#: src/components/routes/settings/notifications.tsx:111
msgid "Enter email address..."
msgstr "Indtast e-mailadresse..."
#: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187
msgid "Error"
msgstr "Fejl"
#: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Overskrider {0}{1} i sidste {2, plural, one {# minut} other {# minutter}}"
#: src/components/routes/settings/config-yaml.tsx:72
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
msgstr "Eksisterende systemer ikke defineret i <0>config.yml</0> vil blive slettet. Opret venligst regelmæssige sikkerhedskopier."
#: src/components/routes/settings/config-yaml.tsx:93
msgid "Export configuration"
msgstr "Eksporter konfiguration"
#: src/components/routes/settings/config-yaml.tsx:48
msgid "Export your current systems configuration."
msgstr "Eksporter din nuværende systemkonfiguration."
#: src/lib/utils.ts:38
msgid "Failed to authenticate"
msgstr "Kunne ikke godkende"
#: src/components/routes/settings/layout.tsx:39
#: src/components/routes/settings/notifications.tsx:62
msgid "Failed to save settings"
msgstr "Kunne ikke gemme indstillinger"
#: src/components/routes/settings/notifications.tsx:188
msgid "Failed to send test notification"
msgstr "Afsendelse af testnotifikation mislykkedes"
#: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert"
msgstr "Kunne ikke opdatere alarm"
#: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:273
msgid "Filter..."
msgstr "Filter..."
#: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "For <0>{min}</0> {min, plural, one {minut} other {minutter}}"
#: src/components/login/auth-form.tsx:313
msgid "Forgot password?"
msgstr "Glemt adgangskode?"
#. Context: General settings
#: src/components/routes/settings/general.tsx:33
#: src/components/routes/settings/layout.tsx:51
msgid "General"
msgstr "Generelt"
#: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "Gpu Strøm Træk"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Gitter"
#: src/components/add-system.tsx:120
msgid "Host / IP"
msgstr "Vært / IP"
#: src/components/login/forgot-pass-form.tsx:93
msgid "If you've lost the password to your admin account, you may reset it using the following command."
msgstr "Hvis du har mistet adgangskoden til din administratorkonto, kan du nulstille den ved hjælp af følgende kommando."
#: src/components/login/auth-form.tsx:16
msgid "Invalid email address."
msgstr "Ugyldig email adresse."
#. Linux kernel
#: src/components/routes/system.tsx:262
msgid "Kernel"
msgstr "Kernel"
#: src/components/routes/settings/general.tsx:45
msgid "Language"
msgstr "Sprog"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Layout"
#. Light theme
#: src/components/mode-toggle.tsx:16
msgid "Light"
msgstr "Lys"
#: src/components/navbar.tsx:104
msgid "Log Out"
msgstr "Log ud"
#: src/components/login/login.tsx:19
msgid "Login"
msgstr "Log ind"
#: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed"
msgstr "Loginforsøg mislykkedes"
#: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:85
msgid "Logs"
msgstr "Logs"
#: src/components/routes/settings/notifications.tsx:80
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
msgstr "Leder du i stedet for efter hvor du kan oprette alarmer? Klik på klokken <0/> ikoner i system tabellen."
#: src/components/routes/settings/layout.tsx:85
msgid "Manage display and notification preferences."
msgstr "Administrer display og notifikationsindstillinger."
#. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:628
msgid "Max 1 min"
msgstr "Maks. 1 min"
#: src/components/systems-table/systems-table.tsx:165
msgid "Memory"
msgstr "Hukommelse"
#: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295
msgid "Memory Usage"
msgstr "Hukommelsesforbrug"
#: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers"
msgstr "Hukommelsesforbrug af dockercontainere"
#: src/components/add-system.tsx:116
msgid "Name"
msgstr "Navn"
#: src/components/systems-table/systems-table.tsx:181
msgid "Net"
msgstr "Net"
#: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers"
msgstr "Netværkstrafik af dockercontainere"
#: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces"
msgstr "Netværkstrafik af offentlige grænseflader"
#: src/components/command-palette.tsx:49
msgid "No results found."
msgstr "Ingen resultater fundet."
#: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found."
msgstr "Ingen systemer fundet."
#: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74
msgid "Notifications"
msgstr "Notifikationer"
#: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support"
msgstr "OAuth 2 / OIDC understøttelse"
#: src/components/routes/settings/config-yaml.tsx:61
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "Ved hver genstart vil systemer i databasen blive opdateret til at matche de systemer, der er defineret i filen."
#: src/components/systems-table/systems-table.tsx:528
msgid "Open menu"
msgstr "Åbn menu"
#: src/components/login/auth-form.tsx:203
msgid "Or continue with"
msgstr "Eller fortsæt med"
#: src/components/alerts/alert-button.tsx:109
msgid "Overwrite existing alerts"
msgstr "Overskriv eksisterende alarmer"
#: src/components/command-palette.tsx:84
msgid "Page"
msgstr "Side"
#: src/components/command-palette.tsx:71
msgid "Pages / Settings"
msgstr "Sider / Indstillinger"
#: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:152
msgid "Password"
msgstr "Adgangskode"
#: src/components/login/auth-form.tsx:17
msgid "Password must be at least 8 characters."
msgstr "Adgangskoden skal være på mindst 8 tegn."
#: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received"
msgstr "Anmodning om nulstilling af adgangskode modtaget"
#: src/components/systems-table/systems-table.tsx:550
msgid "Pause"
msgstr "Pause"
#: src/components/routes/settings/notifications.tsx:95
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
msgstr "Konfigurer <0>en SMTP server</0> for at sikre at alarmer bliver leveret."
#: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details."
msgstr "Tjek logfiler for flere detaljer."
#: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again"
msgstr "Tjek dine legitimationsoplysninger og prøv igen"
#: src/components/login/login.tsx:36
msgid "Please create an admin account"
msgstr "Opret venligst en administratorkonto"
#: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site"
msgstr "Aktiver pop-ups for dette websted"
#: src/lib/utils.ts:39
msgid "Please log in again"
msgstr "Log venligst ind igen"
#: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions."
msgstr "Se <0>dokumentationen</0> for instruktioner."
#: src/components/login/login.tsx:40
msgid "Please sign in to your account"
msgstr "Log venligst ind på din konto"
#: src/components/add-system.tsx:124
msgid "Port"
msgstr "Port"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Præcis udnyttelse på det registrerede tidspunkt"
#: src/components/routes/settings/general.tsx:58
msgid "Preferred Language"
msgstr "Foretrukket sprog"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:128
msgid "Public Key"
msgstr "Offentlig nøgle"
#. Disk read
#: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:70
msgid "Read"
msgstr "Læs"
#. Network bytes received (download)
#: src/components/charts/area-chart.tsx:65
msgid "Received"
msgstr "Modtaget"
#: src/components/login/forgot-pass-form.tsx:76
msgid "Reset Password"
msgstr "Nulstil adgangskode"
#: src/components/systems-table/systems-table.tsx:545
msgid "Resume"
msgstr "Genoptag"
#: src/components/routes/settings/notifications.tsx:117
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
msgstr "Gem adresse ved hjælp af enter eller komma. Lad feltet stå tomt for at deaktivere e-mail-meddelelser."
#: src/components/routes/settings/general.tsx:106
#: src/components/routes/settings/notifications.tsx:167
msgid "Save Settings"
msgstr "Gem indstillinger"
#: src/components/navbar.tsx:133
msgid "Search"
msgstr "Søg"
#: src/components/command-palette.tsx:46
msgid "Search for systems or settings..."
msgstr "Søg efter systemer eller indstillinger..."
#: src/components/alerts/alert-button.tsx:71
msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Se <0>meddelelsesindstillinger</0> for at konfigurere, hvordan du modtager alarmer."
#. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:64
msgid "Sent"
msgstr "Sendt"
#: src/components/routes/settings/general.tsx:100
msgid "Sets the default time range for charts when a system is viewed."
msgstr "Sætter standardtidsintervallet for diagrammer når et system vises."
#: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82
msgid "Settings"
msgstr "Indstillinger"
#: src/components/routes/settings/layout.tsx:33
msgid "Settings saved"
msgstr "Indstillinger gemt"
#: src/components/login/auth-form.tsx:191
msgid "Sign in"
msgstr "Log ind"
#: src/components/command-palette.tsx:185
msgid "SMTP settings"
msgstr "SMTP-indstillinger"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Sorter efter"
#: src/lib/utils.ts:282
msgid "Status"
msgstr "Status"
#: src/components/routes/system.tsx:473
msgid "Swap space used by the system"
msgstr "Swap plads brugt af systemet"
#: src/components/routes/system.tsx:472
msgid "Swap Usage"
msgstr "Swap forbrug"
#. System theme
#: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System"
msgstr "System"
#: src/components/navbar.tsx:77
msgid "Systems"
msgstr "Systemer"
#: src/components/routes/settings/config-yaml.tsx:55
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Systemer kan være administreres i filen <0>config.yml</0> i din datamappe."
#: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabel"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314
msgid "Temperature"
msgstr "Temperatur"
#: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors"
msgstr "Temperaturer i systemsensorer"
#: src/components/routes/settings/notifications.tsx:211
msgid "Test <0>URL</0>"
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/notifications.tsx:182
msgid "Test notification sent"
msgstr "Test notifikation sendt"
#: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "Agenten skal køre på systemet for at forbinde. Kopier installationskommandoen for agenten nedenfor."
#: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "Agenten skal køre på systemet for at forbinde. Kopier <0>docker-compose.yml</0> for agenten nedenfor."
#: src/components/login/forgot-pass-form.tsx:98
msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Log derefter ind på backend og nulstil adgangskoden til din brugerkonto i tabellen brugere."
#: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Denne handling kan ikke fortrydes. Dette vil permanent slette alle aktuelle elementer for {name} fra databasen."
#: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}"
msgstr "Gennemløb af {extraFsName}"
#: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem"
msgstr "Gennemløb af rodfilsystemet"
#: src/components/routes/settings/notifications.tsx:106
msgid "To email(s)"
msgstr "Til email(s)"
#: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:372
msgid "Toggle grid"
msgstr "Slå gitter til/fra"
#: src/components/mode-toggle.tsx:33
msgid "Toggle theme"
msgstr "Skift tema"
#: src/lib/utils.ts:317
msgid "Triggers when any sensor exceeds a threshold"
msgstr "Udløser når en sensor overstiger en tærskel"
#: src/lib/utils.ts:310
msgid "Triggers when combined up/down exceeds a threshold"
msgstr "Udløses når de kombinerede op/ned overstiger en tærskel"
#: src/lib/utils.ts:292
msgid "Triggers when CPU usage exceeds a threshold"
msgstr "Udløser når CPU-forbrug overstiger en tærskel"
#: src/lib/utils.ts:298
msgid "Triggers when memory usage exceeds a threshold"
msgstr "Udløser når hukommelsesforbruget overstiger en tærskel"
#: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down"
msgstr "Udløser når status skifter mellem op og ned"
#: src/lib/utils.ts:304
msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Udløser når brugen af en disk overstiger en tærskel"
#: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information."
msgstr "Opdateret i realtid. Klik på et system for at se information."
#: src/components/routes/system.tsx:261
msgid "Uptime"
msgstr "Oppetid"
#: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage"
msgstr "Forbrug"
#: src/components/routes/system.tsx:424
msgid "Usage of root partition"
msgstr "Brug af rodpartition"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56
msgid "Used"
msgstr "Brugt"
#: src/components/command-palette.tsx:142
#: src/components/navbar.tsx:69
msgid "Users"
msgstr "Brugere"
#: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Vis"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Synlige felter"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display"
msgstr "Venter på nok posteringer til at vise"
#: src/components/routes/settings/general.tsx:48
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
msgstr "Vil du hjælpe os med at gøre vores oversættelser endnu bedre? Tjek <0>Crowdin</0> for flere detaljer."
#: src/components/routes/settings/notifications.tsx:124
msgid "Webhook / Push notifications"
msgstr "Webhook / Push notifikationer"
#. Disk write
#: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:69
msgid "Write"
msgstr "Skriv"
#: src/components/routes/settings/layout.tsx:61
msgid "YAML Config"
msgstr "YAML Konfiguration"
#: src/components/routes/settings/config-yaml.tsx:45
msgid "YAML Configuration"
msgstr "YAML Konfiguration"
#: src/components/routes/settings/layout.tsx:34
msgid "Your user settings have been updated."
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: 2024-11-02 02:13\n" "PO-Revision-Date: 2024-12-17 21: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"
@@ -18,11 +18,11 @@ msgstr ""
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n" "X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n" "X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# Tag} other {# Tage}}" msgstr "{0, plural, one {# Tag} other {# Tage}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# Stunde} other {# Stunden}}" msgstr "{hours, plural, one {# Stunde} other {# Stunden}}"
@@ -47,24 +47,27 @@ msgid "30 days"
msgstr "30 Tage" msgstr "30 Tage"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "Aktionen" msgstr "Aktionen"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "Aktive Warnungen" msgstr "Aktive Warnungen"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "<0>System</0> hinzufügen" msgstr "<0>System</0> hinzufügen"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "Neues System hinzufügen" msgstr "Neues System hinzufügen"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "System hinzufügen" msgstr "System hinzufügen"
@@ -76,16 +79,15 @@ msgstr "URL hinzufügen"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "Anzeigeoptionen für Diagramme anpassen." msgstr "Anzeigeoptionen für Diagramme anpassen."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "Admin" msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "Agent" msgstr "Agent"
@@ -95,50 +97,53 @@ msgid "Alerts"
msgstr "Warnungen" msgstr "Warnungen"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "Alle Systeme" msgstr "Alle Systeme"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Möchten Sie {name} wirklich löschen?" msgstr "Möchten Sie {name} wirklich löschen?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "Authentifizierungsanbieter"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "Automatisches Kopieren erfordert einen sicheren Kontext." msgstr "Automatisches Kopieren erfordert einen sicheren Kontext."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "Durchschnitt" msgstr "Durchschnitt"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "Durchschnittliche CPU-Auslastung der Container" msgstr "Durchschnittliche CPU-Auslastung der Container"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "Durchschnitt überschreitet <0>{value}{0}</0>" msgstr "Durchschnitt überschreitet <0>{value}{0}</0>"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Durchschnittlicher Stromverbrauch der GPUs"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "Durchschnittliche systemweite CPU-Auslastung" msgstr "Durchschnittliche systemweite CPU-Auslastung"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr "Durchschnittliche Auslastung von {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "Backups" msgstr "Backups"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "Bandbreite" msgstr "Bandbreite"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel unterstützt OpenID Connect und viele OAuth2-Authentifizierungsanbieter." msgstr "Beszel unterstützt OpenID Connect und viele OAuth2-Authentifizierungsanbieter."
@@ -146,7 +151,7 @@ msgstr "Beszel unterstützt OpenID Connect und viele OAuth2-Authentifizierungsan
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel verwendet <0>Shoutrrr</0>, um sich mit beliebten Benachrichtigungsdiensten zu integrieren." msgstr "Beszel verwendet <0>Shoutrrr</0>, um sich mit beliebten Benachrichtigungsdiensten zu integrieren."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "Binär" msgstr "Binär"
@@ -154,7 +159,7 @@ msgstr "Binär"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "Cache / Puffer" msgstr "Cache / Puffer"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
@@ -182,15 +187,10 @@ msgstr "Überprüfen Sie die Protokolle für weitere Details."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Überprüfen Sie Ihren Benachrichtigungsdienst" msgstr "Überprüfen Sie Ihren Benachrichtigungsdienst"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "Zum Kopieren klicken" msgstr "Zum Kopieren klicken"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "Spalten"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -200,12 +200,12 @@ msgstr "Befehlszeilenanweisungen"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "Konfigurieren Sie, wie Sie Warnbenachrichtigungen erhalten." msgstr "Konfigurieren Sie, wie Sie Warnbenachrichtigungen erhalten."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "Passwort bestätigen" msgstr "Passwort bestätigen"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "Fortfahren" msgstr "Fortfahren"
@@ -213,15 +213,15 @@ msgstr "Fortfahren"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "In die Zwischenablage kopiert" msgstr "In die Zwischenablage kopiert"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "Kopieren" msgstr "Kopieren"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "Host kopieren" msgstr "Host kopieren"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Linux-Befehl kopieren" msgstr "Linux-Befehl kopieren"
@@ -229,17 +229,17 @@ msgstr "Linux-Befehl kopieren"
msgid "Copy text" msgid "Copy text"
msgstr "Text kopieren" msgstr "Text kopieren"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "CPU-Auslastung" msgstr "CPU-Auslastung"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "Konto erstellen" msgstr "Konto erstellen"
@@ -248,8 +248,8 @@ msgstr "Konto erstellen"
msgid "Dark" msgid "Dark"
msgstr "Dunkel" msgstr "Dunkel"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "Dashboard" msgstr "Dashboard"
@@ -257,49 +257,45 @@ msgstr "Dashboard"
msgid "Default time period" msgid "Default time period"
msgstr "Standardzeitraum" msgstr "Standardzeitraum"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "Festplatte" msgstr "Festplatte"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Festplatten-I/O" msgstr "Festplatten-I/O"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "Festplattennutzung" msgstr "Festplattennutzung"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "Festplattennutzung von {extraFsName}" msgstr "Festplattennutzung von {extraFsName}"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker-CPU-Auslastung" msgstr "Docker-CPU-Auslastung"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker-Speichernutzung" msgstr "Docker-Speichernutzung"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker-Netzwerk-I/O" msgstr "Docker-Netzwerk-I/O"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentation" msgstr "Dokumentation"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "E-Mail"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "E-Mail" msgstr "E-Mail"
@@ -308,7 +304,7 @@ msgstr "E-Mail"
msgid "Email notifications" msgid "Email notifications"
msgstr "E-Mail-Benachrichtigungen" msgstr "E-Mail-Benachrichtigungen"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "E-Mail-Adresse eingeben, um das Passwort zurückzusetzen" msgstr "E-Mail-Adresse eingeben, um das Passwort zurückzusetzen"
@@ -316,13 +312,13 @@ msgstr "E-Mail-Adresse eingeben, um das Passwort zurückzusetzen"
msgid "Enter email address..." msgid "Enter email address..."
msgstr "E-Mail-Adresse eingeben..." msgstr "E-Mail-Adresse eingeben..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "Fehler" msgstr "Fehler"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Überschreitet {0}{1} in den letzten {2, plural, one {# Minute} other {# Minuten}}" msgstr "Überschreitet {0}{1} in den letzten {2, plural, one {# Minute} other {# Minuten}}"
@@ -351,20 +347,20 @@ msgstr "Einstellungen konnten nicht gespeichert werden"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "Testbenachrichtigung konnte nicht gesendet werden" msgstr "Testbenachrichtigung konnte nicht gesendet werden"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Warnung konnte nicht aktualisiert werden" msgstr "Warnung konnte nicht aktualisiert werden"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Für <0>{min}</0> {min, plural, one {Minute} other {Minuten}}" msgstr "Für <0>{min}</0> {min, plural, one {Minute} other {Minuten}}"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Passwort vergessen?" msgstr "Passwort vergessen?"
@@ -374,7 +370,15 @@ msgstr "Passwort vergessen?"
msgid "General" msgid "General"
msgstr "Allgemein" msgstr "Allgemein"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "GPU-Leistungsaufnahme"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Raster"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "Host / IP" msgstr "Host / IP"
@@ -387,7 +391,7 @@ msgid "Invalid email address."
msgstr "Ungültige E-Mail-Adresse." msgstr "Ungültige E-Mail-Adresse."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "Kernel" msgstr "Kernel"
@@ -395,26 +399,30 @@ msgstr "Kernel"
msgid "Language" msgid "Language"
msgstr "Sprache" msgstr "Sprache"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr ""
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "Hell" msgstr "Hell"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "Abmelden" msgstr "Abmelden"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "Anmelden" msgstr "Anmelden"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "Anmeldeversuch fehlgeschlagen" msgstr "Anmeldeversuch fehlgeschlagen"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "Protokolle" msgstr "Protokolle"
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "Anzeige- und Benachrichtigungseinstellungen verwalten." msgstr "Anzeige- und Benachrichtigungseinstellungen verwalten."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "Max 1 Min" msgstr "Max 1 Min"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "Speicher" msgstr "Speicher"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "Speichernutzung" msgstr "Speichernutzung"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "Speichernutzung der Docker-Container" msgstr "Speichernutzung der Docker-Container"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "Netz" msgstr "Netz"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "Netzwerkverkehr der Docker-Container" msgstr "Netzwerkverkehr der Docker-Container"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "Netzwerkverkehr der öffentlichen Schnittstellen" msgstr "Netzwerkverkehr der öffentlichen Schnittstellen"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "Keine Ergebnisse gefunden." msgstr "Keine Ergebnisse gefunden."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "Keine Systeme gefunden." msgstr "Keine Systeme gefunden."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "Benachrichtigungen" msgstr "Benachrichtigungen"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "OAuth 2 / OIDC-Unterstützung" msgstr "OAuth 2 / OIDC-Unterstützung"
@@ -482,11 +491,11 @@ msgstr "OAuth 2 / OIDC-Unterstützung"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "Bei jedem Neustart werden die Systeme in der Datenbank aktualisiert, um den im Datei definierten Systemen zu entsprechen." msgstr "Bei jedem Neustart werden die Systeme in der Datenbank aktualisiert, um den im Datei definierten Systemen zu entsprechen."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "Menü öffnen" msgstr "Menü öffnen"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "Oder fortfahren mit" msgstr "Oder fortfahren mit"
@@ -494,28 +503,28 @@ msgstr "Oder fortfahren mit"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "Bestehende Warnungen überschreiben" msgstr "Bestehende Warnungen überschreiben"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "Seite" msgstr "Seite"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "Seiten / Einstellungen" msgstr "Seiten / Einstellungen"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "Passwort" msgstr "Passwort"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "Das Passwort muss mindestens 10 Zeichen lang sein." msgstr "Das Passwort muss mindestens 8 Zeichen haben."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "Anfrage zum Zurücksetzen des Passworts erhalten" msgstr "Anfrage zum Zurücksetzen des Passworts erhalten"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "Pause" msgstr "Pause"
@@ -523,20 +532,20 @@ msgstr "Pause"
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."
msgstr "Bitte <0>konfigurieren Sie einen SMTP-Server</0>, um sicherzustellen, dass Warnungen zugestellt werden." msgstr "Bitte <0>konfigurieren Sie einen SMTP-Server</0>, um sicherzustellen, dass Warnungen zugestellt werden."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "Bitte überprüfen Sie die Protokolle für weitere Details." msgstr "Bitte überprüfen Sie die Protokolle für weitere Details."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut" msgstr "Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "Bitte erstellen Sie ein Administratorkonto" msgstr "Bitte erstellen Sie ein Administratorkonto"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "Bitte aktivieren Sie Pop-ups für diese Seite" msgstr "Bitte aktivieren Sie Pop-ups für diese Seite"
@@ -544,35 +553,40 @@ msgstr "Bitte aktivieren Sie Pop-ups für diese Seite"
msgid "Please log in again" msgid "Please log in again"
msgstr "Bitte melden Sie sich erneut an" msgstr "Bitte melden Sie sich erneut an"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "Bitte sehen Sie sich <0>die Dokumentation</0> für Anweisungen an." msgstr "Bitte sehen Sie sich <0>die Dokumentation</0> für Anweisungen an."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "Bitte melden Sie sich bei Ihrem Konto an" msgstr "Bitte melden Sie sich bei Ihrem Konto an"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "Port" msgstr "Port"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Genaue Nutzung zum aufgezeichneten Zeitpunkt"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "Bevorzugte Sprache" msgstr "Bevorzugte Sprache"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "Schlüssel" msgstr "Schlüssel"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "Lesen" msgstr "Lesen"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "Empfangen" msgstr "Empfangen"
@@ -580,7 +594,7 @@ msgstr "Empfangen"
msgid "Reset Password" msgid "Reset Password"
msgstr "Passwort zurücksetzen" msgstr "Passwort zurücksetzen"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "Fortsetzen" msgstr "Fortsetzen"
@@ -593,11 +607,11 @@ msgstr "Adresse mit der Eingabetaste oder Komma speichern. Leer lassen, um E-Mai
msgid "Save Settings" msgid "Save Settings"
msgstr "Einstellungen speichern" msgstr "Einstellungen speichern"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "Suche" msgstr "Suche"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "Nach Systemen oder Einstellungen suchen..." msgstr "Nach Systemen oder Einstellungen suchen..."
@@ -605,8 +619,8 @@ msgstr "Nach Systemen oder Einstellungen suchen..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Siehe <0>Benachrichtigungseinstellungen</0>, um zu konfigurieren, wie Sie Warnungen erhalten." msgstr "Siehe <0>Benachrichtigungseinstellungen</0>, um zu konfigurieren, wie Sie Warnungen erhalten."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "Gesendet" msgstr "Gesendet"
@@ -614,9 +628,9 @@ msgstr "Gesendet"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "Legt den Standardzeitraum für Diagramme fest, wenn ein System angezeigt wird." msgstr "Legt den Standardzeitraum für Diagramme fest, wenn ein System angezeigt wird."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -626,34 +640,40 @@ msgstr "Einstellungen"
msgid "Settings saved" msgid "Settings saved"
msgstr "Einstellungen gespeichert" msgstr "Einstellungen gespeichert"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "Anmelden" msgstr "Anmelden"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "SMTP-Einstellungen" msgstr "SMTP-Einstellungen"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Sortieren nach"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "Vom System genutzter Swap-Speicher" msgstr "Vom System genutzter Swap-Speicher"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "Swap-Nutzung" msgstr "Swap-Nutzung"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "Systeme" msgstr "Systeme"
@@ -661,12 +681,16 @@ msgstr "Systeme"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Systeme können in einer <0>config.yml</0>-Datei in Ihrem Datenverzeichnis verwaltet werden." msgstr "Systeme können in einer <0>config.yml</0>-Datei in Ihrem Datenverzeichnis verwaltet werden."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabelle"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "Temperatur" msgstr "Temperatur"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "Temperaturen der Systemsensoren" msgstr "Temperaturen der Systemsensoren"
@@ -678,11 +702,11 @@ msgstr "Test <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "Testbenachrichtigung gesendet" msgstr "Testbenachrichtigung gesendet"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. Kopieren Sie den Installationsbefehl für den Agenten unten." msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. Kopieren Sie den Installationsbefehl für den Agenten unten."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. Kopieren Sie die <0>docker-compose.yml</0> für den Agenten unten." msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. Kopieren Sie die <0>docker-compose.yml</0> für den Agenten unten."
@@ -690,15 +714,15 @@ msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. K
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Melden Sie sich dann im Backend an und setzen Sie Ihr Benutzerkontopasswort in der Benutzertabelle zurück." msgstr "Melden Sie sich dann im Backend an und setzen Sie Ihr Benutzerkontopasswort in der Benutzertabelle zurück."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch werden alle aktuellen Datensätze für {name} dauerhaft aus der Datenbank gelöscht." msgstr "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch werden alle aktuellen Datensätze für {name} dauerhaft aus der Datenbank gelöscht."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "Durchsatz von {extraFsName}" msgstr "Durchsatz von {extraFsName}"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "Durchsatz des Root-Dateisystems" msgstr "Durchsatz des Root-Dateisystems"
@@ -706,8 +730,8 @@ msgstr "Durchsatz des Root-Dateisystems"
msgid "To email(s)" msgid "To email(s)"
msgstr "An E-Mail(s)" msgstr "An E-Mail(s)"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "Raster umschalten" msgstr "Raster umschalten"
@@ -731,10 +755,6 @@ msgstr "Löst aus, wenn die CPU-Auslastung einen Schwellenwert überschreitet"
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "Löst aus, wenn die Speichernutzung einen Schwellenwert überschreitet" msgstr "Löst aus, wenn die Speichernutzung einen Schwellenwert überschreitet"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "Löst aus, wenn die Speichernutzung einen Schwellenwert überschreitet."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "Löst aus, wenn der Status zwischen oben und unten wechselt" msgstr "Löst aus, wenn der Status zwischen oben und unten wechselt"
@@ -743,41 +763,44 @@ msgstr "Löst aus, wenn der Status zwischen oben und unten wechselt"
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Löst aus, wenn die Nutzung einer Festplatte einen Schwellenwert überschreitet" msgstr "Löst aus, wenn die Nutzung einer Festplatte einen Schwellenwert überschreitet"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "In Echtzeit aktualisiert. Klicken Sie auf ein System, um Informationen anzuzeigen." msgstr "In Echtzeit aktualisiert. Klicken Sie auf ein System, um Informationen anzuzeigen."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "Betriebszeit" msgstr "Betriebszeit"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "Nutzung" msgstr "Nutzung"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "Nutzung der Root-Partition" msgstr "Nutzung der Root-Partition"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "Verwendet" msgstr "Verwendet"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "Benutzername"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "Benutzername"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "Benutzer" msgstr "Benutzer"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Ansicht"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Sichtbare Spalten"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Warten auf genügend Datensätze zur Anzeige" msgstr "Warten auf genügend Datensätze zur Anzeige"
@@ -789,9 +812,9 @@ msgstr "Möchten Sie uns helfen, unsere Übersetzungen noch besser zu machen? Sc
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Webhook / Push-Benachrichtigungen" msgstr "Webhook / Push-Benachrichtigungen"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "Schreiben" msgstr "Schreiben"

File diff suppressed because one or more lines are too long

View File

@@ -13,11 +13,11 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# day} other {# days}}" msgstr "{0, plural, one {# day} other {# days}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# hour} other {# hours}}" msgstr "{hours, plural, one {# hour} other {# hours}}"
@@ -42,24 +42,27 @@ msgid "30 days"
msgstr "30 days" msgstr "30 days"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "Actions" msgstr "Actions"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "Active Alerts" msgstr "Active Alerts"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "Add <0>System</0>" msgstr "Add <0>System</0>"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "Add New System" msgstr "Add New System"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "Add system" msgstr "Add system"
@@ -71,16 +74,15 @@ msgstr "Add URL"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "Adjust display options for charts." msgstr "Adjust display options for charts."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "Admin" msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "Agent" msgstr "Agent"
@@ -90,50 +92,53 @@ msgid "Alerts"
msgstr "Alerts" msgstr "Alerts"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "All Systems" msgstr "All Systems"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Are you sure you want to delete {name}?" msgstr "Are you sure you want to delete {name}?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "Auth Providers"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "Automatic copy requires a secure context." msgstr "Automatic copy requires a secure context."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "Average" msgstr "Average"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "Average CPU utilization of containers" msgstr "Average CPU utilization of containers"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "Average exceeds <0>{value}{0}</0>" msgstr "Average exceeds <0>{value}{0}</0>"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Average power consumption of GPUs"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "Average system-wide CPU utilization" msgstr "Average system-wide CPU utilization"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr "Average utilization of {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "Backups" msgstr "Backups"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "Bandwidth" msgstr "Bandwidth"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgstr "Beszel supports OpenID Connect and many OAuth2 authentication providers."
@@ -141,7 +146,7 @@ msgstr "Beszel supports OpenID Connect and many OAuth2 authentication providers.
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgstr "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "Binary" msgstr "Binary"
@@ -149,7 +154,7 @@ msgstr "Binary"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "Cache / Buffers" msgstr "Cache / Buffers"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "Cancel" msgstr "Cancel"
@@ -177,15 +182,10 @@ msgstr "Check logs for more details."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Check your notification service" msgstr "Check your notification service"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "Click to copy" msgstr "Click to copy"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "Columns"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -195,12 +195,12 @@ msgstr "Command line instructions"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "Configure how you receive alert notifications." msgstr "Configure how you receive alert notifications."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "Confirm password" msgstr "Confirm password"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "Continue" msgstr "Continue"
@@ -208,15 +208,15 @@ msgstr "Continue"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Copied to clipboard" msgstr "Copied to clipboard"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "Copy" msgstr "Copy"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "Copy host" msgstr "Copy host"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copy Linux command" msgstr "Copy Linux command"
@@ -224,17 +224,17 @@ msgstr "Copy Linux command"
msgid "Copy text" msgid "Copy text"
msgstr "Copy text" msgstr "Copy text"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "CPU Usage" msgstr "CPU Usage"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "Create account" msgstr "Create account"
@@ -243,8 +243,8 @@ msgstr "Create account"
msgid "Dark" msgid "Dark"
msgstr "Dark" msgstr "Dark"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "Dashboard" msgstr "Dashboard"
@@ -252,49 +252,45 @@ msgstr "Dashboard"
msgid "Default time period" msgid "Default time period"
msgstr "Default time period" msgstr "Default time period"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "Delete" msgstr "Delete"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "Disk" msgstr "Disk"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Disk I/O" msgstr "Disk I/O"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "Disk Usage" msgstr "Disk Usage"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "Disk usage of {extraFsName}" msgstr "Disk usage of {extraFsName}"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU Usage" msgstr "Docker CPU Usage"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Docker Memory Usage" msgstr "Docker Memory Usage"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Docker Network I/O" msgstr "Docker Network I/O"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "Documentation" msgstr "Documentation"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "email"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
@@ -303,7 +299,7 @@ msgstr "Email"
msgid "Email notifications" msgid "Email notifications"
msgstr "Email notifications" msgstr "Email notifications"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "Enter email address to reset password" msgstr "Enter email address to reset password"
@@ -311,13 +307,13 @@ msgstr "Enter email address to reset password"
msgid "Enter email address..." msgid "Enter email address..."
msgstr "Enter email address..." msgstr "Enter email address..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "Error" msgstr "Error"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgstr "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
@@ -346,20 +342,20 @@ msgstr "Failed to save settings"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "Failed to send test notification" msgstr "Failed to send test notification"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Failed to update alert" msgstr "Failed to update alert"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "Filter..." msgstr "Filter..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgstr "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Forgot password?" msgstr "Forgot password?"
@@ -369,7 +365,15 @@ msgstr "Forgot password?"
msgid "General" msgid "General"
msgstr "General" msgstr "General"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "GPU Power Draw"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Grid"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "Host / IP" msgstr "Host / IP"
@@ -382,7 +386,7 @@ msgid "Invalid email address."
msgstr "Invalid email address." msgstr "Invalid email address."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "Kernel" msgstr "Kernel"
@@ -390,26 +394,30 @@ msgstr "Kernel"
msgid "Language" msgid "Language"
msgstr "Language" msgstr "Language"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Layout"
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "Light" msgstr "Light"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "Log Out" msgstr "Log Out"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "Login" msgstr "Login"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "Login attempt failed" msgstr "Login attempt failed"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "Logs" msgstr "Logs"
@@ -422,54 +430,55 @@ msgid "Manage display and notification preferences."
msgstr "Manage display and notification preferences." msgstr "Manage display and notification preferences."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "Max 1 min" msgstr "Max 1 min"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "Memory" msgstr "Memory"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "Memory Usage" msgstr "Memory Usage"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "Memory usage of docker containers" msgstr "Memory usage of docker containers"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "Net" msgstr "Net"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "Network traffic of docker containers" msgstr "Network traffic of docker containers"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "Network traffic of public interfaces" msgstr "Network traffic of public interfaces"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "No results found." msgstr "No results found."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "No systems found." msgstr "No systems found."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "Notifications" msgstr "Notifications"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "OAuth 2 / OIDC support" msgstr "OAuth 2 / OIDC support"
@@ -477,11 +486,11 @@ msgstr "OAuth 2 / OIDC support"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "On each restart, systems in the database will be updated to match the systems defined in the file." msgstr "On each restart, systems in the database will be updated to match the systems defined in the file."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "Open menu" msgstr "Open menu"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "Or continue with" msgstr "Or continue with"
@@ -489,28 +498,28 @@ msgstr "Or continue with"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "Overwrite existing alerts" msgstr "Overwrite existing alerts"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "Page" msgstr "Page"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "Pages / Settings" msgstr "Pages / Settings"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "Password must be at least 10 characters." msgstr "Password must be at least 8 characters."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "Password reset request received" msgstr "Password reset request received"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "Pause" msgstr "Pause"
@@ -518,20 +527,20 @@ msgstr "Pause"
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."
msgstr "Please <0>configure an SMTP server</0> to ensure alerts are delivered." msgstr "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "Please check logs for more details." msgstr "Please check logs for more details."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "Please check your credentials and try again" msgstr "Please check your credentials and try again"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "Please create an admin account" msgstr "Please create an admin account"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "Please enable pop-ups for this site" msgstr "Please enable pop-ups for this site"
@@ -539,35 +548,40 @@ msgstr "Please enable pop-ups for this site"
msgid "Please log in again" msgid "Please log in again"
msgstr "Please log in again" msgstr "Please log in again"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "Please see <0>the documentation</0> for instructions." msgstr "Please see <0>the documentation</0> for instructions."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "Please sign in to your account" msgstr "Please sign in to your account"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "Port" msgstr "Port"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Precise utilization at the recorded time"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "Preferred Language" msgstr "Preferred Language"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "Public Key" msgstr "Public Key"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "Read" msgstr "Read"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "Received" msgstr "Received"
@@ -575,7 +589,7 @@ msgstr "Received"
msgid "Reset Password" msgid "Reset Password"
msgstr "Reset Password" msgstr "Reset Password"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "Resume" msgstr "Resume"
@@ -588,11 +602,11 @@ msgstr "Save address using enter key or comma. Leave blank to disable email noti
msgid "Save Settings" msgid "Save Settings"
msgstr "Save Settings" msgstr "Save Settings"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "Search" msgstr "Search"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "Search for systems or settings..." msgstr "Search for systems or settings..."
@@ -600,8 +614,8 @@ msgstr "Search for systems or settings..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "See <0>notification settings</0> to configure how you receive alerts." msgstr "See <0>notification settings</0> to configure how you receive alerts."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "Sent" msgstr "Sent"
@@ -609,9 +623,9 @@ msgstr "Sent"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "Sets the default time range for charts when a system is viewed." msgstr "Sets the default time range for charts when a system is viewed."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -621,34 +635,40 @@ msgstr "Settings"
msgid "Settings saved" msgid "Settings saved"
msgstr "Settings saved" msgstr "Settings saved"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "Sign in" msgstr "Sign in"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "SMTP settings" msgstr "SMTP settings"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Sort By"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "Swap space used by the system" msgstr "Swap space used by the system"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "Swap Usage" msgstr "Swap Usage"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "Systems" msgstr "Systems"
@@ -656,12 +676,16 @@ msgstr "Systems"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgstr "Systems may be managed in a <0>config.yml</0> file inside your data directory."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Table"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "Temperature" msgstr "Temperature"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "Temperatures of system sensors" msgstr "Temperatures of system sensors"
@@ -673,11 +697,11 @@ msgstr "Test <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "Test notification sent" msgstr "Test notification sent"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "The agent must be running on the system to connect. Copy the installation command for the agent below." msgstr "The agent must be running on the system to connect. Copy the installation command for the agent below."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgstr "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
@@ -685,15 +709,15 @@ msgstr "The agent must be running on the system to connect. Copy the<0>docker-co
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Then log into the backend and reset your user account password in the users table." msgstr "Then log into the backend and reset your user account password in the users table."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgstr "This action cannot be undone. This will permanently delete all current records for {name} from the database."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "Throughput of {extraFsName}" msgstr "Throughput of {extraFsName}"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "Throughput of root filesystem" msgstr "Throughput of root filesystem"
@@ -701,8 +725,8 @@ msgstr "Throughput of root filesystem"
msgid "To email(s)" msgid "To email(s)"
msgstr "To email(s)" msgstr "To email(s)"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "Toggle grid" msgstr "Toggle grid"
@@ -726,10 +750,6 @@ msgstr "Triggers when CPU usage exceeds a threshold"
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "Triggers when memory usage exceeds a threshold" msgstr "Triggers when memory usage exceeds a threshold"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "Triggers when memory usage exceeds a threshold."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "Triggers when status switches between up and down" msgstr "Triggers when status switches between up and down"
@@ -738,41 +758,44 @@ msgstr "Triggers when status switches between up and down"
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Triggers when usage of any disk exceeds a threshold" msgstr "Triggers when usage of any disk exceeds a threshold"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "Updated in real time. Click on a system to view information." msgstr "Updated in real time. Click on a system to view information."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "Uptime" msgstr "Uptime"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "Usage" msgstr "Usage"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "Usage of root partition" msgstr "Usage of root partition"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "Used" msgstr "Used"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "username"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "Username"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "Users" msgstr "Users"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "View"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Visible Fields"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Waiting for enough records to display" msgstr "Waiting for enough records to display"
@@ -784,9 +807,9 @@ msgstr "Want to help us make our translations even better? Check out <0>Crowdin<
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Webhook / Push notifications" msgstr "Webhook / Push notifications"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "Write" msgstr "Write"

File diff suppressed because one or more lines are too long

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: 2024-11-02 02:13\n" "PO-Revision-Date: 2025-01-02 04:46\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"
@@ -18,11 +18,11 @@ msgstr ""
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n" "X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n" "X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# día} other {# días}}" msgstr "{0, plural, one {# día} other {# días}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# hora} other {# horas}}" msgstr "{hours, plural, one {# hora} other {# horas}}"
@@ -47,24 +47,27 @@ msgid "30 days"
msgstr "30 días" msgstr "30 días"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "Acciones" msgstr "Acciones"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "Alertas Activas" msgstr "Alertas Activas"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "Agregar <0>Sistema</0>" msgstr "Agregar <0>Sistema</0>"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "Agregar Nuevo Sistema" msgstr "Agregar Nuevo Sistema"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "Agregar sistema" msgstr "Agregar sistema"
@@ -76,16 +79,15 @@ msgstr "Agregar URL"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "Ajustar las opciones de visualización para los gráficos." msgstr "Ajustar las opciones de visualización para los gráficos."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "Administrador" msgstr "Administrador"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "Agente" msgstr "Agente"
@@ -95,50 +97,53 @@ msgid "Alerts"
msgstr "Alertas" msgstr "Alertas"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "Todos los Sistemas" msgstr "Todos los Sistemas"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "¿Está seguro de que desea eliminar {name}?" msgstr "¿Está seguro de que desea eliminar {name}?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "Proveedores de Autenticación"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "La copia automática requiere un contexto seguro." msgstr "La copia automática requiere un contexto seguro."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "Promedio" msgstr "Promedio"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "Utilización promedio de CPU de los contenedores" msgstr "Utilización promedio de CPU de los contenedores"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "El promedio excede <0>{value}{0}</0>" msgstr "El promedio excede <0>{value}{0}</0>"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Consumo de energía promedio de GPUs"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "Utilización promedio de CPU del sistema" msgstr "Utilización promedio de CPU del sistema"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr "Uso promedio de {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "Copias de Seguridad" msgstr "Copias de Seguridad"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "Ancho de banda" msgstr "Ancho de banda"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel admite OpenID Connect y muchos proveedores de autenticación OAuth2." msgstr "Beszel admite OpenID Connect y muchos proveedores de autenticación OAuth2."
@@ -146,7 +151,7 @@ msgstr "Beszel admite OpenID Connect y muchos proveedores de autenticación OAut
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel utiliza <0>Shoutrrr</0> para integrarse con servicios populares de notificación." msgstr "Beszel utiliza <0>Shoutrrr</0> para integrarse con servicios populares de notificación."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "Binario" msgstr "Binario"
@@ -154,7 +159,7 @@ msgstr "Binario"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "Caché / Buffers" msgstr "Caché / Buffers"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@@ -182,15 +187,10 @@ msgstr "Revise los registros para más detalles."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Verifique su servicio de notificaciones" msgstr "Verifique su servicio de notificaciones"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "Haga clic para copiar" msgstr "Haga clic para copiar"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "Columnas"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -200,12 +200,12 @@ msgstr "Instrucciones de línea de comandos"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "Configure cómo recibe las notificaciones de alertas." msgstr "Configure cómo recibe las notificaciones de alertas."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "Confirmar contraseña" msgstr "Confirmar contraseña"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "Continuar" msgstr "Continuar"
@@ -213,15 +213,15 @@ msgstr "Continuar"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Copiado al portapapeles" msgstr "Copiado al portapapeles"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "Copiar" msgstr "Copiar"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "Copiar host" msgstr "Copiar host"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copiar comando de Linux" msgstr "Copiar comando de Linux"
@@ -229,17 +229,17 @@ msgstr "Copiar comando de Linux"
msgid "Copy text" msgid "Copy text"
msgstr "Copiar texto" msgstr "Copiar texto"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "Uso de CPU" msgstr "Uso de CPU"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "Crear cuenta" msgstr "Crear cuenta"
@@ -248,8 +248,8 @@ msgstr "Crear cuenta"
msgid "Dark" msgid "Dark"
msgstr "Oscuro" msgstr "Oscuro"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "Tablero" msgstr "Tablero"
@@ -257,49 +257,45 @@ msgstr "Tablero"
msgid "Default time period" msgid "Default time period"
msgstr "Período de tiempo predeterminado" msgstr "Período de tiempo predeterminado"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "Eliminar" msgstr "Eliminar"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "Disco" msgstr "Disco"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "E/S de Disco" msgstr "E/S de Disco"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "Uso de Disco" msgstr "Uso de Disco"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "Uso de disco de {extraFsName}" msgstr "Uso de disco de {extraFsName}"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Uso de CPU de Docker" msgstr "Uso de CPU de Docker"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Uso de Memoria de Docker" msgstr "Uso de Memoria de Docker"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "E/S de Red de Docker" msgstr "E/S de Red de Docker"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "Documentación" msgstr "Documentación"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "correo electrónico"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "Correo electrónico" msgstr "Correo electrónico"
@@ -308,7 +304,7 @@ msgstr "Correo electrónico"
msgid "Email notifications" msgid "Email notifications"
msgstr "Notificaciones por correo" msgstr "Notificaciones por correo"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "Ingrese la dirección de correo electrónico para restablecer la contraseña" msgstr "Ingrese la dirección de correo electrónico para restablecer la contraseña"
@@ -316,13 +312,13 @@ msgstr "Ingrese la dirección de correo electrónico para restablecer la contras
msgid "Enter email address..." msgid "Enter email address..."
msgstr "Ingrese dirección de correo..." msgstr "Ingrese dirección de correo..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "Error" msgstr "Error"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Excede {0}{1} en el último {2, plural, one {# minuto} other {# minutos}}" msgstr "Excede {0}{1} en el último {2, plural, one {# minuto} other {# minutos}}"
@@ -351,20 +347,20 @@ msgstr "Error al guardar la configuración"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "Error al enviar la notificación de prueba" msgstr "Error al enviar la notificación de prueba"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Error al actualizar la alerta" msgstr "Error al actualizar la alerta"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "Filtrar..." msgstr "Filtrar..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Por <0>{min}</0> {min, plural, one {minuto} other {minutos}}" msgstr "Por <0>{min}</0> {min, plural, one {minuto} other {minutos}}"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "¿Olvidó su contraseña?" msgstr "¿Olvidó su contraseña?"
@@ -374,7 +370,15 @@ msgstr "¿Olvidó su contraseña?"
msgid "General" msgid "General"
msgstr "General" msgstr "General"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr ""
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Cuadrícula"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "Host / IP" msgstr "Host / IP"
@@ -387,7 +391,7 @@ msgid "Invalid email address."
msgstr "Dirección de correo electrónico no válida." msgstr "Dirección de correo electrónico no válida."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "Kernel" msgstr "Kernel"
@@ -395,26 +399,30 @@ msgstr "Kernel"
msgid "Language" msgid "Language"
msgstr "Idioma" msgstr "Idioma"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Diseño"
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "Claro" msgstr "Claro"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "Cerrar Sesión" msgstr "Cerrar Sesión"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "Iniciar sesión" msgstr "Iniciar sesión"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "Intento de inicio de sesión fallido" msgstr "Intento de inicio de sesión fallido"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "Registros" msgstr "Registros"
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "Administrar preferencias de visualización y notificaciones." msgstr "Administrar preferencias de visualización y notificaciones."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "Máx 1 min" msgstr "Máx 1 min"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "Memoria" msgstr "Memoria"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "Uso de Memoria" msgstr "Uso de Memoria"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "Uso de memoria de los contenedores de Docker" msgstr "Uso de memoria de los contenedores de Docker"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "Nombre" msgstr "Nombre"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "Red" msgstr "Red"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "Tráfico de red de los contenedores de Docker" msgstr "Tráfico de red de los contenedores de Docker"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "Tráfico de red de interfaces públicas" msgstr "Tráfico de red de interfaces públicas"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "No se encontraron resultados." msgstr "No se encontraron resultados."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "No se encontraron sistemas." msgstr "No se encontraron sistemas."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "Notificaciones" msgstr "Notificaciones"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "Soporte para OAuth 2 / OIDC" msgstr "Soporte para OAuth 2 / OIDC"
@@ -482,11 +491,11 @@ msgstr "Soporte para OAuth 2 / OIDC"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "En cada reinicio, los sistemas en la base de datos se actualizarán para coincidir con los sistemas definidos en el archivo." msgstr "En cada reinicio, los sistemas en la base de datos se actualizarán para coincidir con los sistemas definidos en el archivo."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "Abrir menú" msgstr "Abrir menú"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "O continuar con" msgstr "O continuar con"
@@ -494,28 +503,28 @@ msgstr "O continuar con"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "Sobrescribir alertas existentes" msgstr "Sobrescribir alertas existentes"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "Página" msgstr "Página"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "Páginas / Configuraciones" msgstr "Páginas / Configuraciones"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "Contraseña" msgstr "Contraseña"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "La contraseña debe tener al menos 10 caracteres." msgstr "La contraseña debe tener al menos 8 caracteres."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "Solicitud de restablecimiento de contraseña recibida" msgstr "Solicitud de restablecimiento de contraseña recibida"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "Pausar" msgstr "Pausar"
@@ -523,20 +532,20 @@ msgstr "Pausar"
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."
msgstr "Por favor, <0>configure un servidor SMTP</0> para asegurar que las alertas sean entregadas." msgstr "Por favor, <0>configure un servidor SMTP</0> para asegurar que las alertas sean entregadas."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "Por favor, revise los registros para más detalles." msgstr "Por favor, revise los registros para más detalles."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "Por favor, verifique sus credenciales e intente de nuevo" msgstr "Por favor, verifique sus credenciales e intente de nuevo"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "Por favor, cree una cuenta de administrador" msgstr "Por favor, cree una cuenta de administrador"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "Por favor, habilite las ventanas emergentes para este sitio" msgstr "Por favor, habilite las ventanas emergentes para este sitio"
@@ -544,35 +553,40 @@ msgstr "Por favor, habilite las ventanas emergentes para este sitio"
msgid "Please log in again" msgid "Please log in again"
msgstr "Por favor, inicie sesión de nuevo" msgstr "Por favor, inicie sesión de nuevo"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "Por favor, consulte <0>la documentación</0> para obtener instrucciones." msgstr "Por favor, consulte <0>la documentación</0> para obtener instrucciones."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "Por favor, inicie sesión en su cuenta" msgstr "Por favor, inicie sesión en su cuenta"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "Puerto" msgstr "Puerto"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Utilización precisa en el momento registrado"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "Idioma Preferido" msgstr "Idioma Preferido"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "Clave Pública" msgstr "Clave Pública"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "Lectura" msgstr "Lectura"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "Recibido" msgstr "Recibido"
@@ -580,7 +594,7 @@ msgstr "Recibido"
msgid "Reset Password" msgid "Reset Password"
msgstr "Restablecer Contraseña" msgstr "Restablecer Contraseña"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "Reanudar" msgstr "Reanudar"
@@ -593,11 +607,11 @@ msgstr "Guarde la dirección usando la tecla enter o coma. Deje en blanco para d
msgid "Save Settings" msgid "Save Settings"
msgstr "Guardar Configuración" msgstr "Guardar Configuración"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "Buscar sistemas o configuraciones..." msgstr "Buscar sistemas o configuraciones..."
@@ -605,8 +619,8 @@ msgstr "Buscar sistemas o configuraciones..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Consulte <0>configuración de notificaciones</0> para configurar cómo recibe alertas." msgstr "Consulte <0>configuración de notificaciones</0> para configurar cómo recibe alertas."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "Enviado" msgstr "Enviado"
@@ -614,9 +628,9 @@ msgstr "Enviado"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "Establece el rango de tiempo predeterminado para los gráficos cuando se visualiza un sistema." msgstr "Establece el rango de tiempo predeterminado para los gráficos cuando se visualiza un sistema."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -626,34 +640,40 @@ msgstr "Configuración"
msgid "Settings saved" msgid "Settings saved"
msgstr "Configuración guardada" msgstr "Configuración guardada"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "Iniciar sesión" msgstr "Iniciar sesión"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "Configuración SMTP" msgstr "Configuración SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Ordenar por"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "Estado" msgstr "Estado"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "Espacio de swap utilizado por el sistema" msgstr "Espacio de swap utilizado por el sistema"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "Uso de Swap" msgstr "Uso de Swap"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "Sistemas" msgstr "Sistemas"
@@ -661,12 +681,16 @@ msgstr "Sistemas"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Los sistemas pueden ser gestionados en un archivo <0>config.yml</0> dentro de su directorio de datos." msgstr "Los sistemas pueden ser gestionados en un archivo <0>config.yml</0> dentro de su directorio de datos."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabla"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "Temperatura" msgstr "Temperatura"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "Temperaturas de los sensores del sistema" msgstr "Temperaturas de los sensores del sistema"
@@ -678,11 +702,11 @@ msgstr "Probar <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "Notificación de prueba enviada" msgstr "Notificación de prueba enviada"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie el comando de instalación para el agente a continuación." msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie el comando de instalación para el agente a continuación."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie el <0>docker-compose.yml</0> para el agente a continuación." msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie el <0>docker-compose.yml</0> para el agente a continuación."
@@ -690,15 +714,15 @@ msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Luego inicie sesión en el backend y restablezca la contraseña de su cuenta de usuario en la tabla de usuarios." msgstr "Luego inicie sesión en el backend y restablezca la contraseña de su cuenta de usuario en la tabla de usuarios."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Esta acción no se puede deshacer. Esto eliminará permanentemente todos los registros actuales de {name} de la base de datos." msgstr "Esta acción no se puede deshacer. Esto eliminará permanentemente todos los registros actuales de {name} de la base de datos."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "Rendimiento de {extraFsName}" msgstr "Rendimiento de {extraFsName}"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "Rendimiento del sistema de archivos raíz" msgstr "Rendimiento del sistema de archivos raíz"
@@ -706,8 +730,8 @@ msgstr "Rendimiento del sistema de archivos raíz"
msgid "To email(s)" msgid "To email(s)"
msgstr "A correo(s)" msgstr "A correo(s)"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "Alternar cuadrícula" msgstr "Alternar cuadrícula"
@@ -731,10 +755,6 @@ msgstr "Se activa cuando el uso de CPU supera un umbral"
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "Se activa cuando el uso de memoria supera un umbral" msgstr "Se activa cuando el uso de memoria supera un umbral"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "Se activa cuando el uso de memoria supera un umbral."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "Se activa cuando el estado cambia entre activo e inactivo" msgstr "Se activa cuando el estado cambia entre activo e inactivo"
@@ -743,41 +763,44 @@ msgstr "Se activa cuando el estado cambia entre activo e inactivo"
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Se activa cuando el uso de cualquier disco supera un umbral" msgstr "Se activa cuando el uso de cualquier disco supera un umbral"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "Actualizado en tiempo real. Haga clic en un sistema para ver la información." msgstr "Actualizado en tiempo real. Haga clic en un sistema para ver la información."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "Tiempo de actividad" msgstr "Tiempo de actividad"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "Uso" msgstr "Uso"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "Uso de la partición raíz" msgstr "Uso de la partición raíz"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "Usado" msgstr "Usado"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "nombre de usuario"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "Nombre de usuario"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "Usuarios" msgstr "Usuarios"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Vista"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Columnas visibles"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Esperando suficientes registros para mostrar" msgstr "Esperando suficientes registros para mostrar"
@@ -789,9 +812,9 @@ msgstr "¿Quieres ayudarnos a mejorar nuestras traducciones? Consulta <0>Crowdin
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Notificaciones Webhook / Push" msgstr "Notificaciones Webhook / Push"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "Escritura" msgstr "Escritura"

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,831 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: fa\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-17 21:36\n"
"Last-Translator: \n"
"Language-Team: Persian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: beszel\n"
"X-Crowdin-Project-ID: 733311\n"
"X-Crowdin-Language: fa\n"
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# روز} other {# روز}}"
#: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# ساعت} other {# ساعت}}"
#: src/lib/utils.ts:139
msgid "1 hour"
msgstr "۱ ساعت"
#: src/lib/utils.ts:162
msgid "1 week"
msgstr "۱ هفته"
#: src/lib/utils.ts:147
msgid "12 hours"
msgstr "۱۲ ساعت"
#: src/lib/utils.ts:155
msgid "24 hours"
msgstr "۲۴ ساعت"
#: src/lib/utils.ts:170
msgid "30 days"
msgstr "۳۰ روز"
#. Table column
#: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions"
msgstr "عملیات"
#: src/components/routes/home.tsx:61
msgid "Active Alerts"
msgstr " هشدارهای فعال"
#: src/components/add-system.tsx:78
msgid "Add <0>System</0>"
msgstr "افزودن <0>سیستم</0>"
#: src/components/add-system.tsx:87
msgid "Add New System"
msgstr "افزودن سیستم جدید"
#: src/components/add-system.tsx:165
#: src/components/add-system.tsx:176
msgid "Add system"
msgstr "افزودن سیستم"
#: src/components/routes/settings/notifications.tsx:156
msgid "Add URL"
msgstr "افزودن آدرس اینترنتی"
#: src/components/routes/settings/general.tsx:81
msgid "Adjust display options for charts."
msgstr "تنظیم گزینه‌های نمایش برای نمودارها."
#: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:188
msgid "Admin"
msgstr "مدیر"
#: src/components/systems-table/systems-table.tsx:201
msgid "Agent"
msgstr "عامل"
#: src/components/alerts/alert-button.tsx:32
#: src/components/alerts/alert-button.tsx:68
msgid "Alerts"
msgstr "هشدارها"
#: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:266
msgid "All Systems"
msgstr "همه سیستم‌ها"
#: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?"
msgstr "آیا مطمئن هستید که می‌خواهید {name} را حذف کنید؟"
#: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context."
msgstr "کپی خودکار نیاز به یک زمینه امن دارد."
#: src/components/routes/system.tsx:625
msgid "Average"
msgstr "میانگین"
#: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers"
msgstr "میانگین استفاده از CPU کانتینرها"
#: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>"
msgstr ""
#: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "میانگین مصرف برق پردازنده‌های گرافیکی"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization"
msgstr "میانگین استفاده از CPU در کل سیستم"
#: src/components/routes/system.tsx:515
msgid "Average utilization of {0}"
msgstr "میانگین استفاده از {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups"
msgstr "پشتیبان‌گیری‌ها"
#: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307
msgid "Bandwidth"
msgstr "پهنای باند"
#: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "بِزل از OpenID Connect و بسیاری از ارائه‌دهندگان احراز هویت OAuth2 پشتیبانی می‌کند."
#: src/components/routes/settings/notifications.tsx:127
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "بِزل از <0>Shoutrrr</0> برای ادغام با سرویس‌های اطلاع‌رسانی محبوب استفاده می‌کند."
#: src/components/add-system.tsx:92
msgid "Binary"
msgstr "دودویی"
#: src/components/charts/mem-chart.tsx:89
msgid "Cache / Buffers"
msgstr "حافظه پنهان / بافرها"
#: src/components/systems-table/systems-table.tsx:581
msgid "Cancel"
msgstr "لغو"
#: src/components/routes/settings/config-yaml.tsx:68
msgid "Caution - potential data loss"
msgstr "احتیاط - احتمال از دست رفتن داده‌ها"
#: src/components/routes/settings/general.tsx:36
msgid "Change general application options."
msgstr "تغییر گزینه‌های کلی برنامه."
#: src/components/routes/settings/general.tsx:78
msgid "Chart options"
msgstr "گزینه‌های نمودار"
#: src/components/login/forgot-pass-form.tsx:34
msgid "Check {email} for a reset link."
msgstr "ایمیل {email} خود را برای لینک بازنشانی بررسی کنید."
#: src/components/routes/settings/layout.tsx:40
msgid "Check logs for more details."
msgstr "برای جزئیات بیشتر، لاگ‌ها را بررسی کنید."
#: src/components/routes/settings/notifications.tsx:183
msgid "Check your notification service"
msgstr "سرویس اطلاع‌رسانی خود را بررسی کنید"
#: src/components/add-system.tsx:151
msgid "Click to copy"
msgstr "برای کپی کردن کلیک کنید"
#: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions"
msgstr "دستورالعمل‌های خط فرمان"
#: src/components/routes/settings/notifications.tsx:77
msgid "Configure how you receive alert notifications."
msgstr "نحوه دریافت هشدارهای اطلاع‌رسانی را پیکربندی کنید."
#: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:170
msgid "Confirm password"
msgstr "تأیید رمز عبور"
#: src/components/systems-table/systems-table.tsx:587
msgid "Continue"
msgstr "ادامه"
#: src/lib/utils.ts:25
msgid "Copied to clipboard"
msgstr "در کلیپ‌بورد کپی شد"
#: src/components/add-system.tsx:162
msgid "Copy"
msgstr "کپی"
#: src/components/systems-table/systems-table.tsx:556
msgid "Copy host"
msgstr "کپی میزبان"
#: src/components/add-system.tsx:173
msgid "Copy Linux command"
msgstr "کپی دستور لینوکس"
#: src/components/copy-to-clipboard.tsx:13
msgid "Copy text"
msgstr "کپی متن"
#: src/components/systems-table/systems-table.tsx:157
msgid "CPU"
msgstr "پردازنده"
#: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289
msgid "CPU Usage"
msgstr "میزان استفاده از پردازنده"
#: src/components/login/auth-form.tsx:191
msgid "Create account"
msgstr "ایجاد حساب کاربری"
#. Dark theme
#: src/components/mode-toggle.tsx:21
msgid "Dark"
msgstr "تیره"
#: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:34
msgid "Dashboard"
msgstr "داشبورد"
#: src/components/routes/settings/general.tsx:85
msgid "Default time period"
msgstr "بازه زمانی پیش‌فرض"
#: src/components/systems-table/systems-table.tsx:562
msgid "Delete"
msgstr "حذف"
#: src/components/systems-table/systems-table.tsx:173
msgid "Disk"
msgstr "دیسک"
#: src/components/routes/system.tsx:431
msgid "Disk I/O"
msgstr "ورودی/خروجی دیسک"
#: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301
msgid "Disk Usage"
msgstr "میزان استفاده از دیسک"
#: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}"
msgstr "میزان استفاده از دیسک {extraFsName}"
#: src/components/routes/system.tsx:395
msgid "Docker CPU Usage"
msgstr "میزان استفاده از CPU داکر"
#: src/components/routes/system.tsx:416
msgid "Docker Memory Usage"
msgstr "میزان استفاده از حافظه داکر"
#: src/components/routes/system.tsx:457
msgid "Docker Network I/O"
msgstr "ورودی/خروجی شبکه داکر"
#: src/components/command-palette.tsx:124
msgid "Documentation"
msgstr "مستندات"
#: src/components/login/auth-form.tsx:128
#: src/components/login/forgot-pass-form.tsx:53
msgid "Email"
msgstr "ایمیل"
#: src/components/routes/settings/notifications.tsx:91
msgid "Email notifications"
msgstr "اعلان‌های ایمیلی"
#: src/components/login/login.tsx:38
msgid "Enter email address to reset password"
msgstr "آدرس ایمیل را برای بازنشانی رمز عبور وارد کنید"
#: src/components/routes/settings/notifications.tsx:111
msgid "Enter email address..."
msgstr "آدرس ایمیل را وارد کنید..."
#: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187
msgid "Error"
msgstr "خطا"
#: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "در {2, plural, one {# دقیقه} other {# دقیقه}} گذشته از {0}{1} بیشتر است"
#: src/components/routes/settings/config-yaml.tsx:72
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
msgstr "سیستم‌های موجود که در <0>config.yml</0> تعریف نشده‌اند حذف خواهند شد. لطفاً به طور منظم پشتیبان‌گیری کنید."
#: src/components/routes/settings/config-yaml.tsx:93
msgid "Export configuration"
msgstr "خارج کردن پیکربندی"
#: src/components/routes/settings/config-yaml.tsx:48
msgid "Export your current systems configuration."
msgstr "پیکربندی سیستم‌های فعلی خود را خارج کنید."
#: src/lib/utils.ts:38
msgid "Failed to authenticate"
msgstr "احراز هویت ناموفق بود"
#: src/components/routes/settings/layout.tsx:39
#: src/components/routes/settings/notifications.tsx:62
msgid "Failed to save settings"
msgstr "ذخیره تنظیمات ناموفق بود"
#: src/components/routes/settings/notifications.tsx:188
msgid "Failed to send test notification"
msgstr "ارسال اعلان آزمایشی ناموفق بود"
#: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert"
msgstr "به‌روزرسانی هشدار ناموفق بود"
#: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:273
msgid "Filter..."
msgstr "فیلتر..."
#: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "برای <0>{min}</0> {min, plural, one {دقیقه} other {دقیقه}}"
#: src/components/login/auth-form.tsx:313
msgid "Forgot password?"
msgstr "رمز عبور را فراموش کرده‌اید؟"
#. Context: General settings
#: src/components/routes/settings/general.tsx:33
#: src/components/routes/settings/layout.tsx:51
msgid "General"
msgstr "عمومی"
#: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "مصرف برق پردازنده گرافیکی"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "جدول"
#: src/components/add-system.tsx:120
msgid "Host / IP"
msgstr "میزبان / IP"
#: src/components/login/forgot-pass-form.tsx:93
msgid "If you've lost the password to your admin account, you may reset it using the following command."
msgstr "اگر رمز عبور حساب مدیر خود را گم کرده‌اید، می‌توانید آن را با استفاده از دستور زیر بازنشانی کنید."
#: src/components/login/auth-form.tsx:16
msgid "Invalid email address."
msgstr "آدرس ایمیل نامعتبر است."
#. Linux kernel
#: src/components/routes/system.tsx:262
msgid "Kernel"
msgstr "هسته"
#: src/components/routes/settings/general.tsx:45
msgid "Language"
msgstr "زبان"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "طرح‌بندی"
#. Light theme
#: src/components/mode-toggle.tsx:16
msgid "Light"
msgstr "روشن"
#: src/components/navbar.tsx:104
msgid "Log Out"
msgstr "خروج"
#: src/components/login/login.tsx:19
msgid "Login"
msgstr "ورود"
#: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed"
msgstr "تلاش برای ورود ناموفق بود"
#: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:85
msgid "Logs"
msgstr "لاگ‌ها"
#: src/components/routes/settings/notifications.tsx:80
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
msgstr "به دنبال جایی برای ایجاد هشدار هستید؟ روی آیکون‌های زنگ <0/> در جدول سیستم‌ها کلیک کنید."
#: src/components/routes/settings/layout.tsx:85
msgid "Manage display and notification preferences."
msgstr "مدیریت تنظیمات نمایش و اعلان‌ها."
#. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:628
msgid "Max 1 min"
msgstr "حداکثر ۱ دقیقه"
#: src/components/systems-table/systems-table.tsx:165
msgid "Memory"
msgstr "حافظه"
#: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295
msgid "Memory Usage"
msgstr "میزان استفاده از حافظه"
#: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers"
msgstr "میزان استفاده از حافظه کانتینرهای داکر"
#: src/components/add-system.tsx:116
msgid "Name"
msgstr "نام"
#: src/components/systems-table/systems-table.tsx:181
msgid "Net"
msgstr "شبکه"
#: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers"
msgstr "ترافیک شبکه کانتینرهای داکر"
#: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces"
msgstr "ترافیک شبکه رابط‌های عمومی"
#: src/components/command-palette.tsx:49
msgid "No results found."
msgstr "هیچ نتیجه‌ای یافت نشد."
#: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found."
msgstr "هیچ سیستمی یافت نشد."
#: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74
msgid "Notifications"
msgstr "اعلان‌ها"
#: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support"
msgstr "پشتیبانی از OAuth 2 / OIDC"
#: src/components/routes/settings/config-yaml.tsx:61
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "در هر بار راه‌اندازی مجدد، سیستم‌های موجود در پایگاه داده با سیستم‌های تعریف شده در فایل مطابقت داده می‌شوند."
#: src/components/systems-table/systems-table.tsx:528
msgid "Open menu"
msgstr "باز کردن منو"
#: src/components/login/auth-form.tsx:203
msgid "Or continue with"
msgstr "یا ادامه با"
#: src/components/alerts/alert-button.tsx:109
msgid "Overwrite existing alerts"
msgstr "بازنویسی هشدارهای موجود"
#: src/components/command-palette.tsx:84
msgid "Page"
msgstr "صفحه"
#: src/components/command-palette.tsx:71
msgid "Pages / Settings"
msgstr "صفحات / تنظیمات"
#: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:152
msgid "Password"
msgstr "رمز عبور"
#: src/components/login/auth-form.tsx:17
msgid "Password must be at least 8 characters."
msgstr "رمز عبور باید حداقل ۸ کاراکتر باشد."
#: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received"
msgstr "درخواست بازنشانی رمز عبور دریافت شد"
#: src/components/systems-table/systems-table.tsx:550
msgid "Pause"
msgstr "توقف"
#: src/components/routes/settings/notifications.tsx:95
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
msgstr "لطفاً برای اطمینان از تحویل هشدارها، یک <0>سرور SMTP پیکربندی کنید</0>."
#: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details."
msgstr "لطفاً برای جزئیات بیشتر، لاگ‌ها را بررسی کنید."
#: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again"
msgstr "لطفاً اعتبارنامه‌های خود را بررسی کرده و دوباره تلاش کنید."
#: src/components/login/login.tsx:36
msgid "Please create an admin account"
msgstr "لطفاً یک حساب مدیر ایجاد کنید"
#: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site"
msgstr "لطفاً پنجره‌های بازشو را برای این سایت فعال کنید"
#: src/lib/utils.ts:39
msgid "Please log in again"
msgstr "لطفاً دوباره وارد شوید"
#: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions."
msgstr "لطفاً برای دستورالعمل‌ها به <0>مستندات</0> مراجعه کنید."
#: src/components/login/login.tsx:40
msgid "Please sign in to your account"
msgstr "لطفاً به حساب کاربری خود وارد شوید"
#: src/components/add-system.tsx:124
msgid "Port"
msgstr "پورت"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "میزان دقیق استفاده در زمان ثبت شده"
#: src/components/routes/settings/general.tsx:58
msgid "Preferred Language"
msgstr "زبان ترجیحی"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:128
msgid "Public Key"
msgstr "کلید عمومی"
#. Disk read
#: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:70
msgid "Read"
msgstr "خواندن"
#. Network bytes received (download)
#: src/components/charts/area-chart.tsx:65
msgid "Received"
msgstr "دریافت شد"
#: src/components/login/forgot-pass-form.tsx:76
msgid "Reset Password"
msgstr "بازنشانی رمز عبور"
#: src/components/systems-table/systems-table.tsx:545
msgid "Resume"
msgstr "ادامه"
#: src/components/routes/settings/notifications.tsx:117
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
msgstr "آدرس را با استفاده از کلید Enter یا کاما ذخیره کنید. برای غیرفعال کردن اعلان‌های ایمیلی، خالی بگذارید."
#: src/components/routes/settings/general.tsx:106
#: src/components/routes/settings/notifications.tsx:167
msgid "Save Settings"
msgstr "ذخیره تنظیمات"
#: src/components/navbar.tsx:133
msgid "Search"
msgstr "جستجو"
#: src/components/command-palette.tsx:46
msgid "Search for systems or settings..."
msgstr "جستجو برای سیستم‌ها یا تنظیمات..."
#: src/components/alerts/alert-button.tsx:71
msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "برای پیکربندی نحوه دریافت هشدارها، به <0>تنظیمات اعلان</0> مراجعه کنید."
#. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:64
msgid "Sent"
msgstr "ارسال شد"
#: src/components/routes/settings/general.tsx:100
msgid "Sets the default time range for charts when a system is viewed."
msgstr "بازه زمانی پیش‌فرض برای نمودارها هنگام مشاهده یک سیستم را تعیین می‌کند."
#: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82
msgid "Settings"
msgstr "تنظیمات"
#: src/components/routes/settings/layout.tsx:33
msgid "Settings saved"
msgstr "تنظیمات ذخیره شد"
#: src/components/login/auth-form.tsx:191
msgid "Sign in"
msgstr "ورود"
#: src/components/command-palette.tsx:185
msgid "SMTP settings"
msgstr "تنظیمات SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "مرتب‌سازی بر اساس"
#: src/lib/utils.ts:282
msgid "Status"
msgstr "وضعیت"
#: src/components/routes/system.tsx:473
msgid "Swap space used by the system"
msgstr "فضای Swap استفاده شده توسط سیستم"
#: src/components/routes/system.tsx:472
msgid "Swap Usage"
msgstr "میزان استفاده از Swap"
#. System theme
#: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System"
msgstr "سیستم"
#: src/components/navbar.tsx:77
msgid "Systems"
msgstr "سیستم‌ها"
#: src/components/routes/settings/config-yaml.tsx:55
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "سیستم‌ها ممکن است در یک فایل <0>config.yml</0> درون دایرکتوری داده شما مدیریت شوند."
#: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "جدول"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314
msgid "Temperature"
msgstr "دما"
#: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors"
msgstr "دمای حسگرهای سیستم"
#: src/components/routes/settings/notifications.tsx:211
msgid "Test <0>URL</0>"
msgstr "تست <0>آدرس اینترنتی</0>"
#: src/components/routes/settings/notifications.tsx:182
msgid "Test notification sent"
msgstr "اعلان آزمایشی ارسال شد"
#: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "برای اتصال، عامل باید روی سیستم در حال اجرا باشد. دستور نصب عامل را از زیر کپی کنید."
#: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "برای اتصال، عامل باید روی سیستم در حال اجرا باشد. <0>docker-compose.yml</0> مربوط به عامل را از زیر کپی کنید."
#: src/components/login/forgot-pass-form.tsx:98
msgid "Then log into the backend and reset your user account password in the users table."
msgstr "سپس وارد بخش پشتیبان شوید و رمز عبور حساب کاربری خود را در جدول کاربران بازنشانی کنید."
#: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "این عمل قابل برگشت نیست. این کار تمام رکوردهای فعلی {name} را برای همیشه از پایگاه داده حذف خواهد کرد."
#: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}"
msgstr "توان عملیاتی {extraFsName}"
#: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem"
msgstr "توان عملیاتی سیستم فایل ریشه"
#: src/components/routes/settings/notifications.tsx:106
msgid "To email(s)"
msgstr "به ایمیل(ها)"
#: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:372
msgid "Toggle grid"
msgstr "تغییر نمایش جدول"
#: src/components/mode-toggle.tsx:33
msgid "Toggle theme"
msgstr "تغییر تم"
#: src/lib/utils.ts:317
msgid "Triggers when any sensor exceeds a threshold"
msgstr "هنگامی که هر حسگری از یک آستانه فراتر رود، فعال می‌شود"
#: src/lib/utils.ts:310
msgid "Triggers when combined up/down exceeds a threshold"
msgstr "هنگامی که مجموع بالا/پایین از یک آستانه فراتر رود، فعال می‌شود"
#: src/lib/utils.ts:292
msgid "Triggers when CPU usage exceeds a threshold"
msgstr "هنگامی که میزان استفاده از CPU از یک آستانه فراتر رود، فعال می‌شود"
#: src/lib/utils.ts:298
msgid "Triggers when memory usage exceeds a threshold"
msgstr "هنگامی که میزان استفاده از حافظه از یک آستانه فراتر رود، فعال می‌شود"
#: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down"
msgstr "هنگامی که وضعیت بین بالا و پایین تغییر می‌کند، فعال می‌شود"
#: src/lib/utils.ts:304
msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "هنگامی که استفاده از هر دیسکی از یک آستانه فراتر رود، فعال می‌شود"
#: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information."
msgstr "به صورت لحظه‌ای به‌روزرسانی می‌شود. برای مشاهده اطلاعات، روی یک سیستم کلیک کنید."
#: src/components/routes/system.tsx:261
msgid "Uptime"
msgstr "آپتایم"
#: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage"
msgstr "میزان استفاده"
#: src/components/routes/system.tsx:424
msgid "Usage of root partition"
msgstr "میزان استفاده از پارتیشن ریشه"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56
msgid "Used"
msgstr "استفاده شده"
#: src/components/command-palette.tsx:142
#: src/components/navbar.tsx:69
msgid "Users"
msgstr "کاربران"
#: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "مشاهده"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "فیلدهای قابل مشاهده"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display"
msgstr "در انتظار رکوردهای کافی برای نمایش"
#: src/components/routes/settings/general.tsx:48
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
msgstr "می‌خواهید به ما کمک کنید تا ترجمه‌های خود را بهتر کنیم؟ برای جزئیات بیشتر به <0>Crowdin</0> مراجعه کنید."
#: src/components/routes/settings/notifications.tsx:124
msgid "Webhook / Push notifications"
msgstr "اعلان‌های Webhook / Push"
#. Disk write
#: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:69
msgid "Write"
msgstr "نوشتن"
#: src/components/routes/settings/layout.tsx:61
msgid "YAML Config"
msgstr "پیکربندی YAML"
#: src/components/routes/settings/config-yaml.tsx:45
msgid "YAML Configuration"
msgstr "پیکربندی YAML"
#: src/components/routes/settings/layout.tsx:34
msgid "Your user settings have been updated."
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: 2024-11-02 02:13\n" "PO-Revision-Date: 2024-12-30 19:10\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"
@@ -18,11 +18,11 @@ msgstr ""
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n" "X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n" "X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# jour} other {# jours}}" msgstr "{0, plural, one {# jour} other {# jours}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# heure} other {# heures}}" msgstr "{hours, plural, one {# heure} other {# heures}}"
@@ -47,24 +47,27 @@ msgid "30 days"
msgstr "30 jours" msgstr "30 jours"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "Actions" msgstr "Actions"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "Alertes actives" msgstr "Alertes actives"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "Ajouter <0>Système</0>" msgstr "Ajouter <0>Système</0>"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "Ajouter un nouveau système" msgstr "Ajouter un nouveau système"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "Ajouter un système" msgstr "Ajouter un système"
@@ -76,16 +79,15 @@ msgstr "Ajouter URL"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "Ajuster les options d'affichage pour les graphiques." msgstr "Ajuster les options d'affichage pour les graphiques."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "Admin" msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "Agent" msgstr "Agent"
@@ -95,50 +97,53 @@ msgid "Alerts"
msgstr "Alertes" msgstr "Alertes"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "Tous les systèmes" msgstr "Tous les systèmes"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Êtes-vous sûr de vouloir supprimer {name} ?" msgstr "Êtes-vous sûr de vouloir supprimer {name} ?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "Fournisseurs d'authentification"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "La copie automatique nécessite un contexte sécurisé." msgstr "La copie automatique nécessite un contexte sécurisé."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "Moyenne" msgstr "Moyenne"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "Utilisation moyenne du CPU des conteneurs" msgstr "Utilisation moyenne du CPU des conteneurs"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "La moyenne dépasse <0>{value}{0}</0>" msgstr "La moyenne dépasse <0>{value}{0}</0>"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Consommation d'énergie moyenne des GPUs"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "Utilisation moyenne du CPU à l'échelle du système" msgstr "Utilisation moyenne du CPU à l'échelle du système"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr "Utilisation moyenne de {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "Sauvegardes" msgstr "Sauvegardes"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "Bande passante" msgstr "Bande passante"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'authentification OAuth2." msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'authentification OAuth2."
@@ -146,7 +151,7 @@ msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'auth
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel utilise <0>Shoutrrr</0> pour s'intégrer aux services de notification populaires." msgstr "Beszel utilise <0>Shoutrrr</0> pour s'intégrer aux services de notification populaires."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "Binaire" msgstr "Binaire"
@@ -154,7 +159,7 @@ msgstr "Binaire"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "Cache / Tampons" msgstr "Cache / Tampons"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
@@ -182,15 +187,10 @@ msgstr "Vérifiez les journaux pour plus de détails."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Vérifiez votre service de notification" msgstr "Vérifiez votre service de notification"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "Cliquez pour copier" msgstr "Cliquez pour copier"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "Colonnes"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -200,12 +200,12 @@ msgstr "Instructions en ligne de commande"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "Configurez comment vous recevez les notifications d'alerte." msgstr "Configurez comment vous recevez les notifications d'alerte."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "Confirmer le mot de passe" msgstr "Confirmer le mot de passe"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "Continuer" msgstr "Continuer"
@@ -213,15 +213,15 @@ msgstr "Continuer"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Copié dans le presse-papiers" msgstr "Copié dans le presse-papiers"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "Copier" msgstr "Copier"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "Copier l'hôte" msgstr "Copier l'hôte"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copier la commande Linux" msgstr "Copier la commande Linux"
@@ -229,17 +229,17 @@ msgstr "Copier la commande Linux"
msgid "Copy text" msgid "Copy text"
msgstr "Copier le texte" msgstr "Copier le texte"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "Utilisation du CPU" msgstr "Utilisation du CPU"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "Créer un compte" msgstr "Créer un compte"
@@ -248,8 +248,8 @@ msgstr "Créer un compte"
msgid "Dark" msgid "Dark"
msgstr "Sombre" msgstr "Sombre"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "Tableau de bord" msgstr "Tableau de bord"
@@ -257,49 +257,45 @@ msgstr "Tableau de bord"
msgid "Default time period" msgid "Default time period"
msgstr "Période par défaut" msgstr "Période par défaut"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "Disque" msgstr "Disque"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "Entrée/Sortie disque" msgstr "Entrée/Sortie disque"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "Utilisation du disque" msgstr "Utilisation du disque"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "Utilisation du disque de {extraFsName}" msgstr "Utilisation du disque de {extraFsName}"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Utilisation du CPU Docker" msgstr "Utilisation du CPU Docker"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Utilisation de la mémoire Docker" msgstr "Utilisation de la mémoire Docker"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "Entrée/Sortie réseau Docker" msgstr "Entrée/Sortie réseau Docker"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "Documentation" msgstr "Documentation"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "email"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
@@ -308,7 +304,7 @@ msgstr "Email"
msgid "Email notifications" msgid "Email notifications"
msgstr "Notifications par email" msgstr "Notifications par email"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "Entrez l'adresse email pour réinitialiser le mot de passe" msgstr "Entrez l'adresse email pour réinitialiser le mot de passe"
@@ -316,15 +312,15 @@ msgstr "Entrez l'adresse email pour réinitialiser le mot de passe"
msgid "Enter email address..." msgid "Enter email address..."
msgstr "Entrez l'adresse email..." msgstr "Entrez l'adresse email..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "Erreur" msgstr "Erreur"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Dépasse {0}{1} dans la dernière {2, plural, one {# minute} other {# minutes}}" msgstr "Dépasse {0}{1} dans {2, plural, one {la dernière # minute} other {les dernières # minutes}}"
#: src/components/routes/settings/config-yaml.tsx:72 #: src/components/routes/settings/config-yaml.tsx:72
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups." msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
@@ -351,20 +347,20 @@ msgstr "Échec de l'enregistrement des paramètres"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "Échec de l'envoi de la notification de test" msgstr "Échec de l'envoi de la notification de test"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Échec de la mise à jour de l'alerte" msgstr "Échec de la mise à jour de l'alerte"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "Filtrer..." msgstr "Filtrer..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Pour <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgstr "Pour <0>{min}</0> {min, plural, one {minute} other {minutes}}"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Mot de passe oublié ?" msgstr "Mot de passe oublié ?"
@@ -374,7 +370,15 @@ msgstr "Mot de passe oublié ?"
msgid "General" msgid "General"
msgstr "Général" msgstr "Général"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "Consommation du GPU"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Grille"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "Hôte / IP" msgstr "Hôte / IP"
@@ -387,7 +391,7 @@ msgid "Invalid email address."
msgstr "Adresse email invalide." msgstr "Adresse email invalide."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "Noyau" msgstr "Noyau"
@@ -395,26 +399,30 @@ msgstr "Noyau"
msgid "Language" msgid "Language"
msgstr "Langue" msgstr "Langue"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Disposition"
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "Clair" msgstr "Clair"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "Déconnexion" msgstr "Déconnexion"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "Connexion" msgstr "Connexion"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "Échec de la tentative de connexion" msgstr "Échec de la tentative de connexion"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "Journaux" msgstr "Journaux"
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "Gérer les préférences d'affichage et de notification." msgstr "Gérer les préférences d'affichage et de notification."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "Max 1 min" msgstr "Max 1 min"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "Mémoire" msgstr "Mémoire"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "Utilisation de la mémoire" msgstr "Utilisation de la mémoire"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "Utilisation de la mémoire des conteneurs Docker" msgstr "Utilisation de la mémoire des conteneurs Docker"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "Net" msgstr "Net"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "Trafic réseau des conteneurs Docker" msgstr "Trafic réseau des conteneurs Docker"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "Trafic réseau des interfaces publiques" msgstr "Trafic réseau des interfaces publiques"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "Aucun résultat trouvé." msgstr "Aucun résultat trouvé."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "Aucun système trouvé." msgstr "Aucun système trouvé."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "Notifications" msgstr "Notifications"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "Support OAuth 2 / OIDC" msgstr "Support OAuth 2 / OIDC"
@@ -482,11 +491,11 @@ msgstr "Support OAuth 2 / OIDC"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "À chaque redémarrage, les systèmes dans la base de données seront mis à jour pour correspondre aux systèmes définis dans le fichier." msgstr "À chaque redémarrage, les systèmes dans la base de données seront mis à jour pour correspondre aux systèmes définis dans le fichier."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "Ouvrir le menu" msgstr "Ouvrir le menu"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "Ou continuer avec" msgstr "Ou continuer avec"
@@ -494,28 +503,28 @@ msgstr "Ou continuer avec"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "Écraser les alertes existantes" msgstr "Écraser les alertes existantes"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "Page" msgstr "Page"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "Pages / Paramètres" msgstr "Pages / Paramètres"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "Le mot de passe doit contenir au moins 10 caractères." msgstr "Le mot de passe doit contenir au moins 8 caractères."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "Demande de réinitialisation du mot de passe reçue" msgstr "Demande de réinitialisation du mot de passe reçue"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "Pause" msgstr "Pause"
@@ -523,20 +532,20 @@ msgstr "Pause"
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."
msgstr "Veuillez <0>configurer un serveur SMTP</0> pour garantir la livraison des alertes." msgstr "Veuillez <0>configurer un serveur SMTP</0> pour garantir la livraison des alertes."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "Veuillez vérifier les journaux pour plus de détails." msgstr "Veuillez vérifier les journaux pour plus de détails."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "Veuillez vérifier vos identifiants et réessayer" msgstr "Veuillez vérifier vos identifiants et réessayer"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "Veuillez créer un compte administrateur" msgstr "Veuillez créer un compte administrateur"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "Veuillez activer les pop-ups pour ce site" msgstr "Veuillez activer les pop-ups pour ce site"
@@ -544,35 +553,40 @@ msgstr "Veuillez activer les pop-ups pour ce site"
msgid "Please log in again" msgid "Please log in again"
msgstr "Veuillez vous reconnecter" msgstr "Veuillez vous reconnecter"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "Veuillez consulter <0>la documentation</0> pour les instructions." msgstr "Veuillez consulter <0>la documentation</0> pour les instructions."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "Veuillez vous connecter à votre compte" msgstr "Veuillez vous connecter à votre compte"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "Port" msgstr "Port"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Utilisation précise au moment enregistré"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "Langue préférée" msgstr "Langue préférée"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "Clé publique" msgstr "Clé publique"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "Lecture" msgstr "Lecture"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "Reçu" msgstr "Reçu"
@@ -580,7 +594,7 @@ msgstr "Reçu"
msgid "Reset Password" msgid "Reset Password"
msgstr "Réinitialiser le mot de passe" msgstr "Réinitialiser le mot de passe"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "Reprendre" msgstr "Reprendre"
@@ -593,11 +607,11 @@ msgstr "Enregistrez l'adresse en utilisant la touche Entrée ou la virgule. Lais
msgid "Save Settings" msgid "Save Settings"
msgstr "Enregistrer les paramètres" msgstr "Enregistrer les paramètres"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "Recherche" msgstr "Recherche"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "Rechercher des systèmes ou des paramètres..." msgstr "Rechercher des systèmes ou des paramètres..."
@@ -605,8 +619,8 @@ msgstr "Rechercher des systèmes ou des paramètres..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Voir les <0>paramètres de notification</0> pour configurer comment vous recevez les alertes." msgstr "Voir les <0>paramètres de notification</0> pour configurer comment vous recevez les alertes."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "Envoyé" msgstr "Envoyé"
@@ -614,9 +628,9 @@ msgstr "Envoyé"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "Définit la plage de temps par défaut pour les graphiques lorsqu'un système est consulté." msgstr "Définit la plage de temps par défaut pour les graphiques lorsqu'un système est consulté."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -626,34 +640,40 @@ msgstr "Paramètres"
msgid "Settings saved" msgid "Settings saved"
msgstr "Paramètres enregistrés" msgstr "Paramètres enregistrés"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "Se connecter" msgstr "Se connecter"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "Paramètres SMTP" msgstr "Paramètres SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Trier par"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "Statut" msgstr "Statut"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "Espace d'échange utilisé par le système" msgstr "Espace Swap utilisé par le système"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "Utilisation de l'échange" msgstr "Utilisation du swap"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "Système" msgstr "Système"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "Systèmes" msgstr "Systèmes"
@@ -661,12 +681,16 @@ msgstr "Systèmes"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Les systèmes peuvent être gérés dans un fichier <0>config.yml</0> à l'intérieur de votre répertoire de données." msgstr "Les systèmes peuvent être gérés dans un fichier <0>config.yml</0> à l'intérieur de votre répertoire de données."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tableau"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "Température" msgstr "Température"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "Températures des capteurs du système" msgstr "Températures des capteurs du système"
@@ -678,11 +702,11 @@ msgstr "Tester <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "Notification de test envoyée" msgstr "Notification de test envoyée"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "L'agent doit être en cours d'exécution sur le système pour se connecter. Copiez la commande d'installation pour l'agent ci-dessous." msgstr "L'agent doit être en cours d'exécution sur le système pour se connecter. Copiez la commande d'installation pour l'agent ci-dessous."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "L'agent doit être en cours d'exécution sur le système pour se connecter. Copiez le <0>docker-compose.yml</0> pour l'agent ci-dessous." msgstr "L'agent doit être en cours d'exécution sur le système pour se connecter. Copiez le <0>docker-compose.yml</0> pour l'agent ci-dessous."
@@ -690,15 +714,15 @@ msgstr "L'agent doit être en cours d'exécution sur le système pour se connect
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Ensuite, connectez-vous au backend et réinitialisez le mot de passe de votre compte utilisateur dans la table des utilisateurs." msgstr "Ensuite, connectez-vous au backend et réinitialisez le mot de passe de votre compte utilisateur dans la table des utilisateurs."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Cette action ne peut pas être annulée. Cela supprimera définitivement tous les enregistrements actuels pour {name} de la base de données." msgstr "Cette action ne peut pas être annulée. Cela supprimera définitivement tous les enregistrements actuels pour {name} de la base de données."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "Débit de {extraFsName}" msgstr "Débit de {extraFsName}"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "Débit du système de fichiers racine" msgstr "Débit du système de fichiers racine"
@@ -706,14 +730,14 @@ msgstr "Débit du système de fichiers racine"
msgid "To email(s)" msgid "To email(s)"
msgstr "Aux email(s)" msgstr "Aux email(s)"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "Basculer la grille" msgstr "Basculer la grille"
#: src/components/mode-toggle.tsx:33 #: src/components/mode-toggle.tsx:33
msgid "Toggle theme" msgid "Toggle theme"
msgstr "Basculer le thème" msgstr "Changer le thème"
#: src/lib/utils.ts:317 #: src/lib/utils.ts:317
msgid "Triggers when any sensor exceeds a threshold" msgid "Triggers when any sensor exceeds a threshold"
@@ -721,7 +745,7 @@ msgstr "Déclenchement lorsque tout capteur dépasse un seuil"
#: src/lib/utils.ts:310 #: src/lib/utils.ts:310
msgid "Triggers when combined up/down exceeds a threshold" msgid "Triggers when combined up/down exceeds a threshold"
msgstr "Déclenchement lorsque la montée/descente combinée dépasse un seuil" msgstr "Déclenchement lorsque le montant/descendant combinée dépasse un seuil"
#: src/lib/utils.ts:292 #: src/lib/utils.ts:292
msgid "Triggers when CPU usage exceeds a threshold" msgid "Triggers when CPU usage exceeds a threshold"
@@ -731,53 +755,52 @@ msgstr "Déclenchement lorsque l'utilisation du CPU dépasse un seuil"
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "Déclenchement lorsque l'utilisation de la mémoire dépasse un seuil" msgstr "Déclenchement lorsque l'utilisation de la mémoire dépasse un seuil"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "Déclenchement lorsque l'utilisation de la mémoire dépasse un seuil."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "Déclenchement lorsque le statut passe de haut en bas" msgstr "Déclenchement lorsque le statut passe d'opérationnel à indisponible"
#: src/lib/utils.ts:304 #: src/lib/utils.ts:304
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Déclenchement lorsque l'utilisation de tout disque dépasse un seuil" msgstr "Déclenchement lorsque l'utilisation de tout disque dépasse un seuil"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "Mis à jour en temps réel. Cliquez sur un système pour voir les informations." msgstr "Mis à jour en temps réel. Cliquez sur un système pour voir les informations."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "Temps de fonctionnement" msgstr "Temps de fonctionnement"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "Utilisation" msgstr "Utilisation"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "Utilisation de la partition racine" msgstr "Utilisation de la partition racine"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "Utilisé" msgstr "Utilisé"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "nom d'utilisateur"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "Nom d'utilisateur"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Vue"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Colonnes visibles"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "En attente de suffisamment d'enregistrements à afficher" msgstr "En attente de suffisamment d'enregistrements à afficher"
@@ -789,9 +812,9 @@ msgstr "Vous voulez nous aider à améliorer nos traductions ? Consultez <0>Crow
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Notifications Webhook / Push" msgstr "Notifications Webhook / Push"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "Écriture" msgstr "Écriture"

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,831 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: hr\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-17 21:36\n"
"Last-Translator: \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"
"X-Crowdin-Project: beszel\n"
"X-Crowdin-Project-ID: 733311\n"
"X-Crowdin-Language: hr\n"
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# dan} other {# dani}}"
#: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# sat} other {# sati}}"
#: src/lib/utils.ts:139
msgid "1 hour"
msgstr "1 sat"
#: src/lib/utils.ts:162
msgid "1 week"
msgstr "1 tjedan"
#: src/lib/utils.ts:147
msgid "12 hours"
msgstr "12 sati"
#: src/lib/utils.ts:155
msgid "24 hours"
msgstr "24 sati"
#: src/lib/utils.ts:170
msgid "30 days"
msgstr "30 dana"
#. Table column
#: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions"
msgstr "Akcije"
#: src/components/routes/home.tsx:61
msgid "Active Alerts"
msgstr "Aktivna upozorenja"
#: src/components/add-system.tsx:78
msgid "Add <0>System</0>"
msgstr "Dodaj <0>Sistem</0>"
#: src/components/add-system.tsx:87
msgid "Add New System"
msgstr "Dodaj Novi Sistem"
#: src/components/add-system.tsx:165
#: src/components/add-system.tsx:176
msgid "Add system"
msgstr "Dodaj sistem"
#: src/components/routes/settings/notifications.tsx:156
msgid "Add URL"
msgstr "Dodaj URL"
#: src/components/routes/settings/general.tsx:81
msgid "Adjust display options for charts."
msgstr "Podesite opcije prikaza za grafikone."
#: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:188
msgid "Admin"
msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:201
msgid "Agent"
msgstr "Agent"
#: src/components/alerts/alert-button.tsx:32
#: src/components/alerts/alert-button.tsx:68
msgid "Alerts"
msgstr "Upozorenja"
#: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:266
msgid "All Systems"
msgstr "Svi Sistemi"
#: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?"
msgstr "Jeste li sigurni da želite izbrisati {name}?"
#: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context."
msgstr "Automatsko kopiranje zahtijeva siguran kontekst."
#: src/components/routes/system.tsx:625
msgid "Average"
msgstr "Prosjek"
#: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers"
msgstr "Prosječna iskorištenost procesora u spremnicima"
#: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>"
msgstr "Prosjek premašuje <0>{value}{0}</0>"
#: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr ""
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization"
msgstr "Prosječna iskorištenost procesora na cijelom sustavu"
#: src/components/routes/system.tsx:515
msgid "Average utilization of {0}"
msgstr ""
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups"
msgstr "Sigurnosne kopije"
#: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307
msgid "Bandwidth"
msgstr "Propusnost"
#: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel podržava OpenID Connect i mnoge druge OAuth2 davatalje autentifikacije."
#: src/components/routes/settings/notifications.tsx:127
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel koristi <0>Shoutrrr</0> za integraciju sa popularnim servisima za notifikacije."
#: src/components/add-system.tsx:92
msgid "Binary"
msgstr "Binarni"
#: src/components/charts/mem-chart.tsx:89
msgid "Cache / Buffers"
msgstr "Predmemorija / Međuspremnici"
#: src/components/systems-table/systems-table.tsx:581
msgid "Cancel"
msgstr "Otkaži"
#: src/components/routes/settings/config-yaml.tsx:68
msgid "Caution - potential data loss"
msgstr "Oprez - mogući gubitak podataka"
#: src/components/routes/settings/general.tsx:36
msgid "Change general application options."
msgstr "Promijenite opće opcije aplikacije."
#: src/components/routes/settings/general.tsx:78
msgid "Chart options"
msgstr "Opcije grafikona"
#: src/components/login/forgot-pass-form.tsx:34
msgid "Check {email} for a reset link."
msgstr "Provjerite {email} za vezu za resetiranje."
#: src/components/routes/settings/layout.tsx:40
msgid "Check logs for more details."
msgstr "Provjerite logove za više detalja."
#: src/components/routes/settings/notifications.tsx:183
msgid "Check your notification service"
msgstr "Provjerite Vaš servis notifikacija"
#: src/components/add-system.tsx:151
msgid "Click to copy"
msgstr "Pritisnite za kopiranje"
#: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions"
msgstr "Upute za naredbeni redak"
#: src/components/routes/settings/notifications.tsx:77
msgid "Configure how you receive alert notifications."
msgstr "Konfigurirajte način primanja obavijesti upozorenja."
#: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:170
msgid "Confirm password"
msgstr "Potvrdite lozinku"
#: src/components/systems-table/systems-table.tsx:587
msgid "Continue"
msgstr "Nastavite"
#: src/lib/utils.ts:25
msgid "Copied to clipboard"
msgstr "Kopirano u međuspremnik"
#: src/components/add-system.tsx:162
msgid "Copy"
msgstr "Kopiraj"
#: src/components/systems-table/systems-table.tsx:556
msgid "Copy host"
msgstr "Kopiraj hosta"
#: src/components/add-system.tsx:173
msgid "Copy Linux command"
msgstr "Kopiraj Linux komandu"
#: src/components/copy-to-clipboard.tsx:13
msgid "Copy text"
msgstr "Kopiraj tekst"
#: src/components/systems-table/systems-table.tsx:157
msgid "CPU"
msgstr "Procesor"
#: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289
msgid "CPU Usage"
msgstr "Iskorištenost procesora"
#: src/components/login/auth-form.tsx:191
msgid "Create account"
msgstr "Napravite račun"
#. Dark theme
#: src/components/mode-toggle.tsx:21
msgid "Dark"
msgstr "Tamno"
#: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:34
msgid "Dashboard"
msgstr "Nadzorna ploča"
#: src/components/routes/settings/general.tsx:85
msgid "Default time period"
msgstr "Zadano vremensko razdoblje"
#: src/components/systems-table/systems-table.tsx:562
msgid "Delete"
msgstr "Izbriši"
#: src/components/systems-table/systems-table.tsx:173
msgid "Disk"
msgstr "Disk"
#: src/components/routes/system.tsx:431
msgid "Disk I/O"
msgstr "Disk I/O"
#: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301
msgid "Disk Usage"
msgstr "Iskorištenost Diska"
#: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}"
msgstr "Iskorištenost diska od {extraFsName}"
#: src/components/routes/system.tsx:395
msgid "Docker CPU Usage"
msgstr "Iskorištenost Docker Procesora"
#: src/components/routes/system.tsx:416
msgid "Docker Memory Usage"
msgstr "Iskorištenost Docker Memorije"
#: src/components/routes/system.tsx:457
msgid "Docker Network I/O"
msgstr "Docker Mrežni I/O"
#: src/components/command-palette.tsx:124
msgid "Documentation"
msgstr "Dokumentacija"
#: src/components/login/auth-form.tsx:128
#: src/components/login/forgot-pass-form.tsx:53
msgid "Email"
msgstr "Email"
#: src/components/routes/settings/notifications.tsx:91
msgid "Email notifications"
msgstr "Email notifikacije"
#: src/components/login/login.tsx:38
msgid "Enter email address to reset password"
msgstr "Unesite email adresu za resetiranje lozinke"
#: src/components/routes/settings/notifications.tsx:111
msgid "Enter email address..."
msgstr "Unesite email adresu..."
#: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187
msgid "Error"
msgstr "Greška"
#: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Premašuje {0}{1} u posljednjih {2, plural, one {# minuta} other {# minute}}"
#: src/components/routes/settings/config-yaml.tsx:72
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
msgstr "Postojeći sistemi koji nisu definirani u <0>config.yml</0> će biti izbrisani. Molimo Vas napravite redovite sigurnosne kopije."
#: src/components/routes/settings/config-yaml.tsx:93
msgid "Export configuration"
msgstr "Izvoz konfiguracije"
#: src/components/routes/settings/config-yaml.tsx:48
msgid "Export your current systems configuration."
msgstr "Izvoz trenutne sistemske konfiguracije."
#: src/lib/utils.ts:38
msgid "Failed to authenticate"
msgstr "Provjera autentičnosti nije uspjela"
#: src/components/routes/settings/layout.tsx:39
#: src/components/routes/settings/notifications.tsx:62
msgid "Failed to save settings"
msgstr "Neuspješno snimanje postavki"
#: src/components/routes/settings/notifications.tsx:188
msgid "Failed to send test notification"
msgstr "Neuspješno slanje testne notifikacije"
#: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert"
msgstr "Ažuriranje upozorenja nije uspjelo"
#: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:273
msgid "Filter..."
msgstr "Filter..."
#: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Za <0>{min}</0> {min, plural, one {minutu} other {minute}}"
#: src/components/login/auth-form.tsx:313
msgid "Forgot password?"
msgstr "Zaboravljena lozinka?"
#. Context: General settings
#: src/components/routes/settings/general.tsx:33
#: src/components/routes/settings/layout.tsx:51
msgid "General"
msgstr "Općenito"
#: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr ""
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Mreža"
#: src/components/add-system.tsx:120
msgid "Host / IP"
msgstr "Host / IP"
#: src/components/login/forgot-pass-form.tsx:93
msgid "If you've lost the password to your admin account, you may reset it using the following command."
msgstr "Ako ste izgubili lozinku za svoj administratorski račun, možete ju resetirati pomoću sljedeće naredbe."
#: src/components/login/auth-form.tsx:16
msgid "Invalid email address."
msgstr "Nevažeća adresa e-pošte."
#. Linux kernel
#: src/components/routes/system.tsx:262
msgid "Kernel"
msgstr "Kernel"
#: src/components/routes/settings/general.tsx:45
msgid "Language"
msgstr "Jezik"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Izgled"
#. Light theme
#: src/components/mode-toggle.tsx:16
msgid "Light"
msgstr "Svijetlo"
#: src/components/navbar.tsx:104
msgid "Log Out"
msgstr "Odjava"
#: src/components/login/login.tsx:19
msgid "Login"
msgstr "Prijava"
#: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed"
msgstr "Pokušaj prijave nije uspio"
#: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:85
msgid "Logs"
msgstr "Logovi"
#: src/components/routes/settings/notifications.tsx:80
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
msgstr "Tražite gdje stvoriti upozorenja? Kliknite ikonu zvona <0/> u tablici sustava."
#: src/components/routes/settings/layout.tsx:85
msgid "Manage display and notification preferences."
msgstr "Upravljajte postavkama prikaza i obavijesti."
#. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:628
msgid "Max 1 min"
msgstr "Maksimalno 1 minuta"
#: src/components/systems-table/systems-table.tsx:165
msgid "Memory"
msgstr "Memorija"
#: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295
msgid "Memory Usage"
msgstr "Upotreba memorije"
#: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers"
msgstr "Upotreba memorije Docker spremnika"
#: src/components/add-system.tsx:116
msgid "Name"
msgstr "Ime"
#: src/components/systems-table/systems-table.tsx:181
msgid "Net"
msgstr "Mreža"
#: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers"
msgstr "Mrežni promet Docker spremnika"
#: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces"
msgstr "Mrežni promet javnih sučelja"
#: src/components/command-palette.tsx:49
msgid "No results found."
msgstr "Nema rezultata."
#: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found."
msgstr "Nije pronađen nijedan sustav."
#: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74
msgid "Notifications"
msgstr "Obavijesti"
#: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support"
msgstr "Podrška za OAuth 2 / OIDC"
#: src/components/routes/settings/config-yaml.tsx:61
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "Prilikom svakog ponovnog pokretanja, sustavi u bazi podataka biti će ažurirani kako bi odgovarali sustavima definiranim u datoteci."
#: src/components/systems-table/systems-table.tsx:528
msgid "Open menu"
msgstr "Otvori menu"
#: src/components/login/auth-form.tsx:203
msgid "Or continue with"
msgstr "Ili nastavi sa"
#: src/components/alerts/alert-button.tsx:109
msgid "Overwrite existing alerts"
msgstr "Prebrišite postojeća upozorenja"
#: src/components/command-palette.tsx:84
msgid "Page"
msgstr "Stranica"
#: src/components/command-palette.tsx:71
msgid "Pages / Settings"
msgstr "Stranice / Postavke"
#: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:152
msgid "Password"
msgstr "Lozinka"
#: src/components/login/auth-form.tsx:17
msgid "Password must be at least 8 characters."
msgstr "Lozinka mora imati najmanje 8 znakova."
#: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received"
msgstr "Zahtjev za ponovno postavljanje lozinke primljen"
#: src/components/systems-table/systems-table.tsx:550
msgid "Pause"
msgstr "Pauza"
#: src/components/routes/settings/notifications.tsx:95
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
msgstr "Molimo <0>konfigurirajte SMTP server</0> kako biste osigurali isporuku upozorenja."
#: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details."
msgstr "Za više detalja provjerite logove."
#: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again"
msgstr "Provjerite svoje podatke i pokušajte ponovno"
#: src/components/login/login.tsx:36
msgid "Please create an admin account"
msgstr "Molimo kreirajte administratorski račun"
#: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site"
msgstr "Omogućite skočne prozore za ovu stranicu"
#: src/lib/utils.ts:39
msgid "Please log in again"
msgstr "Molimo prijavite se ponovno"
#: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions."
msgstr "Molimo pogledajte <0>dokumentaciju</0> za instrukcije."
#: src/components/login/login.tsx:40
msgid "Please sign in to your account"
msgstr "Molimo prijavite se u svoj račun"
#: src/components/add-system.tsx:124
msgid "Port"
msgstr "Port"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Precizno iskorištenje u zabilježenom vremenu"
#: src/components/routes/settings/general.tsx:58
msgid "Preferred Language"
msgstr "Preferirani jezik"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:128
msgid "Public Key"
msgstr "Javni Ključ"
#. Disk read
#: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:70
msgid "Read"
msgstr "Pročitaj"
#. Network bytes received (download)
#: src/components/charts/area-chart.tsx:65
msgid "Received"
msgstr "Primljeno"
#: src/components/login/forgot-pass-form.tsx:76
msgid "Reset Password"
msgstr "Resetiraj Lozinku"
#: src/components/systems-table/systems-table.tsx:545
msgid "Resume"
msgstr "Nastavi"
#: src/components/routes/settings/notifications.tsx:117
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
msgstr "Spremite adresu pomoću tipke enter ili zareza. Ostavite prazno kako biste onemogućili obavijesti e-poštom."
#: src/components/routes/settings/general.tsx:106
#: src/components/routes/settings/notifications.tsx:167
msgid "Save Settings"
msgstr "Spremi Postavke"
#: src/components/navbar.tsx:133
msgid "Search"
msgstr "Pretraži"
#: src/components/command-palette.tsx:46
msgid "Search for systems or settings..."
msgstr "Pretraži za sisteme ili postavke..."
#: src/components/alerts/alert-button.tsx:71
msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Pogledajte <0>postavke obavijesti</0> da biste konfigurirali način primanja upozorenja."
#. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:64
msgid "Sent"
msgstr "Poslano"
#: src/components/routes/settings/general.tsx:100
msgid "Sets the default time range for charts when a system is viewed."
msgstr "Postavlja zadani vremenski raspon za grafikone kada se sustav gleda."
#: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82
msgid "Settings"
msgstr "Postavke"
#: src/components/routes/settings/layout.tsx:33
msgid "Settings saved"
msgstr "Postavke spremljene"
#: src/components/login/auth-form.tsx:191
msgid "Sign in"
msgstr "Prijava"
#: src/components/command-palette.tsx:185
msgid "SMTP settings"
msgstr "SMTP postavke"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Sortiraj po"
#: src/lib/utils.ts:282
msgid "Status"
msgstr "Status"
#: src/components/routes/system.tsx:473
msgid "Swap space used by the system"
msgstr "Swap prostor uzet od strane sistema"
#: src/components/routes/system.tsx:472
msgid "Swap Usage"
msgstr "Swap Iskorištenost"
#. System theme
#: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System"
msgstr "Sistem"
#: src/components/navbar.tsx:77
msgid "Systems"
msgstr "Sistemi"
#: src/components/routes/settings/config-yaml.tsx:55
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Sistemima se može upravljati u <0>config.yml</0> datoteci unutar data direktorija."
#: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tablica"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314
msgid "Temperature"
msgstr "Temperatura"
#: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors"
msgstr "Temperature sistemskih senzora"
#: src/components/routes/settings/notifications.tsx:211
msgid "Test <0>URL</0>"
msgstr "Testni <0>URL</0>"
#: src/components/routes/settings/notifications.tsx:182
msgid "Test notification sent"
msgstr "Testna obavijest poslana"
#: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "Agent mora biti pokrenut na sistemu da bi se spojio. Kopirajte instalacijske komande za agenta ispod."
#: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "Agent mora biti pokrenut na sistemu da bi se spojio. Kopirajte <0>docker-compose.yml</0> za agenta ispod."
#: src/components/login/forgot-pass-form.tsx:98
msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Zatim se prijavite u backend i resetirajte lozinku korisničkog računa u tablici korisnika."
#: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Ova radnja se ne može poništiti. Ovo će trajno izbrisati sve trenutne zapise za {name} iz baze podataka."
#: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}"
msgstr "Protok {extraFsName}"
#: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem"
msgstr "Protok root datotečnog sustava"
#: src/components/routes/settings/notifications.tsx:106
msgid "To email(s)"
msgstr "Primaoci e-pošte"
#: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:372
msgid "Toggle grid"
msgstr "Uključi/isključi rešetku"
#: src/components/mode-toggle.tsx:33
msgid "Toggle theme"
msgstr "Uključi/isključi temu"
#: src/lib/utils.ts:317
msgid "Triggers when any sensor exceeds a threshold"
msgstr "Pokreće se kada bilo koji senzor prijeđe prag"
#: src/lib/utils.ts:310
msgid "Triggers when combined up/down exceeds a threshold"
msgstr "Pokreće se kada kombinacija gore/dolje premaši prag"
#: src/lib/utils.ts:292
msgid "Triggers when CPU usage exceeds a threshold"
msgstr "Pokreće se kada iskorištenost procesora premaši prag"
#: src/lib/utils.ts:298
msgid "Triggers when memory usage exceeds a threshold"
msgstr "Pokreće se kada iskorištenost memorije premaši prag"
#: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down"
msgstr "Pokreće se kada se status sistema promijeni"
#: src/lib/utils.ts:304
msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Pokreće se kada iskorištenost bilo kojeg diska premaši prag"
#: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information."
msgstr "Ažurirano odmah. Kliknite na sistem za više informacija."
#: src/components/routes/system.tsx:261
msgid "Uptime"
msgstr "Vrijeme rada"
#: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage"
msgstr "Iskorištenost"
#: src/components/routes/system.tsx:424
msgid "Usage of root partition"
msgstr "Iskorištenost root datotečnog sustava"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56
msgid "Used"
msgstr "Iskorišteno"
#: src/components/command-palette.tsx:142
#: src/components/navbar.tsx:69
msgid "Users"
msgstr "Korisnici"
#: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Prikaz"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Vidljiva polja"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display"
msgstr "Čeka se na više podataka prije prikaza"
#: src/components/routes/settings/general.tsx:48
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
msgstr "Želite li nam pomoći da naše prijevode učinimo još boljim? Posjetite <0>Crowdin</0> za više detalja."
#: src/components/routes/settings/notifications.tsx:124
msgid "Webhook / Push notifications"
msgstr "Webhook / Push obavijest"
#. Disk write
#: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:69
msgid "Write"
msgstr "Piši"
#: src/components/routes/settings/layout.tsx:61
msgid "YAML Config"
msgstr "YAML Config"
#: src/components/routes/settings/config-yaml.tsx:45
msgid "YAML Configuration"
msgstr "YAML Konfiguracija"
#: src/components/routes/settings/layout.tsx:34
msgid "Your user settings have been updated."
msgstr "Vaše korisničke postavke su ažurirane."

View File

@@ -1,23 +1,28 @@
msgid "" msgid ""
msgstr "" msgstr ""
"POT-Creation-Date: 2024-11-02 12:19-0400\n" "POT-Creation-Date: 2024-11-01 11:30-0400\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n" "X-Generator: @lingui/cli\n"
"Language: it\n" "Language: it\n"
"Project-Id-Version: \n" "Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: \n" "PO-Revision-Date: 2024-12-17 21:36\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: Italian\n"
"Plural-Forms: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: beszel\n"
"X-Crowdin-Project-ID: 733311\n"
"X-Crowdin-Language: it\n"
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# giorno} other {# giorni}}" msgstr "{0, plural, one {# giorno} other {# giorni}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# ora} other {# ore}}" msgstr "{hours, plural, one {# ora} other {# ore}}"
@@ -42,24 +47,27 @@ msgid "30 days"
msgstr "30 giorni" msgstr "30 giorni"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "Azioni" msgstr "Azioni"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "Avvisi Attivi" msgstr "Avvisi Attivi"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "Aggiungi <0>Sistema</0>" msgstr "Aggiungi <0>Sistema</0>"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "Aggiungi Nuovo Sistema" msgstr "Aggiungi Nuovo Sistema"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "Aggiungi sistema" msgstr "Aggiungi sistema"
@@ -71,16 +79,15 @@ msgstr "Aggiungi URL"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "Regola le opzioni di visualizzazione per i grafici." msgstr "Regola le opzioni di visualizzazione per i grafici."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "Amministratore" msgstr "Amministratore"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "Agente" msgstr "Agente"
@@ -90,50 +97,53 @@ msgid "Alerts"
msgstr "Avvisi" msgstr "Avvisi"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "Tutti i Sistemi" msgstr "Tutti i Sistemi"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Sei sicuro di voler eliminare {name}?" msgstr "Sei sicuro di voler eliminare {name}?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "Provider di Autenticazione"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "La copia automatica richiede un contesto sicuro." msgstr "La copia automatica richiede un contesto sicuro."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "Media" msgstr "Media"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "Utilizzo medio della CPU dei container" msgstr "Utilizzo medio della CPU dei container"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "La media supera <0>{value}{0}</0>" msgstr "La media supera <0>{value}{0}</0>"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr ""
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "Utilizzo medio della CPU a livello di sistema" msgstr "Utilizzo medio della CPU a livello di sistema"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr ""
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "Backup" msgstr "Backup"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "Larghezza di banda" msgstr "Larghezza di banda"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel supporta OpenID Connect e molti provider di autenticazione OAuth2." msgstr "Beszel supporta OpenID Connect e molti provider di autenticazione OAuth2."
@@ -141,7 +151,7 @@ msgstr "Beszel supporta OpenID Connect e molti provider di autenticazione OAuth2
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel utilizza <0>Shoutrrr</0> per integrarsi con i servizi di notifica popolari." msgstr "Beszel utilizza <0>Shoutrrr</0> per integrarsi con i servizi di notifica popolari."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "Binario" msgstr "Binario"
@@ -149,7 +159,7 @@ msgstr "Binario"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "Cache / Buffer" msgstr "Cache / Buffer"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "Annulla" msgstr "Annulla"
@@ -177,15 +187,10 @@ msgstr "Controlla i log per maggiori dettagli."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Controlla il tuo servizio di notifica" msgstr "Controlla il tuo servizio di notifica"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "Clicca per copiare" msgstr "Clicca per copiare"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "Colonne"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -195,12 +200,12 @@ msgstr "Istruzioni da riga di comando"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "Configura come ricevere le notifiche di avviso." msgstr "Configura come ricevere le notifiche di avviso."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "Conferma password" msgstr "Conferma password"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "Continua" msgstr "Continua"
@@ -208,15 +213,15 @@ msgstr "Continua"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Copiato negli appunti" msgstr "Copiato negli appunti"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "Copia" msgstr "Copia"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "Copia host" msgstr "Copia host"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copia comando Linux" msgstr "Copia comando Linux"
@@ -224,17 +229,17 @@ msgstr "Copia comando Linux"
msgid "Copy text" msgid "Copy text"
msgstr "Copia testo" msgstr "Copia testo"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "Utilizzo CPU" msgstr "Utilizzo CPU"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "Crea account" msgstr "Crea account"
@@ -243,8 +248,8 @@ msgstr "Crea account"
msgid "Dark" msgid "Dark"
msgstr "Scuro" msgstr "Scuro"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "Cruscotto" msgstr "Cruscotto"
@@ -252,49 +257,45 @@ msgstr "Cruscotto"
msgid "Default time period" msgid "Default time period"
msgstr "Periodo di tempo predefinito" msgstr "Periodo di tempo predefinito"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "Elimina" msgstr "Elimina"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "Disco" msgstr "Disco"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "I/O Disco" msgstr "I/O Disco"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "Utilizzo Disco" msgstr "Utilizzo Disco"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "Utilizzo del disco di {extraFsName}" msgstr "Utilizzo del disco di {extraFsName}"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Utilizzo CPU Docker" msgstr "Utilizzo CPU Docker"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Utilizzo Memoria Docker" msgstr "Utilizzo Memoria Docker"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "I/O di Rete Docker" msgstr "I/O di Rete Docker"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "Documentazione" msgstr "Documentazione"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "email"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
@@ -303,7 +304,7 @@ msgstr "Email"
msgid "Email notifications" msgid "Email notifications"
msgstr "Notifiche email" msgstr "Notifiche email"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "Inserisci l'indirizzo email per reimpostare la password" msgstr "Inserisci l'indirizzo email per reimpostare la password"
@@ -311,13 +312,13 @@ msgstr "Inserisci l'indirizzo email per reimpostare la password"
msgid "Enter email address..." msgid "Enter email address..."
msgstr "Inserisci l'indirizzo email..." msgstr "Inserisci l'indirizzo email..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "Errore" msgstr "Errore"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Supera {0}{1} negli ultimi {2, plural, one {# minuto} other {# minuti}}" msgstr "Supera {0}{1} negli ultimi {2, plural, one {# minuto} other {# minuti}}"
@@ -346,20 +347,20 @@ msgstr "Salvataggio delle impostazioni fallito"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "Invio della notifica di test fallito" msgstr "Invio della notifica di test fallito"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Aggiornamento dell'avviso fallito" msgstr "Aggiornamento dell'avviso fallito"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "Filtra..." msgstr "Filtra..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Per <0>{min}</0> {min, plural, one {minuto} other {minuti}}" msgstr "Per <0>{min}</0> {min, plural, one {minuto} other {minuti}}"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Password dimenticata?" msgstr "Password dimenticata?"
@@ -369,7 +370,15 @@ msgstr "Password dimenticata?"
msgid "General" msgid "General"
msgstr "Generale" msgstr "Generale"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr ""
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Griglia"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "Host / IP" msgstr "Host / IP"
@@ -382,7 +391,7 @@ msgid "Invalid email address."
msgstr "Indirizzo email non valido." msgstr "Indirizzo email non valido."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "Kernel" msgstr "Kernel"
@@ -390,26 +399,30 @@ msgstr "Kernel"
msgid "Language" msgid "Language"
msgstr "Lingua" msgstr "Lingua"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr ""
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "Chiaro" msgstr "Chiaro"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "Disconnetti" msgstr "Disconnetti"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "Accedi" msgstr "Accedi"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "Tentativo di accesso fallito" msgstr "Tentativo di accesso fallito"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "Log" msgstr "Log"
@@ -422,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "Gestisci le preferenze di visualizzazione e notifica." msgstr "Gestisci le preferenze di visualizzazione e notifica."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "Max 1 min" msgstr "Max 1 min"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "Memoria" msgstr "Memoria"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "Utilizzo Memoria" msgstr "Utilizzo Memoria"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "Utilizzo della memoria dei container Docker" msgstr "Utilizzo della memoria dei container Docker"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "Rete" msgstr "Rete"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "Traffico di rete dei container Docker" msgstr "Traffico di rete dei container Docker"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "Traffico di rete delle interfacce pubbliche" msgstr "Traffico di rete delle interfacce pubbliche"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "Nessun risultato trovato." msgstr "Nessun risultato trovato."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "Nessun sistema trovato." msgstr "Nessun sistema trovato."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "Notifiche" msgstr "Notifiche"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "Supporto OAuth 2 / OIDC" msgstr "Supporto OAuth 2 / OIDC"
@@ -477,11 +491,11 @@ msgstr "Supporto OAuth 2 / OIDC"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "Ad ogni riavvio, i sistemi nel database verranno aggiornati per corrispondere ai sistemi definiti nel file." msgstr "Ad ogni riavvio, i sistemi nel database verranno aggiornati per corrispondere ai sistemi definiti nel file."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "Apri menu" msgstr "Apri menu"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "Oppure continua con" msgstr "Oppure continua con"
@@ -489,28 +503,28 @@ msgstr "Oppure continua con"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "Sovrascrivi avvisi esistenti" msgstr "Sovrascrivi avvisi esistenti"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "Pagina" msgstr "Pagina"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "Pagine / Impostazioni" msgstr "Pagine / Impostazioni"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "La password deve essere di almeno 10 caratteri." msgstr "La password deve contenere almeno 8 caratteri."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "Richiesta di reimpostazione password ricevuta" msgstr "Richiesta di reimpostazione password ricevuta"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "Pausa" msgstr "Pausa"
@@ -518,20 +532,20 @@ msgstr "Pausa"
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."
msgstr "Si prega di <0>configurare un server SMTP</0> per garantire la consegna degli avvisi." msgstr "Si prega di <0>configurare un server SMTP</0> per garantire la consegna degli avvisi."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "Si prega di controllare i log per maggiori dettagli." msgstr "Si prega di controllare i log per maggiori dettagli."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "Si prega di controllare le credenziali e riprovare" msgstr "Si prega di controllare le credenziali e riprovare"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "Si prega di creare un account amministratore" msgstr "Si prega di creare un account amministratore"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "Si prega di abilitare i pop-up per questo sito" msgstr "Si prega di abilitare i pop-up per questo sito"
@@ -539,35 +553,40 @@ msgstr "Si prega di abilitare i pop-up per questo sito"
msgid "Please log in again" msgid "Please log in again"
msgstr "Si prega di accedere nuovamente" msgstr "Si prega di accedere nuovamente"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "Si prega di consultare <0>la documentazione</0> per le istruzioni." msgstr "Si prega di consultare <0>la documentazione</0> per le istruzioni."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "Si prega di accedere al proprio account" msgstr "Si prega di accedere al proprio account"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "Porta" msgstr "Porta"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Utilizzo preciso al momento registrato"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "Lingua Preferita" msgstr "Lingua Preferita"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "Chiave Pub" msgstr "Chiave Pub"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "Lettura" msgstr "Lettura"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "Ricevuto" msgstr "Ricevuto"
@@ -575,7 +594,7 @@ msgstr "Ricevuto"
msgid "Reset Password" msgid "Reset Password"
msgstr "Reimposta Password" msgstr "Reimposta Password"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "Riprendi" msgstr "Riprendi"
@@ -588,11 +607,11 @@ msgstr "Salva l'indirizzo usando il tasto invio o la virgola. Lascia vuoto per d
msgid "Save Settings" msgid "Save Settings"
msgstr "Salva Impostazioni" msgstr "Salva Impostazioni"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "Cerca" msgstr "Cerca"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "Cerca sistemi o impostazioni..." msgstr "Cerca sistemi o impostazioni..."
@@ -600,8 +619,8 @@ msgstr "Cerca sistemi o impostazioni..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Vedi <0>impostazioni di notifica</0> per configurare come ricevere gli avvisi." msgstr "Vedi <0>impostazioni di notifica</0> per configurare come ricevere gli avvisi."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "Inviato" msgstr "Inviato"
@@ -609,9 +628,9 @@ msgstr "Inviato"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "Imposta l'intervallo di tempo predefinito per i grafici quando viene visualizzato un sistema." msgstr "Imposta l'intervallo di tempo predefinito per i grafici quando viene visualizzato un sistema."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -621,34 +640,40 @@ msgstr "Impostazioni"
msgid "Settings saved" msgid "Settings saved"
msgstr "Impostazioni salvate" msgstr "Impostazioni salvate"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "Accedi" msgstr "Accedi"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "Impostazioni SMTP" msgstr "Impostazioni SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Ordina per"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "Stato" msgstr "Stato"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "Spazio di swap utilizzato dal sistema" msgstr "Spazio di swap utilizzato dal sistema"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "Utilizzo Swap" msgstr "Utilizzo Swap"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "Sistemi" msgstr "Sistemi"
@@ -656,12 +681,16 @@ msgstr "Sistemi"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "I sistemi possono essere gestiti in un file <0>config.yml</0> all'interno della tua directory dati." msgstr "I sistemi possono essere gestiti in un file <0>config.yml</0> all'interno della tua directory dati."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabella"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "Temperatura" msgstr "Temperatura"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "Temperature dei sensori di sistema" msgstr "Temperature dei sensori di sistema"
@@ -673,11 +702,11 @@ msgstr "Test <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "Notifica di test inviata" msgstr "Notifica di test inviata"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il comando di installazione per l'agente qui sotto." msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il comando di installazione per l'agente qui sotto."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il<0>docker-compose.yml</0> per l'agente qui sotto." msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il<0>docker-compose.yml</0> per l'agente qui sotto."
@@ -685,15 +714,15 @@ msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Quindi accedi al backend e reimposta la password del tuo account utente nella tabella degli utenti." msgstr "Quindi accedi al backend e reimposta la password del tuo account utente nella tabella degli utenti."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Questa azione non può essere annullata. Questo eliminerà permanentemente tutti i record attuali per {name} dal database." msgstr "Questa azione non può essere annullata. Questo eliminerà permanentemente tutti i record attuali per {name} dal database."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "Throughput di {extraFsName}" msgstr "Throughput di {extraFsName}"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "Throughput del filesystem root" msgstr "Throughput del filesystem root"
@@ -701,8 +730,8 @@ msgstr "Throughput del filesystem root"
msgid "To email(s)" msgid "To email(s)"
msgstr "A email(s)" msgstr "A email(s)"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "Attiva/disattiva griglia" msgstr "Attiva/disattiva griglia"
@@ -726,10 +755,6 @@ msgstr "Attiva quando l'utilizzo della CPU supera una soglia"
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "Attiva quando l'utilizzo della memoria supera una soglia" msgstr "Attiva quando l'utilizzo della memoria supera una soglia"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "Attiva quando l'utilizzo della memoria supera una soglia."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "Attiva quando lo stato passa tra up e down" msgstr "Attiva quando lo stato passa tra up e down"
@@ -738,41 +763,44 @@ msgstr "Attiva quando lo stato passa tra up e down"
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Attiva quando l'utilizzo di un disco supera una soglia" msgstr "Attiva quando l'utilizzo di un disco supera una soglia"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "Aggiornato in tempo reale. Clicca su un sistema per visualizzare le informazioni." msgstr "Aggiornato in tempo reale. Clicca su un sistema per visualizzare le informazioni."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "Tempo di attività" msgstr "Tempo di attività"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "Utilizzo" msgstr "Utilizzo"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "Utilizzo della partizione root" msgstr "Utilizzo della partizione root"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "Utilizzato" msgstr "Utilizzato"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "nome utente"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "Nome utente"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "Utenti" msgstr "Utenti"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Vista"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Colonne visibili"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "In attesa di abbastanza record da visualizzare" msgstr "In attesa di abbastanza record da visualizzare"
@@ -784,9 +812,9 @@ msgstr "Vuoi aiutarci a migliorare ulteriormente le nostre traduzioni? Dai un'oc
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Notifiche Webhook / Push" msgstr "Notifiche Webhook / Push"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "Scrittura" msgstr "Scrittura"

File diff suppressed because one or more lines are too long

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: 2024-11-02 03:24\n" "PO-Revision-Date: 2024-12-17 21: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"
@@ -18,11 +18,11 @@ msgstr ""
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n" "X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n" "X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# 日} other {# 日}}" msgstr "{0, plural, one {# 日} other {# 日}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# 時間} other {# 時間}}" msgstr "{hours, plural, one {# 時間} other {# 時間}}"
@@ -47,24 +47,27 @@ msgid "30 days"
msgstr "30日間" msgstr "30日間"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "アクション" msgstr "アクション"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "アクティブなアラート" msgstr "アクティブなアラート"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "<0>システム</0>を追加" msgstr "<0>システム</0>を追加"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "新しいシステムを追加" msgstr "新しいシステムを追加"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "システムを追加" msgstr "システムを追加"
@@ -76,16 +79,15 @@ msgstr "URLを追加"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "チャートの表示オプションを調整します。" msgstr "チャートの表示オプションを調整します。"
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "管理者" msgstr "管理者"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "代理" msgstr "代理"
@@ -95,50 +97,53 @@ msgid "Alerts"
msgstr "アラート" msgstr "アラート"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "すべてのシステム" msgstr "すべてのシステム"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "{name}を削除してもよろしいですか?" msgstr "{name}を削除してもよろしいですか?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "認証プロバイダー"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "自動コピーには安全なコンテキストが必要です。" msgstr "自動コピーには安全なコンテキストが必要です。"
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "平均" msgstr "平均"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "コンテナの平均CPU使用率" msgstr "コンテナの平均CPU使用率"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "平均が<0>{value}{0}</0>を超えています" msgstr "平均が<0>{value}{0}</0>を超えています"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr ""
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "システム全体の平均CPU使用率" msgstr "システム全体の平均CPU使用率"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr ""
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "バックアップ" msgstr "バックアップ"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "帯域幅" msgstr "帯域幅"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
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 "BeszelはOpenID Connectと多くのOAuth2認証プロバイダーをサポートしています。"
@@ -146,7 +151,7 @@ msgstr "BeszelはOpenID Connectと多くのOAuth2認証プロバイダーをサ
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszelは<0>Shoutrrr</0>を使用して、人気のある通知サービスと統合します。" msgstr "Beszelは<0>Shoutrrr</0>を使用して、人気のある通知サービスと統合します。"
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "バイナリ" msgstr "バイナリ"
@@ -154,7 +159,7 @@ msgstr "バイナリ"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "キャッシュ / バッファ" msgstr "キャッシュ / バッファ"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "キャンセル" msgstr "キャンセル"
@@ -182,15 +187,10 @@ msgstr "詳細についてはログを確認してください。"
msgid "Check your notification service" msgid "Check your notification service"
msgstr "通知サービスを確認してください" msgstr "通知サービスを確認してください"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "クリックしてコピー" msgstr "クリックしてコピー"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "列"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -200,12 +200,12 @@ msgstr "コマンドラインの指示"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "アラート通知の受信方法を設定します。" msgstr "アラート通知の受信方法を設定します。"
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "パスワードを確認" msgstr "パスワードを確認"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "続行" msgstr "続行"
@@ -213,15 +213,15 @@ msgstr "続行"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "クリップボードにコピーされました" msgstr "クリップボードにコピーされました"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "コピー" msgstr "コピー"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "ホストをコピー" msgstr "ホストをコピー"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Linuxコマンドをコピー" msgstr "Linuxコマンドをコピー"
@@ -229,17 +229,17 @@ msgstr "Linuxコマンドをコピー"
msgid "Copy text" msgid "Copy text"
msgstr "テキストをコピー" msgstr "テキストをコピー"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "CPU使用率" msgstr "CPU使用率"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "アカウントを作成" msgstr "アカウントを作成"
@@ -248,8 +248,8 @@ msgstr "アカウントを作成"
msgid "Dark" msgid "Dark"
msgstr "ダーク" msgstr "ダーク"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "ダッシュボード" msgstr "ダッシュボード"
@@ -257,49 +257,45 @@ msgstr "ダッシュボード"
msgid "Default time period" msgid "Default time period"
msgstr "デフォルトの期間" msgstr "デフォルトの期間"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "削除" msgstr "削除"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "ディスク" msgstr "ディスク"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "ディスクI/O" msgstr "ディスクI/O"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "ディスク使用率" msgstr "ディスク使用率"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "{extraFsName}のディスク使用率" msgstr "{extraFsName}のディスク使用率"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Docker CPU使用率" msgstr "Docker CPU使用率"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Dockerメモリ使用率" msgstr "Dockerメモリ使用率"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "DockerネットワークI/O" msgstr "DockerネットワークI/O"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "ドキュメント" msgstr "ドキュメント"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "メール"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "メール" msgstr "メール"
@@ -308,7 +304,7 @@ msgstr "メール"
msgid "Email notifications" msgid "Email notifications"
msgstr "メール通知" msgstr "メール通知"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "パスワードをリセットするためにメールアドレスを入力してください" msgstr "パスワードをリセットするためにメールアドレスを入力してください"
@@ -316,13 +312,13 @@ msgstr "パスワードをリセットするためにメールアドレスを入
msgid "Enter email address..." msgid "Enter email address..."
msgstr "メールアドレスを入力..." msgstr "メールアドレスを入力..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "エラー" msgstr "エラー"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "過去{2, plural, one {# 分} other {# 分}}で{0}{1}を超えています" msgstr "過去{2, plural, one {# 分} other {# 分}}で{0}{1}を超えています"
@@ -351,20 +347,20 @@ msgstr "設定の保存に失敗しました"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "テスト通知の送信に失敗しました" msgstr "テスト通知の送信に失敗しました"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "アラートの更新に失敗しました" msgstr "アラートの更新に失敗しました"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "フィルター..." msgstr "フィルター..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "<0>{min}</0> {min, plural, one {分} other {分}}の間" msgstr "<0>{min}</0> {min, plural, one {分} other {分}}の間"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "パスワードをお忘れですか?" msgstr "パスワードをお忘れですか?"
@@ -374,7 +370,15 @@ msgstr "パスワードをお忘れですか?"
msgid "General" msgid "General"
msgstr "一般" msgstr "一般"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr ""
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "グリッド"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "ホスト / IP" msgstr "ホスト / IP"
@@ -387,7 +391,7 @@ msgid "Invalid email address."
msgstr "無効なメールアドレスです。" msgstr "無効なメールアドレスです。"
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "カーネル" msgstr "カーネル"
@@ -395,26 +399,30 @@ msgstr "カーネル"
msgid "Language" msgid "Language"
msgstr "言語" msgstr "言語"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "レイアウト"
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "ライト" msgstr "ライト"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "ログアウト" msgstr "ログアウト"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "ログイン" msgstr "ログイン"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "ログイン試行に失敗しました" msgstr "ログイン試行に失敗しました"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "ログ" msgstr "ログ"
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "表示と通知の設定を管理します。" msgstr "表示と通知の設定を管理します。"
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "最大1分" msgstr "最大1分"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "メモリ" msgstr "メモリ"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "メモリ使用率" msgstr "メモリ使用率"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "Dockerコンテナのメモリ使用率" msgstr "Dockerコンテナのメモリ使用率"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "名前" msgstr "名前"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "帯域" msgstr "帯域"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "Dockerコンテナのネットワークトラフィック" msgstr "Dockerコンテナのネットワークトラフィック"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "パブリックインターフェースのネットワークトラフィック" msgstr "パブリックインターフェースのネットワークトラフィック"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "結果が見つかりませんでした。" msgstr "結果が見つかりませんでした。"
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "システムが見つかりませんでした。" msgstr "システムが見つかりませんでした。"
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "通知" msgstr "通知"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "OAuth 2 / OIDCサポート" msgstr "OAuth 2 / OIDCサポート"
@@ -482,11 +491,11 @@ msgstr "OAuth 2 / OIDCサポート"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "再起動のたびに、データベース内のシステムはファイルに定義されたシステムに一致するように更新されます。" msgstr "再起動のたびに、データベース内のシステムはファイルに定義されたシステムに一致するように更新されます。"
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "メニューを開く" msgstr "メニューを開く"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "または続行" msgstr "または続行"
@@ -494,28 +503,28 @@ msgstr "または続行"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "既存のアラートを上書き" msgstr "既存のアラートを上書き"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "ページ" msgstr "ページ"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "ページ / 設定" msgstr "ページ / 設定"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "パスワード" msgstr "パスワード"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "パスワードは10文字以上でなければなりません。" msgstr "パスワードは8文字以上である必要があります。"
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "パスワードリセットのリクエストを受け取りました" msgstr "パスワードリセットのリクエストを受け取りました"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "一時停止" msgstr "一時停止"
@@ -523,20 +532,20 @@ msgstr "一時停止"
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."
msgstr "アラートが配信されるように<0>SMTPサーバーを設定</0>してください。" msgstr "アラートが配信されるように<0>SMTPサーバーを設定</0>してください。"
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "詳細についてはログを確認してください。" msgstr "詳細についてはログを確認してください。"
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "資格情報を確認して再試行してください" msgstr "資格情報を確認して再試行してください"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "管理者アカウントを作成してください" msgstr "管理者アカウントを作成してください"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "このサイトのポップアップを有効にしてください" msgstr "このサイトのポップアップを有効にしてください"
@@ -544,35 +553,40 @@ msgstr "このサイトのポップアップを有効にしてください"
msgid "Please log in again" msgid "Please log in again"
msgstr "再度ログインしてください" msgstr "再度ログインしてください"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "手順については<0>ドキュメント</0>を参照してください。" msgstr "手順については<0>ドキュメント</0>を参照してください。"
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "アカウントにサインインしてください" msgstr "アカウントにサインインしてください"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "ポート" msgstr "ポート"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "記録された時点での正確な利用"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "優先言語" msgstr "優先言語"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "公開鍵" msgstr "公開鍵"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "読み取り" msgstr "読み取り"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "受信" msgstr "受信"
@@ -580,7 +594,7 @@ msgstr "受信"
msgid "Reset Password" msgid "Reset Password"
msgstr "パスワードをリセット" msgstr "パスワードをリセット"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "再開" msgstr "再開"
@@ -593,11 +607,11 @@ msgstr "Enterキーまたはカンマを使用してアドレスを保存しま
msgid "Save Settings" msgid "Save Settings"
msgstr "設定を保存" msgstr "設定を保存"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "検索" msgstr "検索"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "システムまたは設定を検索..." msgstr "システムまたは設定を検索..."
@@ -605,8 +619,8 @@ msgstr "システムまたは設定を検索..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "アラートの受信方法を設定するには<0>通知設定</0>を参照してください。" msgstr "アラートの受信方法を設定するには<0>通知設定</0>を参照してください。"
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "送信" msgstr "送信"
@@ -614,9 +628,9 @@ msgstr "送信"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "システムを表示する際のチャートのデフォルトの時間範囲を設定します。" msgstr "システムを表示する際のチャートのデフォルトの時間範囲を設定します。"
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -626,34 +640,40 @@ msgstr "設定"
msgid "Settings saved" msgid "Settings saved"
msgstr "設定が保存されました" msgstr "設定が保存されました"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "サインイン" msgstr "サインイン"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "SMTP設定" msgstr "SMTP設定"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "並び替え基準"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "ステータス" msgstr "ステータス"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "システムが使用するスワップ領域" msgstr "システムが使用するスワップ領域"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "スワップ使用量" msgstr "スワップ使用量"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "システム" msgstr "システム"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "システム" msgstr "システム"
@@ -661,12 +681,16 @@ msgstr "システム"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "システムはデータディレクトリ内の<0>config.yml</0>ファイルで管理できます。" msgstr "システムはデータディレクトリ内の<0>config.yml</0>ファイルで管理できます。"
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "テーブル"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "温度" msgstr "温度"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "システムセンサーの温度" msgstr "システムセンサーの温度"
@@ -678,11 +702,11 @@ msgstr "テスト<0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "テスト通知が送信されました" msgstr "テスト通知が送信されました"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "接続するにはエージェントがシステム上で実行されている必要があります。以下のエージェントのインストールコマンドをコピーしてください。" msgstr "接続するにはエージェントがシステム上で実行されている必要があります。以下のエージェントのインストールコマンドをコピーしてください。"
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "接続するにはエージェントがシステム上で実行されている必要があります。以下のエージェント用<0>docker-compose.yml</0>をコピーしてください。" msgstr "接続するにはエージェントがシステム上で実行されている必要があります。以下のエージェント用<0>docker-compose.yml</0>をコピーしてください。"
@@ -690,15 +714,15 @@ msgstr "接続するにはエージェントがシステム上で実行されて
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "その後、バックエンドにログインして、ユーザーテーブルでユーザーアカウントのパスワードをリセットしてください。" msgstr "その後、バックエンドにログインして、ユーザーテーブルでユーザーアカウントのパスワードをリセットしてください。"
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "この操作は元に戻せません。これにより、データベースから{name}のすべての現在のレコードが永久に削除されます。" msgstr "この操作は元に戻せません。これにより、データベースから{name}のすべての現在のレコードが永久に削除されます。"
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "{extraFsName}のスループット" msgstr "{extraFsName}のスループット"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "ルートファイルシステムのスループット" msgstr "ルートファイルシステムのスループット"
@@ -706,8 +730,8 @@ msgstr "ルートファイルシステムのスループット"
msgid "To email(s)" msgid "To email(s)"
msgstr "メール宛" msgstr "メール宛"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "グリッドを切り替え" msgstr "グリッドを切り替え"
@@ -731,10 +755,6 @@ msgstr "CPU使用率がしきい値を超えたときにトリガーされます
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "メモリ使用率がしきい値を超えたときにトリガーされます" msgstr "メモリ使用率がしきい値を超えたときにトリガーされます"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "メモリ使用率がしきい値を超えたときにトリガーされます。"
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "ステータスが上から下に切り替わるときにトリガーされます" msgstr "ステータスが上から下に切り替わるときにトリガーされます"
@@ -743,41 +763,44 @@ msgstr "ステータスが上から下に切り替わるときにトリガーさ
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "ディスクの使用量がしきい値を超えたときにトリガーされます" msgstr "ディスクの使用量がしきい値を超えたときにトリガーされます"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "リアルタイムで更新されます。システムをクリックして情報を表示します。" msgstr "リアルタイムで更新されます。システムをクリックして情報を表示します。"
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "稼働時間" msgstr "稼働時間"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "使用量" msgstr "使用量"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "ルートパーティションの使用量" msgstr "ルートパーティションの使用量"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "使用済み" msgstr "使用済み"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "ユーザー名"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "ユーザー名"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "ユーザー" msgstr "ユーザー"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "表示"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "表示列"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "表示するのに十分なレコードを待っています" msgstr "表示するのに十分なレコードを待っています"
@@ -789,9 +812,9 @@ msgstr "翻訳をさらに良くするためにご協力いただけますか?
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Webhook / プッシュ通知" msgstr "Webhook / プッシュ通知"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "書き込み" msgstr "書き込み"

File diff suppressed because one or more lines are too long

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: 2024-11-02 02:14\n" "PO-Revision-Date: 2024-12-17 21: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"
@@ -18,11 +18,11 @@ msgstr ""
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n" "X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n" "X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# 일} other {# 일}}" msgstr "{0, plural, one {# 일} other {# 일}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# 시간} other {# 시간}}" msgstr "{hours, plural, one {# 시간} other {# 시간}}"
@@ -47,24 +47,27 @@ msgid "30 days"
msgstr "30일" msgstr "30일"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "작업" msgstr "작업"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "활성 경고" msgstr "활성 경고"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "<0>시스템</0> 추가" msgstr "<0>시스템</0> 추가"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "새 시스템 추가" msgstr "새 시스템 추가"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "시스템 추가" msgstr "시스템 추가"
@@ -76,16 +79,15 @@ msgstr "URL 추가"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "차트의 표시 옵션 조정." msgstr "차트의 표시 옵션 조정."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "관리자" msgstr "관리자"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "에이젠" msgstr "에이젠"
@@ -95,50 +97,53 @@ msgid "Alerts"
msgstr "경고" msgstr "경고"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "모든 시스템" msgstr "모든 시스템"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "{name}을(를) 삭제하시겠습니까?" msgstr "{name}을(를) 삭제하시겠습니까?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "인증 제공자"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "자동 복사는 안전한 컨텍스트가 필요합니다." msgstr "자동 복사는 안전한 컨텍스트가 필요합니다."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "평균" msgstr "평균"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "컨테이너의 평균 CPU 사용량" msgstr "컨테이너의 평균 CPU 사용량"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "평균이 <0>{value}{0}</0>을 초과합니다" msgstr "평균이 <0>{value}{0}</0>을 초과합니다"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr ""
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "시스템 전체의 평균 CPU 사용량" msgstr "시스템 전체의 평균 CPU 사용량"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr ""
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "백업" msgstr "백업"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "대역폭" msgstr "대역폭"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
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 "Beszel은 OpenID Connect 및 많은 OAuth2 인증 제공자를 지원합니다."
@@ -146,7 +151,7 @@ msgstr "Beszel은 OpenID Connect 및 많은 OAuth2 인증 제공자를 지원합
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel은 <0>Shoutrrr</0>을 사용하여 인기 있는 알림 서비스와 통합합니다." msgstr "Beszel은 <0>Shoutrrr</0>을 사용하여 인기 있는 알림 서비스와 통합합니다."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "이진" msgstr "이진"
@@ -154,7 +159,7 @@ msgstr "이진"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "캐시 / 버퍼" msgstr "캐시 / 버퍼"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "취소" msgstr "취소"
@@ -182,15 +187,10 @@ msgstr "자세한 내용은 로그를 확인하세요."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "알림 서비스를 확인하세요." msgstr "알림 서비스를 확인하세요."
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "클릭하여 복사" msgstr "클릭하여 복사"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "열"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -200,12 +200,12 @@ msgstr "명령줄 지침"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "경고 알림을 받는 방법을 구성하세요." msgstr "경고 알림을 받는 방법을 구성하세요."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "비밀번호 확인" msgstr "비밀번호 확인"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "계속" msgstr "계속"
@@ -213,15 +213,15 @@ msgstr "계속"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "클립보드에 복사됨" msgstr "클립보드에 복사됨"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "복사" msgstr "복사"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "호스트 복사" msgstr "호스트 복사"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "리눅스 명령 복사" msgstr "리눅스 명령 복사"
@@ -229,17 +229,17 @@ msgstr "리눅스 명령 복사"
msgid "Copy text" msgid "Copy text"
msgstr "텍스트 복사" msgstr "텍스트 복사"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "CPU 사용량" msgstr "CPU 사용량"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "계정 생성" msgstr "계정 생성"
@@ -248,8 +248,8 @@ msgstr "계정 생성"
msgid "Dark" msgid "Dark"
msgstr "어두운" msgstr "어두운"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "대시보드" msgstr "대시보드"
@@ -257,49 +257,45 @@ msgstr "대시보드"
msgid "Default time period" msgid "Default time period"
msgstr "기본 시간 기간" msgstr "기본 시간 기간"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "삭제" msgstr "삭제"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "디스크" msgstr "디스크"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "디스크 I/O" msgstr "디스크 I/O"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "디스크 사용량" msgstr "디스크 사용량"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "{extraFsName}의 디스크 사용량" msgstr "{extraFsName}의 디스크 사용량"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "도커 CPU 사용량" msgstr "도커 CPU 사용량"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "도커 메모리 사용량" msgstr "도커 메모리 사용량"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "도커 네트워크 I/O" msgstr "도커 네트워크 I/O"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "문서" msgstr "문서"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "이메일"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "이메일" msgstr "이메일"
@@ -308,7 +304,7 @@ msgstr "이메일"
msgid "Email notifications" msgid "Email notifications"
msgstr "이메일 알림" msgstr "이메일 알림"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "비밀번호를 재설정하려면 이메일 주소를 입력하세요" msgstr "비밀번호를 재설정하려면 이메일 주소를 입력하세요"
@@ -316,13 +312,13 @@ msgstr "비밀번호를 재설정하려면 이메일 주소를 입력하세요"
msgid "Enter email address..." msgid "Enter email address..."
msgstr "이메일 주소 입력..." msgstr "이메일 주소 입력..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "오류" msgstr "오류"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "마지막 {2, plural, one {# 분} other {# 분}} 동안 {0}{1} 초과" msgstr "마지막 {2, plural, one {# 분} other {# 분}} 동안 {0}{1} 초과"
@@ -351,20 +347,20 @@ msgstr "설정 저장 실패"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "테스트 알림 전송 실패" msgstr "테스트 알림 전송 실패"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "경고 업데이트 실패" msgstr "경고 업데이트 실패"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "필터..." msgstr "필터..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "<0>{min}</0> {min, plural, one {분} other {분}} 동안" msgstr "<0>{min}</0> {min, plural, one {분} other {분}} 동안"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "비밀번호를 잊으셨나요?" msgstr "비밀번호를 잊으셨나요?"
@@ -374,7 +370,15 @@ msgstr "비밀번호를 잊으셨나요?"
msgid "General" msgid "General"
msgstr "일반" msgstr "일반"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr ""
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "그리드"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "호스트 / IP" msgstr "호스트 / IP"
@@ -387,7 +391,7 @@ msgid "Invalid email address."
msgstr "잘못된 이메일 주소입니다." msgstr "잘못된 이메일 주소입니다."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "커널" msgstr "커널"
@@ -395,26 +399,30 @@ msgstr "커널"
msgid "Language" msgid "Language"
msgstr "언어" msgstr "언어"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "레이아웃"
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "밝은" msgstr "밝은"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "로그아웃" msgstr "로그아웃"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "로그인" msgstr "로그인"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "로그인 시도 실패" msgstr "로그인 시도 실패"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "로그" msgstr "로그"
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "디스플레이 및 알림 환경설정을 관리하세요." msgstr "디스플레이 및 알림 환경설정을 관리하세요."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "최대 1분" msgstr "최대 1분"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "메모리" msgstr "메모리"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "메모리 사용량" msgstr "메모리 사용량"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "도커 컨테이너의 메모리 사용량" msgstr "도커 컨테이너의 메모리 사용량"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "이름" msgstr "이름"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "네트" msgstr "네트"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "도커 컨테이너의 네트워크 트래픽" msgstr "도커 컨테이너의 네트워크 트래픽"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "공용 인터페이스의 네트워크 트래픽" msgstr "공용 인터페이스의 네트워크 트래픽"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "결과가 없습니다." msgstr "결과가 없습니다."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "시스템을 찾을 수 없습니다." msgstr "시스템을 찾을 수 없습니다."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "알림" msgstr "알림"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "OAuth 2 / OIDC 지원" msgstr "OAuth 2 / OIDC 지원"
@@ -482,11 +491,11 @@ msgstr "OAuth 2 / OIDC 지원"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "각 재시작 시, 데이터베이스의 시스템이 파일에 정의된 시스템과 일치하도록 업데이트됩니다." msgstr "각 재시작 시, 데이터베이스의 시스템이 파일에 정의된 시스템과 일치하도록 업데이트됩니다."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "메뉴 열기" msgstr "메뉴 열기"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "또는 계속하기" msgstr "또는 계속하기"
@@ -494,28 +503,28 @@ msgstr "또는 계속하기"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "기존 경고 덮어쓰기" msgstr "기존 경고 덮어쓰기"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "페이지" msgstr "페이지"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "페이지 / 설정" msgstr "페이지 / 설정"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "비밀번호" msgstr "비밀번호"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "비밀번호는 최소 10자 이상이어야 합니다." msgstr "비밀번호는 최소 8자 이상이어야 합니다."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "비밀번호 재설정 요청이 접수되었습니다" msgstr "비밀번호 재설정 요청이 접수되었습니다"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "일시 중지" msgstr "일시 중지"
@@ -523,20 +532,20 @@ msgstr "일시 중지"
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."
msgstr "경고가 전달되도록 <0>SMTP 서버를 구성</0>하세요." msgstr "경고가 전달되도록 <0>SMTP 서버를 구성</0>하세요."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "자세한 내용은 로그를 확인하세요." msgstr "자세한 내용은 로그를 확인하세요."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "자격 증명을 확인하고 다시 시도하세요." msgstr "자격 증명을 확인하고 다시 시도하세요."
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "관리자 계정을 생성하세요." msgstr "관리자 계정을 생성하세요."
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "이 사이트에 대한 팝업을 활성화하세요." msgstr "이 사이트에 대한 팝업을 활성화하세요."
@@ -544,35 +553,40 @@ msgstr "이 사이트에 대한 팝업을 활성화하세요."
msgid "Please log in again" msgid "Please log in again"
msgstr "다시 로그인하세요." msgstr "다시 로그인하세요."
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "지침은 <0>문서</0>를 참조하세요." msgstr "지침은 <0>문서</0>를 참조하세요."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "계정에 로그인하세요." msgstr "계정에 로그인하세요."
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "포트" msgstr "포트"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "기록된 시간의 정확한 사용량"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "선호 언어" msgstr "선호 언어"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "공개 키" msgstr "공개 키"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "읽기" msgstr "읽기"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "수신됨" msgstr "수신됨"
@@ -580,7 +594,7 @@ msgstr "수신됨"
msgid "Reset Password" msgid "Reset Password"
msgstr "비밀번호 재설정" msgstr "비밀번호 재설정"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "재개" msgstr "재개"
@@ -593,11 +607,11 @@ msgstr "Enter 키 또는 쉼표를 사용하여 주소를 저장하세요. 이
msgid "Save Settings" msgid "Save Settings"
msgstr "설정 저장" msgstr "설정 저장"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "검색" msgstr "검색"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "시스템 또는 설정 검색..." msgstr "시스템 또는 설정 검색..."
@@ -605,8 +619,8 @@ msgstr "시스템 또는 설정 검색..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "경고를 받는 방법을 구성하려면 <0>알림 설정</0>을 참조하세요." msgstr "경고를 받는 방법을 구성하려면 <0>알림 설정</0>을 참조하세요."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "보냄" msgstr "보냄"
@@ -614,9 +628,9 @@ msgstr "보냄"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "시스템을 볼 때 차트의 기본 시간 범위를 설정합니다." msgstr "시스템을 볼 때 차트의 기본 시간 범위를 설정합니다."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -626,34 +640,40 @@ msgstr "설정"
msgid "Settings saved" msgid "Settings saved"
msgstr "설정이 저장되었습니다." msgstr "설정이 저장되었습니다."
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "로그인" msgstr "로그인"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "SMTP 설정" msgstr "SMTP 설정"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "정렬 기준"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "상태" msgstr "상태"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "시스템에서 사용된 스왑 공간" msgstr "시스템에서 사용된 스왑 공간"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "스왑 사용량" msgstr "스왑 사용량"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "시스템" msgstr "시스템"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "시스템" msgstr "시스템"
@@ -661,12 +681,16 @@ msgstr "시스템"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "시스템은 데이터 디렉토리 내의 <0>config.yml</0> 파일에서 관리할 수 있습니다." msgstr "시스템은 데이터 디렉토리 내의 <0>config.yml</0> 파일에서 관리할 수 있습니다."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "테이블"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "온도" msgstr "온도"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "시스템 센서의 온도" msgstr "시스템 센서의 온도"
@@ -678,11 +702,11 @@ msgstr "테스트 <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "테스트 알림이 전송되었습니다." msgstr "테스트 알림이 전송되었습니다."
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습니다. 아래의 에이전트 설치 명령을 복사하세요." msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습니다. 아래의 에이전트 설치 명령을 복사하세요."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습니다. 아래의 <0>docker-compose.yml</0>을 복사하세요." msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습니다. 아래의 <0>docker-compose.yml</0>을 복사하세요."
@@ -690,15 +714,15 @@ msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "그런 다음 백엔드에 로그인하여 사용자 테이블에서 사용자 계정 비밀번호를 재설정하세요." msgstr "그런 다음 백엔드에 로그인하여 사용자 테이블에서 사용자 계정 비밀번호를 재설정하세요."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "이 작업은 되돌릴 수 없습니다. 데이터베이스에서 {name}에 대한 모든 현재 기록이 영구적으로 삭제됩니다." msgstr "이 작업은 되돌릴 수 없습니다. 데이터베이스에서 {name}에 대한 모든 현재 기록이 영구적으로 삭제됩니다."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "{extraFsName}의 처리량" msgstr "{extraFsName}의 처리량"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "루트 파일 시스템의 처리량" msgstr "루트 파일 시스템의 처리량"
@@ -706,8 +730,8 @@ msgstr "루트 파일 시스템의 처리량"
msgid "To email(s)" msgid "To email(s)"
msgstr "이메일로" msgstr "이메일로"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "그리드 전환" msgstr "그리드 전환"
@@ -731,10 +755,6 @@ msgstr "CPU 사용량이 임계값을 초과할 때 트리거됩니다."
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "메모리 사용량이 임계값을 초과할 때 트리거됩니다." msgstr "메모리 사용량이 임계값을 초과할 때 트리거됩니다."
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "메모리 사용량이 임계값을 초과할 때 트리거됩니다."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "상태가 상승과 하강 사이에서 전환될 때 트리거됩니다." msgstr "상태가 상승과 하강 사이에서 전환될 때 트리거됩니다."
@@ -743,41 +763,44 @@ msgstr "상태가 상승과 하강 사이에서 전환될 때 트리거됩니다
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "디스크 사용량이 임계값을 초과할 때 트리거됩니다." msgstr "디스크 사용량이 임계값을 초과할 때 트리거됩니다."
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "실시간으로 업데이트됩니다. 시스템을 클릭하여 정보를 확인하세요." msgstr "실시간으로 업데이트됩니다. 시스템을 클릭하여 정보를 확인하세요."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "가동 시간" msgstr "가동 시간"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "사용량" msgstr "사용량"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "루트 파티션의 사용량" msgstr "루트 파티션의 사용량"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "사용됨" msgstr "사용됨"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "사용자 이름"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "사용자 이름"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "사용자" msgstr "사용자"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "보기"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "표시 열"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "표시할 충분한 기록을 기다리는 중" msgstr "표시할 충분한 기록을 기다리는 중"
@@ -789,9 +812,9 @@ msgstr "번역을 더 좋게 만드는 데 도움을 주시겠습니까? 자세
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Webhook / 푸시 알림" msgstr "Webhook / 푸시 알림"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "쓰기" msgstr "쓰기"

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,831 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: nl\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-17 21:36\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: beszel\n"
"X-Crowdin-Project-ID: 733311\n"
"X-Crowdin-Language: nl\n"
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# dag} other {# dagen}}"
#: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# uur} other {# uren}}"
#: src/lib/utils.ts:139
msgid "1 hour"
msgstr "1 uur"
#: src/lib/utils.ts:162
msgid "1 week"
msgstr "1 week"
#: src/lib/utils.ts:147
msgid "12 hours"
msgstr "12 uren"
#: src/lib/utils.ts:155
msgid "24 hours"
msgstr "24 uren"
#: src/lib/utils.ts:170
msgid "30 days"
msgstr "30 dagen"
#. Table column
#: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions"
msgstr "Acties"
#: src/components/routes/home.tsx:61
msgid "Active Alerts"
msgstr "Actieve waarschuwingen"
#: src/components/add-system.tsx:78
msgid "Add <0>System</0>"
msgstr "Voeg <0>Systeem</0> toe"
#: src/components/add-system.tsx:87
msgid "Add New System"
msgstr "Nieuw systeem toevoegen"
#: src/components/add-system.tsx:165
#: src/components/add-system.tsx:176
msgid "Add system"
msgstr "Voeg systeem toe"
#: src/components/routes/settings/notifications.tsx:156
msgid "Add URL"
msgstr "Voeg URL toe"
#: src/components/routes/settings/general.tsx:81
msgid "Adjust display options for charts."
msgstr "Weergaveopties voor grafieken aanpassen."
#: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:188
msgid "Admin"
msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:201
msgid "Agent"
msgstr "Agent"
#: src/components/alerts/alert-button.tsx:32
#: src/components/alerts/alert-button.tsx:68
msgid "Alerts"
msgstr "Waarschuwingen"
#: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:266
msgid "All Systems"
msgstr "Alle systemen"
#: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?"
msgstr "Weet je zeker dat je {name} wilt verwijderen?"
#: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context."
msgstr "Automatisch kopiëren vereist een veilige context."
#: src/components/routes/system.tsx:625
msgid "Average"
msgstr "Gemiddelde"
#: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers"
msgstr "Gemiddeld CPU-gebruik van containers"
#: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>"
msgstr "Gemiddelde overschrijdt <0>{value}{0}</0>"
#: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Gemiddeld stroomverbruik van GPU's"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization"
msgstr "Gemiddeld systeembrede CPU-gebruik"
#: src/components/routes/system.tsx:515
msgid "Average utilization of {0}"
msgstr "Gemiddeld gebruik van {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups"
msgstr "Back-ups"
#: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307
msgid "Bandwidth"
msgstr "Bandbreedte"
#: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel ondersteunt OpenID Connect en vele OAuth2 authenticatieaanbieders."
#: src/components/routes/settings/notifications.tsx:127
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel gebruikt <0>Shoutrr</0> om te integreren met populaire meldingsdiensten."
#: src/components/add-system.tsx:92
msgid "Binary"
msgstr "Binair"
#: src/components/charts/mem-chart.tsx:89
msgid "Cache / Buffers"
msgstr "Cache / Buffers"
#: src/components/systems-table/systems-table.tsx:581
msgid "Cancel"
msgstr "Annuleren"
#: src/components/routes/settings/config-yaml.tsx:68
msgid "Caution - potential data loss"
msgstr "Opgelet - potentieel gegevensverlies"
#: src/components/routes/settings/general.tsx:36
msgid "Change general application options."
msgstr "Wijzig algemene applicatie opties."
#: src/components/routes/settings/general.tsx:78
msgid "Chart options"
msgstr "Grafiekopties"
#: src/components/login/forgot-pass-form.tsx:34
msgid "Check {email} for a reset link."
msgstr "Controleer {email} op een reset link."
#: src/components/routes/settings/layout.tsx:40
msgid "Check logs for more details."
msgstr "Controleer de logs voor meer details."
#: src/components/routes/settings/notifications.tsx:183
msgid "Check your notification service"
msgstr "Controleer je meldingsservice"
#: src/components/add-system.tsx:151
msgid "Click to copy"
msgstr "Klik om te kopiëren"
#: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions"
msgstr "Instructies voor de opdrachtregel"
#: src/components/routes/settings/notifications.tsx:77
msgid "Configure how you receive alert notifications."
msgstr "Configureer hoe je waarschuwingsmeldingen ontvangt."
#: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:170
msgid "Confirm password"
msgstr "Bevestig wachtwoord"
#: src/components/systems-table/systems-table.tsx:587
msgid "Continue"
msgstr "Volgende"
#: src/lib/utils.ts:25
msgid "Copied to clipboard"
msgstr "Gekopieerd naar het klembord"
#: src/components/add-system.tsx:162
msgid "Copy"
msgstr "Kopieer"
#: src/components/systems-table/systems-table.tsx:556
msgid "Copy host"
msgstr "Kopieer host"
#: src/components/add-system.tsx:173
msgid "Copy Linux command"
msgstr "Kopieer Linux-opdracht"
#: src/components/copy-to-clipboard.tsx:13
msgid "Copy text"
msgstr "Kopieer tekst"
#: src/components/systems-table/systems-table.tsx:157
msgid "CPU"
msgstr "CPU"
#: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289
msgid "CPU Usage"
msgstr "Processorgebruik"
#: src/components/login/auth-form.tsx:191
msgid "Create account"
msgstr "Account aanmaken"
#. Dark theme
#: src/components/mode-toggle.tsx:21
msgid "Dark"
msgstr "Donker"
#: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:34
msgid "Dashboard"
msgstr "Dashboard"
#: src/components/routes/settings/general.tsx:85
msgid "Default time period"
msgstr "Standaard tijdsduur"
#: src/components/systems-table/systems-table.tsx:562
msgid "Delete"
msgstr "Verwijderen"
#: src/components/systems-table/systems-table.tsx:173
msgid "Disk"
msgstr "Schijf"
#: src/components/routes/system.tsx:431
msgid "Disk I/O"
msgstr "Schijf I/O"
#: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301
msgid "Disk Usage"
msgstr "Schijfgebruik"
#: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}"
msgstr "Schijfgebruik van {extraFsName}"
#: src/components/routes/system.tsx:395
msgid "Docker CPU Usage"
msgstr "Docker CPU-gebruik"
#: src/components/routes/system.tsx:416
msgid "Docker Memory Usage"
msgstr "Docker geheugengebruik"
#: src/components/routes/system.tsx:457
msgid "Docker Network I/O"
msgstr "Docker netwerk I/O"
#: src/components/command-palette.tsx:124
msgid "Documentation"
msgstr "Documentatie"
#: src/components/login/auth-form.tsx:128
#: src/components/login/forgot-pass-form.tsx:53
msgid "Email"
msgstr "E-mail"
#: src/components/routes/settings/notifications.tsx:91
msgid "Email notifications"
msgstr "E-mailnotificaties"
#: src/components/login/login.tsx:38
msgid "Enter email address to reset password"
msgstr "Voer een e-mailadres in om het wachtwoord opnieuw in te stellen"
#: src/components/routes/settings/notifications.tsx:111
msgid "Enter email address..."
msgstr "Voer een e-mailadres in..."
#: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187
msgid "Error"
msgstr "Fout"
#: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Overschrijdt {0}{1} in de laatste {2, plural, one {# minuut} other {# minuten}}"
#: src/components/routes/settings/config-yaml.tsx:72
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
msgstr "Bestaande systemen die niet gedefinieerd zijn in <0>config.yml</0> zullen worden verwijderd. Maak regelmatige backups."
#: src/components/routes/settings/config-yaml.tsx:93
msgid "Export configuration"
msgstr "Configuratie exporteren"
#: src/components/routes/settings/config-yaml.tsx:48
msgid "Export your current systems configuration."
msgstr "Exporteer je huidige systeemconfiguratie."
#: src/lib/utils.ts:38
msgid "Failed to authenticate"
msgstr "Authenticatie mislukt"
#: src/components/routes/settings/layout.tsx:39
#: src/components/routes/settings/notifications.tsx:62
msgid "Failed to save settings"
msgstr "Instellingen opslaan mislukt"
#: src/components/routes/settings/notifications.tsx:188
msgid "Failed to send test notification"
msgstr "Versturen test notificatie mislukt"
#: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert"
msgstr "Bijwerken waarschuwing mislukt"
#: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:273
msgid "Filter..."
msgstr "Filter..."
#: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Voor <0>{min}</0> {min, plural, one {minuut} other {minuten}}"
#: src/components/login/auth-form.tsx:313
msgid "Forgot password?"
msgstr "Wachtwoord vergeten?"
#. Context: General settings
#: src/components/routes/settings/general.tsx:33
#: src/components/routes/settings/layout.tsx:51
msgid "General"
msgstr "Algemeen"
#: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "GPU stroomverbruik"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Raster"
#: src/components/add-system.tsx:120
msgid "Host / IP"
msgstr "Host / IP-adres"
#: src/components/login/forgot-pass-form.tsx:93
msgid "If you've lost the password to your admin account, you may reset it using the following command."
msgstr "Als je het wachtwoord voor je beheerdersaccount bent kwijtgeraakt, kan je het opnieuw instellen met behulp van de volgende opdracht."
#: src/components/login/auth-form.tsx:16
msgid "Invalid email address."
msgstr "Ongeldig e-mailadres."
#. Linux kernel
#: src/components/routes/system.tsx:262
msgid "Kernel"
msgstr "Kernel"
#: src/components/routes/settings/general.tsx:45
msgid "Language"
msgstr "Taal"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Indeling"
#. Light theme
#: src/components/mode-toggle.tsx:16
msgid "Light"
msgstr "Licht"
#: src/components/navbar.tsx:104
msgid "Log Out"
msgstr "Afmelden"
#: src/components/login/login.tsx:19
msgid "Login"
msgstr "Aanmelden"
#: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed"
msgstr "Aanmelding mislukt"
#: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:85
msgid "Logs"
msgstr "Logs"
#: src/components/routes/settings/notifications.tsx:80
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
msgstr "Zoek je waar je meldingen kunt aanmaken? Klik op de bel <0/> in de systeemtabel."
#: src/components/routes/settings/layout.tsx:85
msgid "Manage display and notification preferences."
msgstr "Weergave- en notificatievoorkeuren beheren."
#. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:628
msgid "Max 1 min"
msgstr "Max 1 min"
#: src/components/systems-table/systems-table.tsx:165
msgid "Memory"
msgstr "Geheugen"
#: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295
msgid "Memory Usage"
msgstr "Geheugengebruik"
#: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers"
msgstr "Geheugengebruik van docker containers"
#: src/components/add-system.tsx:116
msgid "Name"
msgstr "Naam"
#: src/components/systems-table/systems-table.tsx:181
msgid "Net"
msgstr "Net"
#: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers"
msgstr "Netwerkverkeer van docker containers"
#: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces"
msgstr "Netwerkverkeer van publieke interfaces"
#: src/components/command-palette.tsx:49
msgid "No results found."
msgstr "Geen resultaten gevonden."
#: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found."
msgstr "Geen systemen gevonden."
#: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74
msgid "Notifications"
msgstr "Meldingen"
#: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support"
msgstr "OAuth 2 / OIDC ondersteuning"
#: src/components/routes/settings/config-yaml.tsx:61
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "Bij elke herstart zullen systemen in de database worden bijgewerkt om overeen te komen met de systemen die in het bestand zijn gedefinieerd."
#: src/components/systems-table/systems-table.tsx:528
msgid "Open menu"
msgstr "Open menu"
#: src/components/login/auth-form.tsx:203
msgid "Or continue with"
msgstr "Of ga verder met"
#: src/components/alerts/alert-button.tsx:109
msgid "Overwrite existing alerts"
msgstr "Overschrijf bestaande waarschuwingen"
#: src/components/command-palette.tsx:84
msgid "Page"
msgstr "Pagina"
#: src/components/command-palette.tsx:71
msgid "Pages / Settings"
msgstr "Pagina's / Instellingen"
#: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:152
msgid "Password"
msgstr "Wachtwoord"
#: src/components/login/auth-form.tsx:17
msgid "Password must be at least 8 characters."
msgstr "Het wachtwoord moet minimaal 8 tekens bevatten."
#: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received"
msgstr "Wachtwoord reset aanvraag ontvangen"
#: src/components/systems-table/systems-table.tsx:550
msgid "Pause"
msgstr "Pauze"
#: src/components/routes/settings/notifications.tsx:95
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
msgstr "<0>Configureer een SMTP-server </0> om ervoor te zorgen dat waarschuwingen worden afgeleverd."
#: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details."
msgstr "Controleer de logs voor meer details."
#: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again"
msgstr "Controleer je aanmeldgegevens en probeer het opnieuw"
#: src/components/login/login.tsx:36
msgid "Please create an admin account"
msgstr "Maak een beheerdersaccount aan"
#: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site"
msgstr "Activeer pop-ups voor deze website"
#: src/lib/utils.ts:39
msgid "Please log in again"
msgstr "Meld je opnieuw aan"
#: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions."
msgstr "Bekijk <0>de documentatie</0> voor instructies."
#: src/components/login/login.tsx:40
msgid "Please sign in to your account"
msgstr "Meld je aan bij je account"
#: src/components/add-system.tsx:124
msgid "Port"
msgstr "Poort"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Nauwkeurig gebruik op de opgenomen tijd"
#: src/components/routes/settings/general.tsx:58
msgid "Preferred Language"
msgstr "Voorkeurstaal"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:128
msgid "Public Key"
msgstr "Publieke sleutel"
#. Disk read
#: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:70
msgid "Read"
msgstr "Lezen"
#. Network bytes received (download)
#: src/components/charts/area-chart.tsx:65
msgid "Received"
msgstr "Ontvangen"
#: src/components/login/forgot-pass-form.tsx:76
msgid "Reset Password"
msgstr "Wachtwoord resetten"
#: src/components/systems-table/systems-table.tsx:545
msgid "Resume"
msgstr "Hervatten"
#: src/components/routes/settings/notifications.tsx:117
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
msgstr "Bewaar het adres met de enter-toets of komma. Laat leeg om e-mailmeldingen uit te schakelen."
#: src/components/routes/settings/general.tsx:106
#: src/components/routes/settings/notifications.tsx:167
msgid "Save Settings"
msgstr "Instellingen opslaan"
#: src/components/navbar.tsx:133
msgid "Search"
msgstr "Zoeken"
#: src/components/command-palette.tsx:46
msgid "Search for systems or settings..."
msgstr "Zoek naar systemen of instellingen..."
#: src/components/alerts/alert-button.tsx:71
msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Zie <0>notificatie-instellingen</0> om te configureren hoe je meldingen ontvangt."
#. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:64
msgid "Sent"
msgstr "Verzonden"
#: src/components/routes/settings/general.tsx:100
msgid "Sets the default time range for charts when a system is viewed."
msgstr "Stelt het standaard tijdsbereik voor grafieken in wanneer een systeem wordt bekeken."
#: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82
msgid "Settings"
msgstr "Instellingen"
#: src/components/routes/settings/layout.tsx:33
msgid "Settings saved"
msgstr "Instellingen opgeslagen"
#: src/components/login/auth-form.tsx:191
msgid "Sign in"
msgstr "Aanmelden"
#: src/components/command-palette.tsx:185
msgid "SMTP settings"
msgstr "SMTP-instellingen"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Sorteren op"
#: src/lib/utils.ts:282
msgid "Status"
msgstr "Status"
#: src/components/routes/system.tsx:473
msgid "Swap space used by the system"
msgstr "Swap ruimte gebruikt door het systeem"
#: src/components/routes/system.tsx:472
msgid "Swap Usage"
msgstr "Swap gebruik"
#. System theme
#: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System"
msgstr "Systeem"
#: src/components/navbar.tsx:77
msgid "Systems"
msgstr "Systemen"
#: src/components/routes/settings/config-yaml.tsx:55
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Systemen kunnen worden beheerd in een <0>config.yml</0> bestand in je data map."
#: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabel"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314
msgid "Temperature"
msgstr "Temperatuur"
#: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors"
msgstr "Temperatuur van systeem sensoren"
#: src/components/routes/settings/notifications.tsx:211
msgid "Test <0>URL</0>"
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/notifications.tsx:182
msgid "Test notification sent"
msgstr "Testmelding verzonden"
#: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "De agent moet op het systeem draaien om te verbinden. Kopieer het installatiecommando voor de agent hieronder."
#: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "De agent moet op het systeem draaien om te verbinden. Kopieer de<0>docker-compose.yml</0> voor de agent hieronder."
#: src/components/login/forgot-pass-form.tsx:98
msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Log vervolgens in op de backend en reset het wachtwoord van je gebruikersaccount in het gebruikersoverzicht."
#: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Deze actie kan niet ongedaan worden gemaakt. Dit zal alle huidige records voor {name} permanent verwijderen uit de database."
#: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}"
msgstr "Doorvoer van {extraFsName}"
#: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem"
msgstr "Doorvoer van het root bestandssysteem"
#: src/components/routes/settings/notifications.tsx:106
msgid "To email(s)"
msgstr "Naar e-mail(s)"
#: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:372
msgid "Toggle grid"
msgstr "Schakel raster"
#: src/components/mode-toggle.tsx:33
msgid "Toggle theme"
msgstr "Schakel thema"
#: src/lib/utils.ts:317
msgid "Triggers when any sensor exceeds a threshold"
msgstr "Triggert wanneer een sensor een drempelwaarde overschrijdt"
#: src/lib/utils.ts:310
msgid "Triggers when combined up/down exceeds a threshold"
msgstr "Triggert wanneer de gecombineerde up/down een drempelwaarde overschrijdt"
#: src/lib/utils.ts:292
msgid "Triggers when CPU usage exceeds a threshold"
msgstr "Triggert wanneer het CPU-gebruik een drempelwaarde overschrijdt"
#: src/lib/utils.ts:298
msgid "Triggers when memory usage exceeds a threshold"
msgstr "Triggert wanneer het geheugengebruik een drempelwaarde overschrijdt"
#: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down"
msgstr "Triggert wanneer de status schakelt tussen up en down"
#: src/lib/utils.ts:304
msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Triggert wanneer het gebruik van een schijf een drempelwaarde overschrijdt"
#: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information."
msgstr "In realtime bijgewerkt. Klik op een systeem om informatie te bekijken."
#: src/components/routes/system.tsx:261
msgid "Uptime"
msgstr "Actief"
#: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage"
msgstr "Gebruik"
#: src/components/routes/system.tsx:424
msgid "Usage of root partition"
msgstr "Gebruik van root-partitie"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56
msgid "Used"
msgstr "Gebruikt"
#: src/components/command-palette.tsx:142
#: src/components/navbar.tsx:69
msgid "Users"
msgstr "Gebruikers"
#: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Weergave"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Zichtbare kolommen"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display"
msgstr "Wachtend op genoeg records om weer te geven"
#: src/components/routes/settings/general.tsx:48
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
msgstr "Wil je ons helpen onze vertalingen nog beter te maken? Bekijk <0>Crowdin</0> voor meer informatie."
#: src/components/routes/settings/notifications.tsx:124
msgid "Webhook / Push notifications"
msgstr "Webhook / Pushmeldingen"
#. Disk write
#: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:69
msgid "Write"
msgstr "Schrijven"
#: src/components/routes/settings/layout.tsx:61
msgid "YAML Config"
msgstr "YAML Configuratie"
#: src/components/routes/settings/config-yaml.tsx:45
msgid "YAML Configuration"
msgstr "YAML Configuratie"
#: src/components/routes/settings/layout.tsx:34
msgid "Your user settings have been updated."
msgstr "Je gebruikersinstellingen zijn bijgewerkt."

View File

@@ -0,0 +1,831 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: pl\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-01-01 13:11\n"
"Last-Translator: \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"
"X-Crowdin-Project: beszel\n"
"X-Crowdin-Project-ID: 733311\n"
"X-Crowdin-Language: pl\n"
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}"
#: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {godzinę} few {# godziny} many {# godzin} other {# godziny}}"
#: src/lib/utils.ts:139
msgid "1 hour"
msgstr "1 godzina"
#: src/lib/utils.ts:162
msgid "1 week"
msgstr "1 tydzień"
#: src/lib/utils.ts:147
msgid "12 hours"
msgstr "12 godzin"
#: src/lib/utils.ts:155
msgid "24 hours"
msgstr "24 godziny"
#: src/lib/utils.ts:170
msgid "30 days"
msgstr "30 dni"
#. Table column
#: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions"
msgstr "Akcje"
#: src/components/routes/home.tsx:61
msgid "Active Alerts"
msgstr "Aktywne alerty"
#: src/components/add-system.tsx:78
msgid "Add <0>System</0>"
msgstr "Dodaj <0>system</0>"
#: src/components/add-system.tsx:87
msgid "Add New System"
msgstr "Dodaj nowy system"
#: src/components/add-system.tsx:165
#: src/components/add-system.tsx:176
msgid "Add system"
msgstr "Dodaj system"
#: src/components/routes/settings/notifications.tsx:156
msgid "Add URL"
msgstr "Dodaj URL"
#: src/components/routes/settings/general.tsx:81
msgid "Adjust display options for charts."
msgstr "Dostosuj opcje wyświetlania wykresów."
#: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:188
msgid "Admin"
msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:201
msgid "Agent"
msgstr "Agent"
#: src/components/alerts/alert-button.tsx:32
#: src/components/alerts/alert-button.tsx:68
msgid "Alerts"
msgstr "Alerty"
#: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:266
msgid "All Systems"
msgstr "Wszystkie systemy"
#: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?"
msgstr "Czy na pewno chcesz usunąć {name}?"
#: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context."
msgstr "Automatyczne kopiowanie wymaga bezpiecznego kontekstu."
#: src/components/routes/system.tsx:625
msgid "Average"
msgstr "Średnia"
#: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers"
msgstr "Średnie wykorzystanie procesora przez kontenery"
#: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>"
msgstr "Średnia przekracza <0>{value}{0}</0>"
#: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr "Średnie zużycie energii przez GPU"
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization"
msgstr "Średnie wykorzystanie procesora w całym systemie"
#: src/components/routes/system.tsx:515
msgid "Average utilization of {0}"
msgstr "Średnie użycie {0}"
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups"
msgstr "Kopie"
#: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307
msgid "Bandwidth"
msgstr "Przepustowość"
#: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel obsługuje OpenID Connect i wielu dostawców uwierzytelniania OAuth2."
#: src/components/routes/settings/notifications.tsx:127
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel używa <0>Shoutrrr</0> do integracji z popularnych serwisami powiadomień."
#: src/components/add-system.tsx:92
msgid "Binary"
msgstr "Plik binarny"
#: src/components/charts/mem-chart.tsx:89
msgid "Cache / Buffers"
msgstr "Pamięć podręczna / Bufory"
#: src/components/systems-table/systems-table.tsx:581
msgid "Cancel"
msgstr "Anuluj"
#: src/components/routes/settings/config-yaml.tsx:68
msgid "Caution - potential data loss"
msgstr "Uwaga- potencjalna utrata danych."
#: src/components/routes/settings/general.tsx:36
msgid "Change general application options."
msgstr "Zmiana ogólnych ustawień aplikacji."
#: src/components/routes/settings/general.tsx:78
msgid "Chart options"
msgstr "Opcje wykresu"
#: src/components/login/forgot-pass-form.tsx:34
msgid "Check {email} for a reset link."
msgstr "Sprawdź {email}, aby uzyskać link do resetowania."
#: src/components/routes/settings/layout.tsx:40
msgid "Check logs for more details."
msgstr "Sprawdź logi, aby uzyskać więcej informacji."
#: src/components/routes/settings/notifications.tsx:183
msgid "Check your notification service"
msgstr "Sprawdź swój serwis powiadomień"
#: src/components/add-system.tsx:151
msgid "Click to copy"
msgstr "Kliknij, aby skopiować"
#: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions"
msgstr "Instrukcje wiersza poleceń"
#: src/components/routes/settings/notifications.tsx:77
msgid "Configure how you receive alert notifications."
msgstr "Skonfiguruj sposób otrzymywania powiadomień."
#: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:170
msgid "Confirm password"
msgstr "Potwierdź hasło"
#: src/components/systems-table/systems-table.tsx:587
msgid "Continue"
msgstr "Kontynuuj"
#: src/lib/utils.ts:25
msgid "Copied to clipboard"
msgstr "Skopiowano do schowka"
#: src/components/add-system.tsx:162
msgid "Copy"
msgstr "Kopiuj"
#: src/components/systems-table/systems-table.tsx:556
msgid "Copy host"
msgstr "Kopiuj host"
#: src/components/add-system.tsx:173
msgid "Copy Linux command"
msgstr "Kopiuj polecenie Linux"
#: src/components/copy-to-clipboard.tsx:13
msgid "Copy text"
msgstr "Kopiuj tekst"
#: src/components/systems-table/systems-table.tsx:157
msgid "CPU"
msgstr "Procesor"
#: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289
msgid "CPU Usage"
msgstr "Użycie procesora"
#: src/components/login/auth-form.tsx:191
msgid "Create account"
msgstr "Utwórz konto"
#. Dark theme
#: src/components/mode-toggle.tsx:21
msgid "Dark"
msgstr "Ciemny"
#: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:34
msgid "Dashboard"
msgstr "Panel kontrolny"
#: src/components/routes/settings/general.tsx:85
msgid "Default time period"
msgstr "Domyślny przedział czasu"
#: src/components/systems-table/systems-table.tsx:562
msgid "Delete"
msgstr "Usuń"
#: src/components/systems-table/systems-table.tsx:173
msgid "Disk"
msgstr "Dysk"
#: src/components/routes/system.tsx:431
msgid "Disk I/O"
msgstr "Dysk I/O"
#: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301
msgid "Disk Usage"
msgstr "Użycie dysku"
#: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}"
msgstr "Wykorzystanie dysku {extraFsName}"
#: src/components/routes/system.tsx:395
msgid "Docker CPU Usage"
msgstr "Wykorzystanie procesora przez Docker"
#: src/components/routes/system.tsx:416
msgid "Docker Memory Usage"
msgstr "Wykorzystanie pamięci przez Docker"
#: src/components/routes/system.tsx:457
msgid "Docker Network I/O"
msgstr "Sieć Docker I/O"
#: src/components/command-palette.tsx:124
msgid "Documentation"
msgstr "Dokumentacja"
#: src/components/login/auth-form.tsx:128
#: src/components/login/forgot-pass-form.tsx:53
msgid "Email"
msgstr "E-mail"
#: src/components/routes/settings/notifications.tsx:91
msgid "Email notifications"
msgstr "Powiadomienia e-mail"
#: src/components/login/login.tsx:38
msgid "Enter email address to reset password"
msgstr "Wprowadź adres e-mail, aby zresetować hasło"
#: src/components/routes/settings/notifications.tsx:111
msgid "Enter email address..."
msgstr "Wprowadź adres e-mail..."
#: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187
msgid "Error"
msgstr "Błąd"
#: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Przekracza {0}{1} w ciągu ostatnich {2, plural, one {# minuty} other {# minut}}"
#: src/components/routes/settings/config-yaml.tsx:72
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
msgstr "Istniejące systemy, które nie są zdefiniowane w <0>config.yml</0>, zostaną usunięte. Proszę regularnie tworzyć kopie zapasowe."
#: src/components/routes/settings/config-yaml.tsx:93
msgid "Export configuration"
msgstr "Eksportuj konfigurację"
#: src/components/routes/settings/config-yaml.tsx:48
msgid "Export your current systems configuration."
msgstr "Eksportuj aktualną konfigurację systemów."
#: src/lib/utils.ts:38
msgid "Failed to authenticate"
msgstr "Błąd autoryzacji"
#: src/components/routes/settings/layout.tsx:39
#: src/components/routes/settings/notifications.tsx:62
msgid "Failed to save settings"
msgstr "Nie udało się zapisać ustawień"
#: src/components/routes/settings/notifications.tsx:188
msgid "Failed to send test notification"
msgstr "Nie udało się wysłać testowego powiadomienia"
#: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert"
msgstr "Nie udało się zaktualizować powiadomienia"
#: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:273
msgid "Filter..."
msgstr "Filtruj..."
#: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Na <0>{min}</0> {min, plural, one {minutę} other {minut}}"
#: src/components/login/auth-form.tsx:313
msgid "Forgot password?"
msgstr "Zapomniałeś hasła?"
#. Context: General settings
#: src/components/routes/settings/general.tsx:33
#: src/components/routes/settings/layout.tsx:51
msgid "General"
msgstr "Ogólne"
#: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr "Moc GPU"
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Siatka"
#: src/components/add-system.tsx:120
msgid "Host / IP"
msgstr "Host / adres IP"
#: src/components/login/forgot-pass-form.tsx:93
msgid "If you've lost the password to your admin account, you may reset it using the following command."
msgstr "Jeśli utraciłeś hasło do swojego konta administratora, możesz je zresetować, używając następującego polecenia."
#: src/components/login/auth-form.tsx:16
msgid "Invalid email address."
msgstr "Nieprawidłowy adres e-mail."
#. Linux kernel
#: src/components/routes/system.tsx:262
msgid "Kernel"
msgstr "Jądro"
#: src/components/routes/settings/general.tsx:45
msgid "Language"
msgstr "Język"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr "Układ"
#. Light theme
#: src/components/mode-toggle.tsx:16
msgid "Light"
msgstr "Jasny"
#: src/components/navbar.tsx:104
msgid "Log Out"
msgstr "Wyloguj"
#: src/components/login/login.tsx:19
msgid "Login"
msgstr "Logowanie"
#: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed"
msgstr "Próba logowania nie powiodła się"
#: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:85
msgid "Logs"
msgstr "Logi"
#: src/components/routes/settings/notifications.tsx:80
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
msgstr "Szukasz, gdzie utworzyć powiadomienia? Kliknij ikonę dzwonka <0/> w tabeli systemów."
#: src/components/routes/settings/layout.tsx:85
msgid "Manage display and notification preferences."
msgstr "Zarządzaj preferencjami wyświetlania i powiadomień."
#. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:628
msgid "Max 1 min"
msgstr "Maks. 1 min"
#: src/components/systems-table/systems-table.tsx:165
msgid "Memory"
msgstr "Pamięć"
#: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295
msgid "Memory Usage"
msgstr "Wykorzystanie pamięci"
#: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers"
msgstr "Użycie pamięci przez kontenery Docker."
#: src/components/add-system.tsx:116
msgid "Name"
msgstr "Nazwa"
#: src/components/systems-table/systems-table.tsx:181
msgid "Net"
msgstr "Sieć"
#: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers"
msgstr "Ruch sieciowy kontenerów Docker."
#: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces"
msgstr "Ruch sieciowy interfejsów publicznych"
#: src/components/command-palette.tsx:49
msgid "No results found."
msgstr "Brak wyników."
#: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found."
msgstr "Nie znaleziono systemów."
#: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74
msgid "Notifications"
msgstr "Powiadomienia"
#: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support"
msgstr "Wsparcie OAuth 2 / OIDC"
#: src/components/routes/settings/config-yaml.tsx:61
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "Przy każdym ponownym uruchomieniu systemy w bazie danych będą aktualizowane, aby odpowiadały systemom zdefiniowanym w pliku."
#: src/components/systems-table/systems-table.tsx:528
msgid "Open menu"
msgstr "Otwórz menu"
#: src/components/login/auth-form.tsx:203
msgid "Or continue with"
msgstr "Lub kontynuuj z"
#: src/components/alerts/alert-button.tsx:109
msgid "Overwrite existing alerts"
msgstr "Nadpisz istniejące alerty"
#: src/components/command-palette.tsx:84
msgid "Page"
msgstr "Strona"
#: src/components/command-palette.tsx:71
msgid "Pages / Settings"
msgstr "Strony / Ustawienia"
#: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:152
msgid "Password"
msgstr "Hasło"
#: src/components/login/auth-form.tsx:17
msgid "Password must be at least 8 characters."
msgstr "Hasło musi mieć co najmniej 8 znaków."
#: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received"
msgstr "Otrzymane żądanie resetowania hasła"
#: src/components/systems-table/systems-table.tsx:550
msgid "Pause"
msgstr "Pauza"
#: src/components/routes/settings/notifications.tsx:95
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
msgstr "Proszę <0>skonfigurować serwer SMTP</0>, aby zapewnić dostarczanie powiadomień."
#: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details."
msgstr "Sprawdź logi, aby uzyskać więcej informacji."
#: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again"
msgstr "Sprawdź swoje poświadczenia i spróbuj ponownie"
#: src/components/login/login.tsx:36
msgid "Please create an admin account"
msgstr "Utwórz konto administratora"
#: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site"
msgstr "Włącz wyskakujące okna dla tej strony"
#: src/lib/utils.ts:39
msgid "Please log in again"
msgstr "Zaloguj się ponownie"
#: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions."
msgstr "Proszę zapoznać się z <0>dokumentacją</0>."
#: src/components/login/login.tsx:40
msgid "Please sign in to your account"
msgstr "Zaloguj się na swoje konto"
#: src/components/add-system.tsx:124
msgid "Port"
msgstr "Port"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Dokładne wykorzystanie w zarejestrowanym czasie"
#: src/components/routes/settings/general.tsx:58
msgid "Preferred Language"
msgstr "Preferowany język"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:128
msgid "Public Key"
msgstr "Klucz publiczny"
#. Disk read
#: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:70
msgid "Read"
msgstr "Czytaj"
#. Network bytes received (download)
#: src/components/charts/area-chart.tsx:65
msgid "Received"
msgstr "Otrzymane"
#: src/components/login/forgot-pass-form.tsx:76
msgid "Reset Password"
msgstr "Resetuj hasło"
#: src/components/systems-table/systems-table.tsx:545
msgid "Resume"
msgstr "Wznów"
#: src/components/routes/settings/notifications.tsx:117
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
msgstr "Zapisz adres, używając klawisza enter lub przecinka. Pozostaw puste, aby wyłączyć powiadomienia e-mail."
#: src/components/routes/settings/general.tsx:106
#: src/components/routes/settings/notifications.tsx:167
msgid "Save Settings"
msgstr "Zapisz ustawienia"
#: src/components/navbar.tsx:133
msgid "Search"
msgstr "Szukaj"
#: src/components/command-palette.tsx:46
msgid "Search for systems or settings..."
msgstr "Szukaj systemów lub ustawień..."
#: src/components/alerts/alert-button.tsx:71
msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Zobacz <0>ustawienia powiadomień</0>, aby skonfigurować sposób, w jaki otrzymujesz powiadomienia."
#. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:64
msgid "Sent"
msgstr "Wysłane"
#: src/components/routes/settings/general.tsx:100
msgid "Sets the default time range for charts when a system is viewed."
msgstr "Ustawia domyślny zakres czasowy dla wykresów, gdy system jest wyświetlony."
#: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82
msgid "Settings"
msgstr "Ustawienia"
#: src/components/routes/settings/layout.tsx:33
msgid "Settings saved"
msgstr "Ustawienia zapisane"
#: src/components/login/auth-form.tsx:191
msgid "Sign in"
msgstr "Zaloguj się"
#: src/components/command-palette.tsx:185
msgid "SMTP settings"
msgstr "Ustawienia SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Sortuj według"
#: src/lib/utils.ts:282
msgid "Status"
msgstr "Status"
#: src/components/routes/system.tsx:473
msgid "Swap space used by the system"
msgstr "Pamięć wymiany używana przez system"
#: src/components/routes/system.tsx:472
msgid "Swap Usage"
msgstr "Użycie pamięci wymiany"
#. System theme
#: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System"
msgstr "System"
#: src/components/navbar.tsx:77
msgid "Systems"
msgstr "Systemy"
#: src/components/routes/settings/config-yaml.tsx:55
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Systemy mogą być zarządzane w pliku <0>config.yml</0> znajdującym się w Twoim katalogu danych."
#: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabela"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314
msgid "Temperature"
msgstr "Temperatura"
#: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors"
msgstr "Temperatury czujników systemowych."
#: src/components/routes/settings/notifications.tsx:211
msgid "Test <0>URL</0>"
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/notifications.tsx:182
msgid "Test notification sent"
msgstr "Testowe powiadomienie wysłane."
#: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "Agent musi być uruchomiony na systemie, aby nawiązać połączenie. Skopiuj poniżej polecenie instalacji agenta."
#: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "Agent musi być uruchomiony na systemie, aby nawiązać połączenie. Skopiuj poniżej plik <0>docker-compose.yml</0> dla agenta."
#: src/components/login/forgot-pass-form.tsx:98
msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Następnie zaloguj się do panelu administracyjnego i zresetuj hasło do konta użytkownika w tabeli użytkowników."
#: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Tej akcji nie można cofnąć. Spowoduje to trwałe usunięcie wszystkich bieżących rekordów dla {name} z bazy danych."
#: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}"
msgstr "Przepustowość {extraFsName}"
#: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem"
msgstr "Przepustowość głównego systemu plików"
#: src/components/routes/settings/notifications.tsx:106
msgid "To email(s)"
msgstr "Do e-mail(ów)"
#: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:372
msgid "Toggle grid"
msgstr "Przełącz siatkę"
#: src/components/mode-toggle.tsx:33
msgid "Toggle theme"
msgstr "Zmień motyw"
#: src/lib/utils.ts:317
msgid "Triggers when any sensor exceeds a threshold"
msgstr "Wyzwalane, gdy jakikolwiek czujnik przekroczy ustalony próg."
#: src/lib/utils.ts:310
msgid "Triggers when combined up/down exceeds a threshold"
msgstr "Wyzwalane, gdy łączna wartość w górę/w dół przekroczy próg"
#: src/lib/utils.ts:292
msgid "Triggers when CPU usage exceeds a threshold"
msgstr "Wyzwalane, gdy użycie procesora przekracza próg"
#: src/lib/utils.ts:298
msgid "Triggers when memory usage exceeds a threshold"
msgstr "Wyzwalane, wykorzystanie pamięci przekroczy ustalony próg."
#: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down"
msgstr "Wyzwalane, gdy status przełącza się między stanem aktywnym a nieaktywnym"
#: src/lib/utils.ts:304
msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Wyzwalane, gdy wykorzystanie któregokolwiek dysku przekroczy ustalony próg"
#: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information."
msgstr "Aktualizowane w czasie rzeczywistym. Kliknij system, aby zobaczyć informacje."
#: src/components/routes/system.tsx:261
msgid "Uptime"
msgstr "Czas pracy"
#: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage"
msgstr "Wykorzystanie"
#: src/components/routes/system.tsx:424
msgid "Usage of root partition"
msgstr "Użycie partycji głównej"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56
msgid "Used"
msgstr "Używane"
#: src/components/command-palette.tsx:142
#: src/components/navbar.tsx:69
msgid "Users"
msgstr "Użytkownicy"
#: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Widok"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Widoczne kolumny"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display"
msgstr "Oczekiwanie na wystarczającą liczbę rekordów do wyświetlenia"
#: src/components/routes/settings/general.tsx:48
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
msgstr "Chcesz pomóc nam uczynić nasze tłumaczenia jeszcze lepszymi? Sprawdź <0>Crowdin</0> po więcej szczegółów."
#: src/components/routes/settings/notifications.tsx:124
msgid "Webhook / Push notifications"
msgstr "Webhook / Powiadomienia push"
#. Disk write
#: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:69
msgid "Write"
msgstr "Napisz"
#: src/components/routes/settings/layout.tsx:61
msgid "YAML Config"
msgstr "Konf. YAML"
#: src/components/routes/settings/config-yaml.tsx:45
msgid "YAML Configuration"
msgstr "Konfiguracja YAML"
#: src/components/routes/settings/layout.tsx:34
msgid "Your user settings have been updated."
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: 2024-11-02 02:14\n" "PO-Revision-Date: 2024-12-17 21: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"
@@ -18,11 +18,11 @@ msgstr ""
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n" "X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
"X-Crowdin-File-ID: 16\n" "X-Crowdin-File-ID: 16\n"
#: src/components/routes/system.tsx:242 #: src/components/routes/system.tsx:250
msgid "{0, plural, one {# day} other {# days}}" msgid "{0, plural, one {# day} other {# days}}"
msgstr "{0, plural, one {# dia} other {# dias}}" msgstr "{0, plural, one {# dia} other {# dias}}"
#: src/components/routes/system.tsx:240 #: src/components/routes/system.tsx:248
msgid "{hours, plural, one {# hour} other {# hours}}" msgid "{hours, plural, one {# hour} other {# hours}}"
msgstr "{hours, plural, one {# hora} other {# horas}}" msgstr "{hours, plural, one {# hora} other {# horas}}"
@@ -47,24 +47,27 @@ msgid "30 days"
msgstr "30 dias" msgstr "30 dias"
#. Table column #. Table column
#: src/components/systems-table/systems-table.tsx:207 #: src/components/systems-table/systems-table.tsx:227
#: src/components/systems-table/systems-table.tsx:313
#: src/components/systems-table/systems-table.tsx:455
#: src/components/systems-table/systems-table.tsx:465
msgid "Actions" msgid "Actions"
msgstr "Ações" msgstr "Ações"
#: src/components/routes/home.tsx:62 #: src/components/routes/home.tsx:61
msgid "Active Alerts" msgid "Active Alerts"
msgstr "Alertas Ativos" msgstr "Alertas Ativos"
#: src/components/add-system.tsx:74 #: src/components/add-system.tsx:78
msgid "Add <0>System</0>" msgid "Add <0>System</0>"
msgstr "Adicionar <0>Sistema</0>" msgstr "Adicionar <0>Sistema</0>"
#: src/components/add-system.tsx:83 #: src/components/add-system.tsx:87
msgid "Add New System" msgid "Add New System"
msgstr "Adicionar Novo Sistema" msgstr "Adicionar Novo Sistema"
#: src/components/add-system.tsx:167 #: src/components/add-system.tsx:165
#: src/components/add-system.tsx:178 #: src/components/add-system.tsx:176
msgid "Add system" msgid "Add system"
msgstr "Adicionar sistema" msgstr "Adicionar sistema"
@@ -76,16 +79,15 @@ msgstr "Adicionar URL"
msgid "Adjust display options for charts." msgid "Adjust display options for charts."
msgstr "Ajustar opções de exibição para gráficos." msgstr "Ajustar opções de exibição para gráficos."
#: src/components/command-palette.tsx:133 #: src/components/command-palette.tsx:132
#: src/components/command-palette.tsx:146 #: src/components/command-palette.tsx:145
#: src/components/command-palette.tsx:160 #: src/components/command-palette.tsx:159
#: src/components/command-palette.tsx:174 #: src/components/command-palette.tsx:173
#: src/components/command-palette.tsx:189 #: src/components/command-palette.tsx:188
#: src/components/command-palette.tsx:204
msgid "Admin" msgid "Admin"
msgstr "Admin" msgstr "Admin"
#: src/components/systems-table/systems-table.tsx:186 #: src/components/systems-table/systems-table.tsx:201
msgid "Agent" msgid "Agent"
msgstr "Agente" msgstr "Agente"
@@ -95,50 +97,53 @@ msgid "Alerts"
msgstr "Alertas" msgstr "Alertas"
#: src/components/alerts/alert-button.tsx:88 #: src/components/alerts/alert-button.tsx:88
#: src/components/systems-table/systems-table.tsx:317 #: src/components/systems-table/systems-table.tsx:266
msgid "All Systems" msgid "All Systems"
msgstr "Todos os Sistemas" msgstr "Todos os Sistemas"
#: src/components/systems-table/systems-table.tsx:261 #: src/components/systems-table/systems-table.tsx:570
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Tem certeza de que deseja excluir {name}?" msgstr "Tem certeza de que deseja excluir {name}?"
#: src/components/command-palette.tsx:186
#: src/components/navbar.tsx:102
msgid "Auth Providers"
msgstr "Provedores de Autenticação"
#: src/components/copy-to-clipboard.tsx:16 #: src/components/copy-to-clipboard.tsx:16
msgid "Automatic copy requires a secure context." msgid "Automatic copy requires a secure context."
msgstr "A cópia automática requer um contexto seguro." msgstr "A cópia automática requer um contexto seguro."
#: src/components/routes/system.tsx:568 #: src/components/routes/system.tsx:625
msgid "Average" msgid "Average"
msgstr "Média" msgstr "Média"
#: src/components/routes/system.tsx:387 #: src/components/routes/system.tsx:396
msgid "Average CPU utilization of containers" msgid "Average CPU utilization of containers"
msgstr "Utilização média de CPU dos contêineres" msgstr "Utilização média de CPU dos contêineres"
#: src/components/alerts/alerts-system.tsx:204 #: src/components/alerts/alerts-system.tsx:206
msgid "Average exceeds <0>{value}{0}</0>" msgid "Average exceeds <0>{value}{0}</0>"
msgstr "A média excede <0>{value}{0}</0>" msgstr "A média excede <0>{value}{0}</0>"
#: src/components/routes/system.tsx:376 #: src/components/routes/system.tsx:497
msgid "Average power consumption of GPUs"
msgstr ""
#: src/components/routes/system.tsx:385
msgid "Average system-wide CPU utilization" msgid "Average system-wide CPU utilization"
msgstr "Utilização média de CPU em todo o sistema" msgstr "Utilização média de CPU em todo o sistema"
#: src/components/command-palette.tsx:171 #: src/components/routes/system.tsx:515
#: src/components/navbar.tsx:94 msgid "Average utilization of {0}"
msgstr ""
#: src/components/command-palette.tsx:170
#: src/components/navbar.tsx:93
msgid "Backups" msgid "Backups"
msgstr "Backups" msgstr "Backups"
#: src/components/routes/system.tsx:436 #: src/components/routes/system.tsx:441
#: src/lib/utils.ts:307 #: src/lib/utils.ts:307
msgid "Bandwidth" msgid "Bandwidth"
msgstr "Largura de Banda" msgstr "Largura de Banda"
#: src/components/login/auth-form.tsx:313 #: src/components/login/auth-form.tsx:289
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers." msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
msgstr "Beszel suporta OpenID Connect e muitos provedores de autenticação OAuth2." msgstr "Beszel suporta OpenID Connect e muitos provedores de autenticação OAuth2."
@@ -146,7 +151,7 @@ msgstr "Beszel suporta OpenID Connect e muitos provedores de autenticação OAut
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel usa <0>Shoutrrr</0> para integrar com serviços de notificação populares." msgstr "Beszel usa <0>Shoutrrr</0> para integrar com serviços de notificação populares."
#: src/components/add-system.tsx:88 #: src/components/add-system.tsx:92
msgid "Binary" msgid "Binary"
msgstr "Binário" msgstr "Binário"
@@ -154,7 +159,7 @@ msgstr "Binário"
msgid "Cache / Buffers" msgid "Cache / Buffers"
msgstr "Cache / Buffers" msgstr "Cache / Buffers"
#: src/components/systems-table/systems-table.tsx:272 #: src/components/systems-table/systems-table.tsx:581
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@@ -182,15 +187,10 @@ msgstr "Verifique os logs para mais detalhes."
msgid "Check your notification service" msgid "Check your notification service"
msgstr "Verifique seu serviço de notificação" msgstr "Verifique seu serviço de notificação"
#: src/components/add-system.tsx:153 #: src/components/add-system.tsx:151
msgid "Click to copy" msgid "Click to copy"
msgstr "Clique para copiar" msgstr "Clique para copiar"
#. Context: table columns
#: src/components/systems-table/systems-table.tsx:328
msgid "Columns"
msgstr "Colunas"
#: src/components/login/forgot-pass-form.tsx:83 #: src/components/login/forgot-pass-form.tsx:83
#: src/components/login/forgot-pass-form.tsx:89 #: src/components/login/forgot-pass-form.tsx:89
msgid "Command line instructions" msgid "Command line instructions"
@@ -200,12 +200,12 @@ msgstr "Instruções de linha de comando"
msgid "Configure how you receive alert notifications." msgid "Configure how you receive alert notifications."
msgstr "Configure como você recebe notificações de alerta." msgstr "Configure como você recebe notificações de alerta."
#: src/components/login/auth-form.tsx:189 #: src/components/login/auth-form.tsx:165
#: src/components/login/auth-form.tsx:194 #: src/components/login/auth-form.tsx:170
msgid "Confirm password" msgid "Confirm password"
msgstr "Confirmar senha" msgstr "Confirmar senha"
#: src/components/systems-table/systems-table.tsx:278 #: src/components/systems-table/systems-table.tsx:587
msgid "Continue" msgid "Continue"
msgstr "Continuar" msgstr "Continuar"
@@ -213,15 +213,15 @@ msgstr "Continuar"
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Copiado para a área de transferência" msgstr "Copiado para a área de transferência"
#: src/components/add-system.tsx:164 #: src/components/add-system.tsx:162
msgid "Copy" msgid "Copy"
msgstr "Copiar" msgstr "Copiar"
#: src/components/systems-table/systems-table.tsx:247 #: src/components/systems-table/systems-table.tsx:556
msgid "Copy host" msgid "Copy host"
msgstr "Copiar host" msgstr "Copiar host"
#: src/components/add-system.tsx:175 #: src/components/add-system.tsx:173
msgid "Copy Linux command" msgid "Copy Linux command"
msgstr "Copiar comando Linux" msgstr "Copiar comando Linux"
@@ -229,17 +229,17 @@ msgstr "Copiar comando Linux"
msgid "Copy text" msgid "Copy text"
msgstr "Copiar texto" msgstr "Copiar texto"
#: src/components/systems-table/systems-table.tsx:152 #: src/components/systems-table/systems-table.tsx:157
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: src/components/charts/area-chart.tsx:52 #: src/components/charts/area-chart.tsx:56
#: src/components/routes/system.tsx:375 #: src/components/routes/system.tsx:384
#: src/lib/utils.ts:289 #: src/lib/utils.ts:289
msgid "CPU Usage" msgid "CPU Usage"
msgstr "Uso de CPU" msgstr "Uso de CPU"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Create account" msgid "Create account"
msgstr "Criar conta" msgstr "Criar conta"
@@ -248,8 +248,8 @@ msgstr "Criar conta"
msgid "Dark" msgid "Dark"
msgstr "Escuro" msgstr "Escuro"
#: src/components/command-palette.tsx:82 #: src/components/command-palette.tsx:81
#: src/components/routes/home.tsx:35 #: src/components/routes/home.tsx:34
msgid "Dashboard" msgid "Dashboard"
msgstr "Painel" msgstr "Painel"
@@ -257,49 +257,45 @@ msgstr "Painel"
msgid "Default time period" msgid "Default time period"
msgstr "Período de tempo padrão" msgstr "Período de tempo padrão"
#: src/components/systems-table/systems-table.tsx:253 #: src/components/systems-table/systems-table.tsx:562
msgid "Delete" msgid "Delete"
msgstr "Excluir" msgstr "Excluir"
#: src/components/systems-table/systems-table.tsx:166 #: src/components/systems-table/systems-table.tsx:173
msgid "Disk" msgid "Disk"
msgstr "Disco" msgstr "Disco"
#: src/components/routes/system.tsx:426 #: src/components/routes/system.tsx:431
msgid "Disk I/O" msgid "Disk I/O"
msgstr "E/S de Disco" msgstr "E/S de Disco"
#: src/components/charts/disk-chart.tsx:74 #: src/components/charts/disk-chart.tsx:79
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
#: src/lib/utils.ts:301 #: src/lib/utils.ts:301
msgid "Disk Usage" msgid "Disk Usage"
msgstr "Uso de Disco" msgstr "Uso de Disco"
#: src/components/routes/system.tsx:495 #: src/components/routes/system.tsx:552
msgid "Disk usage of {extraFsName}" msgid "Disk usage of {extraFsName}"
msgstr "Uso de disco de {extraFsName}" msgstr "Uso de disco de {extraFsName}"
#: src/components/routes/system.tsx:386 #: src/components/routes/system.tsx:395
msgid "Docker CPU Usage" msgid "Docker CPU Usage"
msgstr "Uso de CPU do Docker" msgstr "Uso de CPU do Docker"
#: src/components/routes/system.tsx:407 #: src/components/routes/system.tsx:416
msgid "Docker Memory Usage" msgid "Docker Memory Usage"
msgstr "Uso de Memória do Docker" msgstr "Uso de Memória do Docker"
#: src/components/routes/system.tsx:452 #: src/components/routes/system.tsx:457
msgid "Docker Network I/O" msgid "Docker Network I/O"
msgstr "E/S de Rede do Docker" msgstr "E/S de Rede do Docker"
#: src/components/command-palette.tsx:125 #: src/components/command-palette.tsx:124
msgid "Documentation" msgid "Documentation"
msgstr "Documentação" msgstr "Documentação"
#: src/components/login/auth-form.tsx:158 #: src/components/login/auth-form.tsx:128
msgid "email"
msgstr "email"
#: src/components/login/auth-form.tsx:152
#: src/components/login/forgot-pass-form.tsx:53 #: src/components/login/forgot-pass-form.tsx:53
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
@@ -308,7 +304,7 @@ msgstr "Email"
msgid "Email notifications" msgid "Email notifications"
msgstr "Notificações por email" msgstr "Notificações por email"
#: src/components/login/login.tsx:36 #: src/components/login/login.tsx:38
msgid "Enter email address to reset password" msgid "Enter email address to reset password"
msgstr "Digite o endereço de email para redefinir a senha" msgstr "Digite o endereço de email para redefinir a senha"
@@ -316,13 +312,13 @@ msgstr "Digite o endereço de email para redefinir a senha"
msgid "Enter email address..." msgid "Enter email address..."
msgstr "Digite o endereço de email..." msgstr "Digite o endereço de email..."
#: src/components/login/auth-form.tsx:256 #: src/components/login/auth-form.tsx:232
#: src/components/routes/settings/config-yaml.tsx:28 #: src/components/routes/settings/config-yaml.tsx:28
#: src/components/routes/settings/notifications.tsx:187 #: src/components/routes/settings/notifications.tsx:187
msgid "Error" msgid "Error"
msgstr "Erro" msgstr "Erro"
#: src/components/routes/home.tsx:81 #: src/components/routes/home.tsx:80
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}" msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Excede {0}{1} no último {2, plural, one {# minuto} other {# minutos}}" msgstr "Excede {0}{1} no último {2, plural, one {# minuto} other {# minutos}}"
@@ -351,20 +347,20 @@ msgstr "Falha ao salvar configurações"
msgid "Failed to send test notification" msgid "Failed to send test notification"
msgstr "Falha ao enviar notificação de teste" msgstr "Falha ao enviar notificação de teste"
#: src/components/alerts/alerts-system.tsx:27 #: src/components/alerts/alerts-system.tsx:24
msgid "Failed to update alert" msgid "Failed to update alert"
msgstr "Falha ao atualizar alerta" msgstr "Falha ao atualizar alerta"
#: src/components/routes/system.tsx:539 #: src/components/routes/system.tsx:596
#: src/components/systems-table/systems-table.tsx:324 #: src/components/systems-table/systems-table.tsx:273
msgid "Filter..." msgid "Filter..."
msgstr "Filtrar..." msgstr "Filtrar..."
#: src/components/alerts/alerts-system.tsx:225 #: src/components/alerts/alerts-system.tsx:227
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}" msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
msgstr "Por <0>{min}</0> {min, plural, one {minuto} other {minutos}}" msgstr "Por <0>{min}</0> {min, plural, one {minuto} other {minutos}}"
#: src/components/login/auth-form.tsx:337 #: src/components/login/auth-form.tsx:313
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Esqueceu a senha?" msgstr "Esqueceu a senha?"
@@ -374,7 +370,15 @@ msgstr "Esqueceu a senha?"
msgid "General" msgid "General"
msgstr "Geral" msgstr "Geral"
#: src/components/add-system.tsx:119 #: src/components/routes/system.tsx:496
msgid "GPU Power Draw"
msgstr ""
#: src/components/systems-table/systems-table.tsx:300
msgid "Grid"
msgstr "Grade"
#: src/components/add-system.tsx:120
msgid "Host / IP" msgid "Host / IP"
msgstr "Host / IP" msgstr "Host / IP"
@@ -387,7 +391,7 @@ msgid "Invalid email address."
msgstr "Endereço de email inválido." msgstr "Endereço de email inválido."
#. Linux kernel #. Linux kernel
#: src/components/routes/system.tsx:254 #: src/components/routes/system.tsx:262
msgid "Kernel" msgid "Kernel"
msgstr "Kernel" msgstr "Kernel"
@@ -395,26 +399,30 @@ msgstr "Kernel"
msgid "Language" msgid "Language"
msgstr "Idioma" msgstr "Idioma"
#: src/components/systems-table/systems-table.tsx:286
msgid "Layout"
msgstr ""
#. Light theme #. Light theme
#: src/components/mode-toggle.tsx:16 #: src/components/mode-toggle.tsx:16
msgid "Light" msgid "Light"
msgstr "Claro" msgstr "Claro"
#: src/components/navbar.tsx:113 #: src/components/navbar.tsx:104
msgid "Log Out" msgid "Log Out"
msgstr "Sair" msgstr "Sair"
#: src/components/login/login.tsx:17 #: src/components/login/login.tsx:19
msgid "Login" msgid "Login"
msgstr "Entrar" msgstr "Entrar"
#: src/components/login/auth-form.tsx:42 #: src/components/login/auth-form.tsx:34
#: src/components/login/forgot-pass-form.tsx:15 #: src/components/login/forgot-pass-form.tsx:15
msgid "Login attempt failed" msgid "Login attempt failed"
msgstr "Tentativa de login falhou" msgstr "Tentativa de login falhou"
#: src/components/command-palette.tsx:157 #: src/components/command-palette.tsx:156
#: src/components/navbar.tsx:86 #: src/components/navbar.tsx:85
msgid "Logs" msgid "Logs"
msgstr "Logs" msgstr "Logs"
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
msgstr "Gerenciar preferências de exibição e notificação." msgstr "Gerenciar preferências de exibição e notificação."
#. Chart select field. Please try to keep this short. #. Chart select field. Please try to keep this short.
#: src/components/routes/system.tsx:571 #: src/components/routes/system.tsx:628
msgid "Max 1 min" msgid "Max 1 min"
msgstr "Máx 1 min" msgstr "Máx 1 min"
#: src/components/systems-table/systems-table.tsx:159 #: src/components/systems-table/systems-table.tsx:165
msgid "Memory" msgid "Memory"
msgstr "Memória" msgstr "Memória"
#: src/components/routes/system.tsx:397 #: src/components/routes/system.tsx:406
#: src/lib/utils.ts:295 #: src/lib/utils.ts:295
msgid "Memory Usage" msgid "Memory Usage"
msgstr "Uso de Memória" msgstr "Uso de Memória"
#: src/components/routes/system.tsx:408 #: src/components/routes/system.tsx:417
msgid "Memory usage of docker containers" msgid "Memory usage of docker containers"
msgstr "Uso de memória dos contêineres Docker" msgstr "Uso de memória dos contêineres Docker"
#: src/components/add-system.tsx:113 #: src/components/add-system.tsx:116
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
#: src/components/systems-table/systems-table.tsx:173 #: src/components/systems-table/systems-table.tsx:181
msgid "Net" msgid "Net"
msgstr "Rede" msgstr "Rede"
#: src/components/routes/system.tsx:453 #: src/components/routes/system.tsx:458
msgid "Network traffic of docker containers" msgid "Network traffic of docker containers"
msgstr "Tráfego de rede dos contêineres Docker" msgstr "Tráfego de rede dos contêineres Docker"
#: src/components/routes/system.tsx:438 #: src/components/routes/system.tsx:443
msgid "Network traffic of public interfaces" msgid "Network traffic of public interfaces"
msgstr "Tráfego de rede das interfaces públicas" msgstr "Tráfego de rede das interfaces públicas"
#: src/components/command-palette.tsx:50 #: src/components/command-palette.tsx:49
msgid "No results found." msgid "No results found."
msgstr "Nenhum resultado encontrado." msgstr "Nenhum resultado encontrado."
#: src/components/systems-table/systems-table.tsx:400 #: src/components/systems-table/systems-table.tsx:421
#: src/components/systems-table/systems-table.tsx:494
msgid "No systems found." msgid "No systems found."
msgstr "Nenhum sistema encontrado." msgstr "Nenhum sistema encontrado."
#: src/components/command-palette.tsx:111 #: src/components/command-palette.tsx:110
#: src/components/routes/settings/layout.tsx:56 #: src/components/routes/settings/layout.tsx:56
#: src/components/routes/settings/notifications.tsx:74 #: src/components/routes/settings/notifications.tsx:74
msgid "Notifications" msgid "Notifications"
msgstr "Notificações" msgstr "Notificações"
#: src/components/login/auth-form.tsx:308 #: src/components/login/auth-form.tsx:284
msgid "OAuth 2 / OIDC support" msgid "OAuth 2 / OIDC support"
msgstr "Suporte a OAuth 2 / OIDC" msgstr "Suporte a OAuth 2 / OIDC"
@@ -482,11 +491,11 @@ msgstr "Suporte a OAuth 2 / OIDC"
msgid "On each restart, systems in the database will be updated to match the systems defined in the file." msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
msgstr "A cada reinício, os sistemas no banco de dados serão atualizados para corresponder aos sistemas definidos no arquivo." msgstr "A cada reinício, os sistemas no banco de dados serão atualizados para corresponder aos sistemas definidos no arquivo."
#: src/components/systems-table/systems-table.tsx:219 #: src/components/systems-table/systems-table.tsx:528
msgid "Open menu" msgid "Open menu"
msgstr "Abrir menu" msgstr "Abrir menu"
#: src/components/login/auth-form.tsx:227 #: src/components/login/auth-form.tsx:203
msgid "Or continue with" msgid "Or continue with"
msgstr "Ou continue com" msgstr "Ou continue com"
@@ -494,28 +503,28 @@ msgstr "Ou continue com"
msgid "Overwrite existing alerts" msgid "Overwrite existing alerts"
msgstr "Sobrescrever alertas existentes" msgstr "Sobrescrever alertas existentes"
#: src/components/command-palette.tsx:85 #: src/components/command-palette.tsx:84
msgid "Page" msgid "Page"
msgstr "Página" msgstr "Página"
#: src/components/command-palette.tsx:72 #: src/components/command-palette.tsx:71
msgid "Pages / Settings" msgid "Pages / Settings"
msgstr "Páginas / Configurações" msgstr "Páginas / Configurações"
#: src/components/login/auth-form.tsx:171 #: src/components/login/auth-form.tsx:147
#: src/components/login/auth-form.tsx:176 #: src/components/login/auth-form.tsx:152
msgid "Password" msgid "Password"
msgstr "Senha" msgstr "Senha"
#: src/components/login/auth-form.tsx:17 #: src/components/login/auth-form.tsx:17
msgid "Password must be at least 10 characters." msgid "Password must be at least 8 characters."
msgstr "A senha deve ter pelo menos 10 caracteres." msgstr "A senha deve ter pelo menos 8 caracteres."
#: src/components/login/forgot-pass-form.tsx:33 #: src/components/login/forgot-pass-form.tsx:33
msgid "Password reset request received" msgid "Password reset request received"
msgstr "Solicitação de redefinição de senha recebida" msgstr "Solicitação de redefinição de senha recebida"
#: src/components/systems-table/systems-table.tsx:241 #: src/components/systems-table/systems-table.tsx:550
msgid "Pause" msgid "Pause"
msgstr "Pausar" msgstr "Pausar"
@@ -523,20 +532,20 @@ msgstr "Pausar"
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."
msgstr "Por favor, <0>configure um servidor SMTP</0> para garantir que os alertas sejam entregues." msgstr "Por favor, <0>configure um servidor SMTP</0> para garantir que os alertas sejam entregues."
#: src/components/alerts/alerts-system.tsx:28 #: src/components/alerts/alerts-system.tsx:25
msgid "Please check logs for more details." msgid "Please check logs for more details."
msgstr "Por favor, verifique os logs para mais detalhes." msgstr "Por favor, verifique os logs para mais detalhes."
#: src/components/login/auth-form.tsx:43 #: src/components/login/auth-form.tsx:35
#: src/components/login/forgot-pass-form.tsx:16 #: src/components/login/forgot-pass-form.tsx:16
msgid "Please check your credentials and try again" msgid "Please check your credentials and try again"
msgstr "Por favor, verifique suas credenciais e tente novamente" msgstr "Por favor, verifique suas credenciais e tente novamente"
#: src/components/login/login.tsx:34 #: src/components/login/login.tsx:36
msgid "Please create an admin account" msgid "Please create an admin account"
msgstr "Por favor, crie uma conta de administrador" msgstr "Por favor, crie uma conta de administrador"
#: src/components/login/auth-form.tsx:257 #: src/components/login/auth-form.tsx:233
msgid "Please enable pop-ups for this site" msgid "Please enable pop-ups for this site"
msgstr "Por favor, habilite pop-ups para este site" msgstr "Por favor, habilite pop-ups para este site"
@@ -544,35 +553,40 @@ msgstr "Por favor, habilite pop-ups para este site"
msgid "Please log in again" msgid "Please log in again"
msgstr "Por favor, faça login novamente" msgstr "Por favor, faça login novamente"
#: src/components/login/auth-form.tsx:316 #: src/components/login/auth-form.tsx:292
msgid "Please see <0>the documentation</0> for instructions." msgid "Please see <0>the documentation</0> for instructions."
msgstr "Por favor, veja <0>a documentação</0> para instruções." msgstr "Por favor, veja <0>a documentação</0> para instruções."
#: src/components/login/login.tsx:38 #: src/components/login/login.tsx:40
msgid "Please sign in to your account" msgid "Please sign in to your account"
msgstr "Por favor, entre na sua conta" msgstr "Por favor, entre na sua conta"
#: src/components/add-system.tsx:125 #: src/components/add-system.tsx:124
msgid "Port" msgid "Port"
msgstr "Porta" msgstr "Porta"
#: src/components/routes/system.tsx:407
#: src/components/routes/system.tsx:523
msgid "Precise utilization at the recorded time"
msgstr "Utilização precisa no momento registrado"
#: src/components/routes/settings/general.tsx:58 #: src/components/routes/settings/general.tsx:58
msgid "Preferred Language" msgid "Preferred Language"
msgstr "Idioma Preferido" msgstr "Idioma Preferido"
#. Use 'Key' if your language requires many more characters #. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx:131 #: src/components/add-system.tsx:128
msgid "Public Key" msgid "Public Key"
msgstr "Chave Pública" msgstr "Chave Pública"
#. Context is disk read #. Disk read
#: src/components/charts/area-chart.tsx:56 #: src/components/charts/area-chart.tsx:60
#: src/components/charts/area-chart.tsx:65 #: src/components/charts/area-chart.tsx:70
msgid "Read" msgid "Read"
msgstr "Ler" msgstr "Ler"
#. Context is network bytes received (download) #. Network bytes received (download)
#: src/components/charts/area-chart.tsx:61 #: src/components/charts/area-chart.tsx:65
msgid "Received" msgid "Received"
msgstr "Recebido" msgstr "Recebido"
@@ -580,7 +594,7 @@ msgstr "Recebido"
msgid "Reset Password" msgid "Reset Password"
msgstr "Redefinir Senha" msgstr "Redefinir Senha"
#: src/components/systems-table/systems-table.tsx:236 #: src/components/systems-table/systems-table.tsx:545
msgid "Resume" msgid "Resume"
msgstr "Retomar" msgstr "Retomar"
@@ -593,11 +607,11 @@ msgstr "Salve o endereço usando a tecla enter ou vírgula. Deixe em branco para
msgid "Save Settings" msgid "Save Settings"
msgstr "Salvar Configurações" msgstr "Salvar Configurações"
#: src/components/navbar.tsx:142 #: src/components/navbar.tsx:133
msgid "Search" msgid "Search"
msgstr "Pesquisar" msgstr "Pesquisar"
#: src/components/command-palette.tsx:47 #: src/components/command-palette.tsx:46
msgid "Search for systems or settings..." msgid "Search for systems or settings..."
msgstr "Pesquisar por sistemas ou configurações..." msgstr "Pesquisar por sistemas ou configurações..."
@@ -605,8 +619,8 @@ msgstr "Pesquisar por sistemas ou configurações..."
msgid "See <0>notification settings</0> to configure how you receive alerts." msgid "See <0>notification settings</0> to configure how you receive alerts."
msgstr "Veja <0>configurações de notificação</0> para configurar como você recebe alertas." msgstr "Veja <0>configurações de notificação</0> para configurar como você recebe alertas."
#. Context is network bytes sent (upload) #. Network bytes sent (upload)
#: src/components/charts/area-chart.tsx:60 #: src/components/charts/area-chart.tsx:64
msgid "Sent" msgid "Sent"
msgstr "Enviado" msgstr "Enviado"
@@ -614,9 +628,9 @@ msgstr "Enviado"
msgid "Sets the default time range for charts when a system is viewed." msgid "Sets the default time range for charts when a system is viewed."
msgstr "Define o intervalo de tempo padrão para gráficos quando um sistema é visualizado." msgstr "Define o intervalo de tempo padrão para gráficos quando um sistema é visualizado."
#: src/components/command-palette.tsx:96 #: src/components/command-palette.tsx:95
#: src/components/command-palette.tsx:99 #: src/components/command-palette.tsx:98
#: src/components/command-palette.tsx:114 #: src/components/command-palette.tsx:113
#: src/components/routes/settings/layout.tsx:71 #: src/components/routes/settings/layout.tsx:71
#: src/components/routes/settings/layout.tsx:82 #: src/components/routes/settings/layout.tsx:82
msgid "Settings" msgid "Settings"
@@ -626,34 +640,40 @@ msgstr "Configurações"
msgid "Settings saved" msgid "Settings saved"
msgstr "Configurações salvas" msgstr "Configurações salvas"
#: src/components/login/auth-form.tsx:215 #: src/components/login/auth-form.tsx:191
msgid "Sign in" msgid "Sign in"
msgstr "Entrar" msgstr "Entrar"
#: src/components/command-palette.tsx:201 #: src/components/command-palette.tsx:185
msgid "SMTP settings" msgid "SMTP settings"
msgstr "Configurações SMTP" msgstr "Configurações SMTP"
#: src/components/systems-table/systems-table.tsx:308
msgid "Sort By"
msgstr "Ordenar Por"
#: src/lib/utils.ts:282 #: src/lib/utils.ts:282
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: src/components/routes/system.tsx:467 #: src/components/routes/system.tsx:473
msgid "Swap space used by the system" msgid "Swap space used by the system"
msgstr "Espaço de swap usado pelo sistema" msgstr "Espaço de swap usado pelo sistema"
#: src/components/routes/system.tsx:466 #: src/components/routes/system.tsx:472
msgid "Swap Usage" msgid "Swap Usage"
msgstr "Uso de Swap" msgstr "Uso de Swap"
#. System theme #. System theme
#: src/components/mode-toggle.tsx:26 #: src/components/mode-toggle.tsx:26
#: src/components/systems-table/systems-table.tsx:110 #: src/components/systems-table/systems-table.tsx:117
#: src/components/systems-table/systems-table.tsx:121 #: src/components/systems-table/systems-table.tsx:125
#: src/components/systems-table/systems-table.tsx:136
#: src/components/systems-table/systems-table.tsx:465
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: src/components/navbar.tsx:78 #: src/components/navbar.tsx:77
msgid "Systems" msgid "Systems"
msgstr "Sistemas" msgstr "Sistemas"
@@ -661,12 +681,16 @@ msgstr "Sistemas"
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory." msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
msgstr "Os sistemas podem ser gerenciados em um arquivo <0>config.yml</0> dentro do seu diretório de dados." msgstr "Os sistemas podem ser gerenciados em um arquivo <0>config.yml</0> dentro do seu diretório de dados."
#: src/components/routes/system.tsx:477 #: src/components/systems-table/systems-table.tsx:296
msgid "Table"
msgstr "Tabela"
#: src/components/routes/system.tsx:484
#: src/lib/utils.ts:314 #: src/lib/utils.ts:314
msgid "Temperature" msgid "Temperature"
msgstr "Temperatura" msgstr "Temperatura"
#: src/components/routes/system.tsx:478 #: src/components/routes/system.tsx:485
msgid "Temperatures of system sensors" msgid "Temperatures of system sensors"
msgstr "Temperaturas dos sensores do sistema" msgstr "Temperaturas dos sensores do sistema"
@@ -678,11 +702,11 @@ msgstr "Testar <0>URL</0>"
msgid "Test notification sent" msgid "Test notification sent"
msgstr "Notificação de teste enviada" msgstr "Notificação de teste enviada"
#: src/components/add-system.tsx:104 #: src/components/add-system.tsx:108
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below." msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
msgstr "O agente deve estar em execução no sistema para conectar. Copie o comando de instalação para o agente abaixo." msgstr "O agente deve estar em execução no sistema para conectar. Copie o comando de instalação para o agente abaixo."
#: src/components/add-system.tsx:95 #: src/components/add-system.tsx:99
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below." msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
msgstr "O agente deve estar em execução no sistema para conectar. Copie o <0>docker-compose.yml</0> para o agente abaixo." msgstr "O agente deve estar em execução no sistema para conectar. Copie o <0>docker-compose.yml</0> para o agente abaixo."
@@ -690,15 +714,15 @@ msgstr "O agente deve estar em execução no sistema para conectar. Copie o <0>d
msgid "Then log into the backend and reset your user account password in the users table." msgid "Then log into the backend and reset your user account password in the users table."
msgstr "Em seguida, faça login no backend e redefina a senha da sua conta de usuário na tabela de usuários." msgstr "Em seguida, faça login no backend e redefina a senha da sua conta de usuário na tabela de usuários."
#: src/components/systems-table/systems-table.tsx:264 #: src/components/systems-table/systems-table.tsx:573
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database." msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Esta ação não pode ser desfeita. Isso excluirá permanentemente todos os registros atuais de {name} do banco de dados." msgstr "Esta ação não pode ser desfeita. Isso excluirá permanentemente todos os registros atuais de {name} do banco de dados."
#: src/components/routes/system.tsx:507 #: src/components/routes/system.tsx:564
msgid "Throughput of {extraFsName}" msgid "Throughput of {extraFsName}"
msgstr "Taxa de transferência de {extraFsName}" msgstr "Taxa de transferência de {extraFsName}"
#: src/components/routes/system.tsx:427 #: src/components/routes/system.tsx:432
msgid "Throughput of root filesystem" msgid "Throughput of root filesystem"
msgstr "Taxa de transferência do sistema de arquivos raiz" msgstr "Taxa de transferência do sistema de arquivos raiz"
@@ -706,8 +730,8 @@ msgstr "Taxa de transferência do sistema de arquivos raiz"
msgid "To email(s)" msgid "To email(s)"
msgstr "Para email(s)" msgstr "Para email(s)"
#: src/components/routes/system.tsx:350 #: src/components/routes/system.tsx:359
#: src/components/routes/system.tsx:363 #: src/components/routes/system.tsx:372
msgid "Toggle grid" msgid "Toggle grid"
msgstr "Alternar grade" msgstr "Alternar grade"
@@ -731,10 +755,6 @@ msgstr "Dispara quando o uso de CPU excede um limite"
msgid "Triggers when memory usage exceeds a threshold" msgid "Triggers when memory usage exceeds a threshold"
msgstr "Dispara quando o uso de memória excede um limite" msgstr "Dispara quando o uso de memória excede um limite"
#: src/components/routes/system.tsx:398
msgid "Triggers when memory usage exceeds a threshold."
msgstr "Dispara quando o uso de memória excede um limite."
#: src/lib/utils.ts:285 #: src/lib/utils.ts:285
msgid "Triggers when status switches between up and down" msgid "Triggers when status switches between up and down"
msgstr "Dispara quando o status alterna entre ativo e inativo" msgstr "Dispara quando o status alterna entre ativo e inativo"
@@ -743,41 +763,44 @@ msgstr "Dispara quando o status alterna entre ativo e inativo"
msgid "Triggers when usage of any disk exceeds a threshold" msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Dispara quando o uso de qualquer disco excede um limite" msgstr "Dispara quando o uso de qualquer disco excede um limite"
#: src/components/systems-table/systems-table.tsx:320 #: src/components/systems-table/systems-table.tsx:269
msgid "Updated in real time. Click on a system to view information." msgid "Updated in real time. Click on a system to view information."
msgstr "Atualizado em tempo real. Clique em um sistema para ver informações." msgstr "Atualizado em tempo real. Clique em um sistema para ver informações."
#: src/components/routes/system.tsx:253 #: src/components/routes/system.tsx:261
msgid "Uptime" msgid "Uptime"
msgstr "Tempo de Atividade" msgstr "Tempo de Atividade"
#: src/components/routes/system.tsx:494 #: src/components/charts/area-chart.tsx:73
#: src/components/routes/system.tsx:514
#: src/components/routes/system.tsx:551
msgid "Usage" msgid "Usage"
msgstr "Uso" msgstr "Uso"
#: src/components/routes/system.tsx:415 #: src/components/routes/system.tsx:424
msgid "Usage of root partition" msgid "Usage of root partition"
msgstr "Uso da partição raiz" msgstr "Uso da partição raiz"
#: src/components/charts/area-chart.tsx:73
#: src/components/charts/mem-chart.tsx:65 #: src/components/charts/mem-chart.tsx:65
#: src/components/charts/swap-chart.tsx:56 #: src/components/charts/swap-chart.tsx:56
msgid "Used" msgid "Used"
msgstr "Usado" msgstr "Usado"
#: src/components/login/auth-form.tsx:138 #: src/components/command-palette.tsx:142
msgid "username" #: src/components/navbar.tsx:69
msgstr "nome de usuário"
#: src/components/login/auth-form.tsx:131
msgid "Username"
msgstr "Nome de usuário"
#: src/components/command-palette.tsx:143
#: src/components/navbar.tsx:70
msgid "Users" msgid "Users"
msgstr "Usuários" msgstr "Usuários"
#: src/components/routes/system.tsx:603 #: src/components/systems-table/systems-table.tsx:278
msgid "View"
msgstr "Visual"
#: src/components/systems-table/systems-table.tsx:342
msgid "Visible Fields"
msgstr "Campos Visíveis"
#: src/components/routes/system.tsx:662
msgid "Waiting for enough records to display" msgid "Waiting for enough records to display"
msgstr "Aguardando registros suficientes para exibir" msgstr "Aguardando registros suficientes para exibir"
@@ -789,9 +812,9 @@ msgstr "Quer nos ajudar a melhorar ainda mais nossas traduções? Confira <0>Cro
msgid "Webhook / Push notifications" msgid "Webhook / Push notifications"
msgstr "Notificações Webhook / Push" msgstr "Notificações Webhook / Push"
#. Context is disk write #. Disk write
#: src/components/charts/area-chart.tsx:55 #: src/components/charts/area-chart.tsx:59
#: src/components/charts/area-chart.tsx:66 #: src/components/charts/area-chart.tsx:69
msgid "Write" msgid "Write"
msgstr "Escrever" msgstr "Escrever"

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More