From df0f3a154f501f0d5af285b605ef4933e9b7aedf Mon Sep 17 00:00:00 2001 From: Henry Dollman Date: Thu, 31 Oct 2024 16:48:28 -0400 Subject: [PATCH] rtl layout progress and updates to arabic translations --- beszel/internal/agent/agent.go | 16 +- beszel/internal/agent/docker.go | 30 +- beszel/site/bun.lockb | Bin 157685 -> 158082 bytes beszel/site/index.html | 2 +- beszel/site/package-lock.json | 19 +- beszel/site/package.json | 2 + beszel/site/src/components/add-system.tsx | 21 +- .../src/components/alerts/alert-button.tsx | 4 +- .../site/src/components/command-palette.tsx | 20 +- beszel/site/src/components/logo.tsx | 11 +- beszel/site/src/components/navbar.tsx | 15 +- beszel/site/src/components/routes/home.tsx | 4 +- .../routes/settings/config-yaml.tsx | 1 + .../systems-table/systems-table.tsx | 12 +- .../site/src/components/ui/alert-dialog.tsx | 4 +- beszel/site/src/components/ui/command.tsx | 4 +- beszel/site/src/components/ui/dialog.tsx | 6 +- beszel/site/src/components/ui/switch.tsx | 2 +- beszel/site/src/components/ui/table.tsx | 2 +- beszel/site/src/lib/i18n.ts | 4 + beszel/site/src/lib/languages.json | 4 + beszel/site/src/lib/stores.ts | 3 + beszel/site/src/locales/ar/translation.json | 450 +++++++++--------- beszel/site/src/main.tsx | 46 +- beszel/site/tailwind.config.js | 1 + 25 files changed, 361 insertions(+), 322 deletions(-) diff --git a/beszel/internal/agent/agent.go b/beszel/internal/agent/agent.go index 6117263..e7b2030 100644 --- a/beszel/internal/agent/agent.go +++ b/beszel/internal/agent/agent.go @@ -84,18 +84,22 @@ func (a *Agent) Run(pubKey []byte, addr string) { func (a *Agent) gatherStats() system.CombinedData { slog.Debug("Getting stats") - systemData := system.CombinedData{ - Stats: a.getSystemStats(), - Info: a.systemInfo, - } - slog.Debug("System stats", "data", systemData) - // add docker stats + // systemData := system.CombinedData{ + // Stats: a.getSystemStats(), + // Info: a.systemInfo, + // } + systemData := system.CombinedData{} + // add docker stats (testing doing this first for docker 24) if containerStats, err := a.dockerManager.getDockerStats(); err == nil { systemData.Containers = containerStats slog.Debug("Docker stats", "data", systemData.Containers) } else { 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 systemData.Stats.ExtraFs = make(map[string]*system.FsStats) for name, stats := range a.fsStats { diff --git a/beszel/internal/agent/docker.go b/beszel/internal/agent/docker.go index 178951c..6fab85d 100644 --- a/beszel/internal/agent/docker.go +++ b/beszel/internal/agent/docker.go @@ -25,18 +25,23 @@ type dockerManager struct { apiContainerList *[]container.ApiInfo // List of containers from Docker API containerStatsMap map[string]*container.Stats // Keeps track of container stats validIds map[string]struct{} // Map of valid container ids, used to prune invalid containers from containerStatsMap + goodDockerVersion bool // Whether docker version is at least 25.0.0 (one-shot works correctly) } // Add goroutine to the queue func (d *dockerManager) queue() { - d.sem <- struct{}{} d.wg.Add(1) + if d.goodDockerVersion { + d.sem <- struct{}{} + } } // Remove goroutine from the queue func (d *dockerManager) dequeue() { - <-d.sem d.wg.Done() + if d.goodDockerVersion { + <-d.sem + } } // Returns stats for all running containers @@ -47,6 +52,11 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) { } 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 { return nil, err } @@ -89,11 +99,11 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) { // retry failed containers separately so we can run them in parallel (docker 24 bug) if len(failedContainters) > 0 { slog.Debug("Retrying failed containers", "count", len(failedContainters)) - // time.Sleep(time.Millisecond * 1100) + time.Sleep(time.Millisecond * 1100) // this is a test for docker 24 bug for _, ctr := range failedContainters { - dm.wg.Add(1) + dm.queue() go func() { - defer dm.wg.Done() + defer dm.dequeue() err = dm.updateContainerStats(ctr) if err != nil { slog.Error("Error getting container stats", "err", err) @@ -251,12 +261,9 @@ func newDockerManager() *dockerManager { Transport: transport, }, containerStatsMap: make(map[string]*container.Stats), + sem: make(chan struct{}, 5), } - // Make sure sem is initialized - concurrency := 200 - defer func() { dockerClient.sem = make(chan struct{}, concurrency) }() - // Check docker version // (versions before 25.0.0 have a bug with one-shot which requires all requests to be made in one batch) var versionInfo struct { @@ -273,9 +280,10 @@ func newDockerManager() *dockerManager { // if version > 24, one-shot works correctly and we can limit concurrent operations if dockerVersion, err := semver.Parse(versionInfo.Version); err == nil && dockerVersion.Major > 24 { - concurrency = 5 + dockerClient.goodDockerVersion = true + } else { + slog.Info(fmt.Sprintf("Docker %s is outdated. Upgrade if possible. See https://github.com/henrygd/beszel/issues/58", versionInfo.Version)) } - slog.Debug("Docker", "version", versionInfo.Version, "concurrency", concurrency) return dockerClient } diff --git a/beszel/site/bun.lockb b/beszel/site/bun.lockb index 6d9583e3d7b5a6e2f40609076c5af17036ee2169..fdb646cf72b32720ab093892c73dcd91a9f9bb63 100755 GIT binary patch delta 24300 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 F{4aosuV?@O diff --git a/beszel/site/index.html b/beszel/site/index.html index 726bf8b..e772f4b 100644 --- a/beszel/site/index.html +++ b/beszel/site/index.html @@ -1,5 +1,5 @@ - + diff --git a/beszel/site/package-lock.json b/beszel/site/package-lock.json index 873fedb..24c81eb 100644 --- a/beszel/site/package-lock.json +++ b/beszel/site/package-lock.json @@ -14,6 +14,7 @@ "@radix-ui/react-alert-dialog": "^1.1.2", "@radix-ui/react-checkbox": "^1.1.2", "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-direction": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-select": "^2.1.2", @@ -31,7 +32,6 @@ "cmdk": "^1.0.0", "d3-time": "^3.1.0", "i18next": "^23.16.4", - "i18next-browser-languagedetector": "^8.0.0", "lucide-react": "^0.452.0", "nanostores": "^0.11.3", "pocketbase": "^0.21.5", @@ -50,6 +50,7 @@ "autoprefixer": "^10.4.20", "postcss": "^8.4.47", "tailwindcss": "^3.4.14", + "tailwindcss-rtl": "^0.9.0", "typescript": "^5.6.3", "vite": "^5.4.9" }, @@ -4153,15 +4154,6 @@ "@babel/runtime": "^7.23.2" } }, - "node_modules/i18next-browser-languagedetector": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz", - "integrity": "sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2" - } - }, "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", @@ -5344,6 +5336,13 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/tailwindcss-rtl": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/tailwindcss-rtl/-/tailwindcss-rtl-0.9.0.tgz", + "integrity": "sha512-y7yC8QXjluDBEFMSX33tV6xMYrf0B3sa+tOB5JSQb6/G6laBU313a+Z+qxu55M1Qyn8tDMttjomsA8IsJD+k+w==", + "dev": true, + "license": "MIT" + }, "node_modules/tailwindcss/node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", diff --git a/beszel/site/package.json b/beszel/site/package.json index 140b812..7535aed 100644 --- a/beszel/site/package.json +++ b/beszel/site/package.json @@ -15,6 +15,7 @@ "@radix-ui/react-alert-dialog": "^1.1.2", "@radix-ui/react-checkbox": "^1.1.2", "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-direction": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-select": "^2.1.2", @@ -50,6 +51,7 @@ "autoprefixer": "^10.4.20", "postcss": "^8.4.47", "tailwindcss": "^3.4.14", + "tailwindcss-rtl": "^0.9.0", "typescript": "^5.6.3", "vite": "^5.4.9" }, diff --git a/beszel/site/src/components/add-system.tsx b/beszel/site/src/components/add-system.tsx index cc27dad..f90d846 100644 --- a/beszel/site/src/components/add-system.tsx +++ b/beszel/site/src/components/add-system.tsx @@ -41,8 +41,7 @@ export function AddSystemButton({ className }: { className?: string }) { # - /mnt/disk1/.beszel:/extra-filesystems/disk1:ro environment: PORT: ${port} - KEY: "${publicKey}" - # FILESYSTEM: /dev/sda1 # override the root partition / device for disk I/O stats`) + KEY: "${publicKey}"`) } function copyInstallCommand(port: string) { @@ -73,7 +72,7 @@ export function AddSystemButton({ className }: { className?: string }) { variant="outline" className={cn("flex gap-1 max-xs:h-[2.4rem]", className, isReadOnlyUser() && "hidden")} > - + {t("add")} {t("system")} @@ -104,31 +103,31 @@ export function AddSystemButton({ className }: { className?: string }) {
-
-
-
-
{/* Docker */} - + @@ -161,7 +160,7 @@ export function AddSystemButton({ className }: { className?: string }) { {/* Binary */} - + diff --git a/beszel/site/src/components/alerts/alert-button.tsx b/beszel/site/src/components/alerts/alert-button.tsx index 660775a..e62bb50 100644 --- a/beszel/site/src/components/alerts/alert-button.tsx +++ b/beszel/site/src/components/alerts/alert-button.tsx @@ -78,11 +78,11 @@ function TheContent({ - + {system.name} - + {t("all_systems")} diff --git a/beszel/site/src/components/command-palette.tsx b/beszel/site/src/components/command-palette.tsx index a5efe2c..b360fad 100644 --- a/beszel/site/src/components/command-palette.tsx +++ b/beszel/site/src/components/command-palette.tsx @@ -59,7 +59,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp setOpen(false) }} > - + {system.name} {system.host} @@ -76,7 +76,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp setOpen(false) }} > - + {t("command.dashboard")} {t("command.page")} @@ -86,7 +86,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp setOpen(false) }} > - + {t("settings.settings")} {t("settings.settings")} @@ -97,7 +97,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp setOpen(false) }} > - + {t("settings.notifications.title")} {t("settings.settings")} @@ -107,7 +107,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp window.location.href = "https://github.com/henrygd/beszel/blob/main/readme.md" }} > - + {t("command.documentation")} GitHub @@ -123,7 +123,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp window.open("/_/", "_blank") }} > - + {t("user_dm.users")} {t("command.admin")} @@ -133,7 +133,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp window.open("/_/#/logs", "_blank") }} > - + {t("user_dm.logs")} {t("command.admin")} @@ -143,7 +143,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp window.open("/_/#/settings/backups", "_blank") }} > - + {t("user_dm.backups")} {t("command.admin")} @@ -154,7 +154,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp window.open("/_/#/settings/auth-providers", "_blank") }} > - + {t("user_dm.auth_providers")} {t("command.admin")} @@ -165,7 +165,7 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp window.open("/_/#/settings/mail", "_blank") }} > - + {t("command.SMTP_settings")} {t("command.admin")} diff --git a/beszel/site/src/components/logo.tsx b/beszel/site/src/components/logo.tsx index e85e657..07bf3df 100644 --- a/beszel/site/src/components/logo.tsx +++ b/beszel/site/src/components/logo.tsx @@ -2,7 +2,16 @@ export function Logo({ className }: { className?: string }) { return ( // Righteous - + {/* + + + + + */} + ) } diff --git a/beszel/site/src/components/navbar.tsx b/beszel/site/src/components/navbar.tsx index 47299d3..fa25d61 100644 --- a/beszel/site/src/components/navbar.tsx +++ b/beszel/site/src/components/navbar.tsx @@ -38,13 +38,12 @@ export default function Navbar() { const { t } = useTranslation() return (
- - + + - -
+
- +
) @@ -125,14 +124,14 @@ function SearchButton({ t }: { t: TFunction<"translation", undefined> }) { <>
@@ -122,7 +122,7 @@ export default function () { {hubVersion && ( -
+
{configContent && (