feat: daemon health panel, brand-rail status chips, user timezone selector
Build / build (push) Successful in 10m35s

- Health API now surfaces Docker /info + /version (version, platform,
  kernel, container/image counts, storage driver, memory, latency) and
  NPM aggregates (proxy host total, managed-by-Tinyforge count, access
  lists, certificates, endpoint URL).
- Docker/NPM indicators moved out of the sidebar footer and into a
  compact mono-styled rail directly under the Tinyforge brand title,
  with pulse/fault animations and click-to-expand error hints.
- New SystemDaemonsCard on the dashboard: two terminal-styled panels
  (Docker Engine + Proxy) with a running/paused/stopped stacked bar,
  key-value diagnostics, and a total-vs-managed proportion meter on
  the proxy-hosts tile.
- Shared health store so the sidebar and dashboard share a single
  30 s poll instead of duplicating traffic.
- User-facing timezone preference with auto-detect fallback; all
  dates across projects, sites, stacks, settings, backup, event log
  and stale containers now render through \$fmt.date / \$fmt.datetime.
- en/ru translations for both features.
This commit is contained in:
2026-04-23 14:32:30 +03:00
parent a182a93950
commit 90e6e59d9e
24 changed files with 2267 additions and 177 deletions
+58
View File
@@ -859,6 +859,43 @@
"proxies": "Proxies",
"recentErrors": "Recent Errors"
},
"daemons": {
"title": "Daemons",
"refresh": "Refresh",
"refreshing": "Refreshing",
"docker": "Docker Engine",
"npm": "Nginx Proxy Manager",
"traefik": "Traefik",
"proxy": "Proxy",
"online": "Online",
"offline": "Offline",
"notConfigured": "Not configured",
"containers": "Containers",
"running": "Running",
"paused": "Paused",
"stopped": "Stopped",
"version": "Version",
"apiVersion": "API Version",
"platform": "Platform",
"kernel": "Kernel",
"cpu": "CPU",
"memory": "Memory",
"storage": "Storage Driver",
"images": "Images",
"latency": "Latency",
"rootDir": "Root Dir",
"provider": "Provider",
"endpoint": "Endpoint",
"proxyHosts": "Proxy Hosts",
"managed": "managed",
"external": "external",
"accessLists": "Access Lists",
"certificates": "Certificates",
"dockerHint": "Check that the Docker daemon is running and that the socket is reachable.",
"proxyHint": "Verify the proxy URL, credentials, and that the service is listening.",
"noProxyDesc": "No proxy provider is configured. Tinyforge can manage routes via Nginx Proxy Manager or Traefik.",
"configureProxy": "Configure in Settings"
},
"dns": {
"title": "DNS Records",
"description": "View and manage DNS records created by Tinyforge.",
@@ -1021,5 +1058,26 @@
"fetchLogs": "Failed to load logs"
}
}
},
"timezone": {
"eyebrow": "The Forge // Chronograph",
"title": "Display timezone",
"subtitle": "All dates across Tinyforge — event log, deploys, backups, sites — render in this zone.",
"modeLabel": "Detection mode",
"modeAuto": "Auto-detect",
"modeManual": "Manual",
"autoDetect": "Auto-detect from browser",
"autoBadge": "Auto",
"activeZone": "Active zone",
"changeZone": "Change timezone",
"clickToChange": "Click to pick a zone →",
"pickerTitle": "Select timezone",
"pickerPlaceholder": "Search zones — city, region, UTC offset…",
"groupAuto": "Detection",
"groupPopular": "Popular",
"groupAll": "All timezones",
"previewFull": "Full timestamp",
"previewDate": "Date only",
"previewHint": "Timestamps like the event log will look exactly like this."
}
}