Skip to content

Releases: IGNGserver/guanlan-monitor

Device State Console v3.0.171 (测试版)

Choose a tag to compare

@github-actions github-actions released this 04 Nov 11:00

观澜 v3.0.171(测试版)

本版本支持将中枢连接到自管的 MySQL / Redis,并显著降低远端数据库和高延迟环境下的读取成本。默认的 bundled Compose 部署保持不变。

主要变更

  • 外部数据库模式:新增 docker-compose.external.yml,只启动 server / web;MYSQL_URL、REDIS_URL 支持 mysql://、redis://、rediss://。
  • 实例隔离:DSC_INSTANCE_ID 为 Redis key 加 dsc:<instance-id> 前缀;MySQL hub_meta 记录实例,外部模式还持有单写者 advisory lock,避免多个中枢误写同一数据库。
  • 部署链路:预检和部署脚本识别 DSC_DB_MODE=external,不再改写外部 URL,也不再启动本地 MySQL/Redis。
  • 延迟优化:流量日历只查询计数器列;历史写入合并为多行 UPSERT;启动 schema 检查批量化;连接池和查询超时均可配置。
  • 读取缓存:新增进程内 L1 TTL 缓存和可选的 Redis L2 缓存,写入后按设备失效;当前分钟/小时数据仍在缓存之后覆盖。
  • 安全:生产环境缺少数据库 URL 时不再静默回退本地 JSON;外部模式要求非 default 的实例 ID;URL scheme、危险 MySQL 参数和时区均有校验。

升级提示

  • 继续使用内置 MySQL/Redis 的用户不需要修改 .env。
  • 使用外部数据库时设置 DSC_DB_MODE=external,并为每个中枢设置唯一的 DSC_INSTANCE_ID;每个中枢必须使用独立 database。
  • 外部 MySQL 需要 8.0+,应用需要在该 database 内建表/改表权限。
  • 外部模式会持有 MySQL advisory lock,因此不能同时运行两个写同一 database 的中枢进程。

验证

  • 完整 CI(构建、服务端测试、Web/Electron visual、Android、Go、Windows)通过。
  • 真实 MySQL 8.4 + Redis 查询回归通过。
  • 发布资产均已生成 .sha256 并校验;Windows setup、Linux deb、Android APK、Windows portable/update 校验一致。
  • 镜像:ghcr.io/igngserver/device-state-console-server:3.0.171、ghcr.io/igngserver/device-state-console-web:3.0.171(测试渠道,未更新 latest)。

这是测试版(pre-release),不是正式稳定版,也不代表生产部署。 完整变更:v3.0.170...v3.0.171

Device State Console v3.0.170 (测试版)

Choose a tag to compare

@github-actions github-actions released this 01 Nov 09:17
5d6b7d5
Release v3.0.170

Device State Console v3.0.169 (测试版)

Choose a tag to compare

@github-actions github-actions released this 31 Oct 10:00
5928672
Release v3.0.169

Device State Console v3.0.168

Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 11:55
70b13f7
Guanlan 3.0.168 stable release

Device State Console v3.0.167

Choose a tag to compare

@github-actions github-actions released this 24 Oct 13:57
0390fa1

Device State Console v3.0.167

Lower whole-Hub resource use

  • Reduce repeated work across telemetry ingestion, aggregation, Redis read models, history queries, and overview responses while preserving existing telemetry, history, gap, valid-zero, counter, retention, and client-compatibility semantics.
  • Serve the production Web bundle as static files behind the fixed internal API proxy, with explicit trusted-proxy handling for externally terminated TLS.
  • Reuse exact aggregate snapshots when inputs are unchanged; approximate rolling aggregates and storage migrations are not enabled.
  • Keep the existing Node.js and MySQL architecture. Go and SQLite experiments did not establish a net whole-stack benefit and are not part of the production path.

Recovery and compatibility

  • Bound background work and improve readiness checks so the Hub does not report ready while MySQL is unavailable.
  • No database migration or client credential change is required. Existing persisted Redis/MySQL data remains authoritative, and old images can read the existing formats.
  • When TLS is terminated by an external proxy, configure DSC_TRUSTED_TLS_PROXY_CIDRS to the actual isolated proxy source range before deployment; the default remains fail-closed.

Performance evidence and limitations

  • An isolated synthetic run observed lower stack CPU and sampled peak memory for the candidate build. These are single-run observations, not production or statistically stable savings; some block-I/O evidence was unavailable.
  • Production-scale concurrency, full-year history, realistic live-RPC load, and a 24–72-hour soak remain unverified. Do not treat these measurements as a production performance guarantee.
  • The tag-triggered release workflow runs platform tests and artifact verification on GitHub Actions. PR #95 also passed the isolated database, browser, recovery, and rollback gates documented in docs/performance/HUB_OPTIMIZATION.md.

Device State Console v3.0.166

Choose a tag to compare

@github-actions github-actions released this 22 Oct 15:16
e2086e5

Device State Console v3.0.166

Long-lived browser login

  • Browser sessions now last 90 days instead of eight hours. Requests made near the end of the window slide the expiry forward, so an actively used console no longer forces the access key to be re-entered every workday.
  • A session is capped at 365 days from the original login and then needs a fresh login, even if it has stayed active.
  • The original issuedAt is preserved during renewal. The web client uses it as its cache scope, so renewing does not discard the open view or its offline snapshot.
  • Existing eight-hour cookies remain valid and are renewed on their next authenticated request; deployment does not force everyone to sign in again.
  • Desktop, Android and iOS credentials, and Agent Bearer keys, are unchanged. iOS now restores a Keychain-backed session automatically on cold launch instead of stopping at the login screen.

Security and operations

  • The browser session is still a signed, HttpOnly, SameSite=Lax cookie and is bound to the current ACCESS_KEY. Rotating SESSION_SECRET invalidates all Web sessions without affecting Agents; rotating ACCESS_KEY invalidates all clients and Agents.
  • Logout clears the browser copy, but a copied stateless cookie cannot be revoked individually before it expires. Rotate the secrets if a browser profile is lost or exposed.
  • No database migration is required. This release changes only the session lifetime and client login presentation.

Validation

  • Server auth unit and HTTP route tests cover sliding renewal, the one-year cap, legacy cookie compatibility, credential binding and expired-session rejection.
  • Full CI, platform builds and the release asset checks run on the version tag; the stable Docker image is published separately and resolved by immutable digest for production.

Device State Console v3.0.165 (测试版)

Choose a tag to compare

@github-actions github-actions released this 22 Oct 04:54
8e617db

Device State Console v3.0.165

Android tablet and landscape experience

  • One UI navigation & layout: Enabled OneUiNavigationRail for Medium and Expanded viewports (folding devices, tablets, and landscape phones), recovering vertical height by eliminating the bottom navigation bar.
  • Master-detail two-pane layout: Restricted two-pane master-detail strictly to the Overview destination (DeviceList / DeviceDetail / Traffic). The left device list highlights the currently selected device, and the right detail pane opens the selected device by default instead of leaving an empty state placeholder.
  • Consistent top-level destinations: Attention and Settings remain full-width standalone destinations across portrait, landscape, and tablets, keeping top-level navigation mental models identical.
  • Embedded pane alignment: Introduced OneUiEmbeddedPane so embedded panes automatically align top bars, group headers, and list cards with a unified 16 dp margin, eliminating double-margin indentations.
  • Dense landscape detail and traffic views: Combined the detail tab segmented row and range chips into a single row on wide screens, added a horizontal block quick-switch bar in hardware detail, and redesigned the traffic screen into a side-by-side calendar and range records view.

Validation

  • Android contract tests and tablet landscape Robolectric smoke renders passed in CI.
  • Full verification passed in CI across all platforms.

Device State Console v3.0.164

Choose a tag to compare

@github-actions github-actions released this 21 Oct 23:34
14d31e5

Device State Console v3.0.164

Safari web app icon

  • Safari's Add to Dock now receives valid opaque 1024×1024 any and maskable icons. The previous set topped out at 512 px and the 512 "any" asset still had transparent rounded corners, so Safari fell back to a letter tile.
  • Regenerated the 1024/512/192 and Apple touch icons from the existing 1254 px source, and served /manifest.json with application/manifest+json.
  • Added apps/web/scripts/pwa-icons.test.mjs so every manifest icon is checked for declared dimensions, PNG signature, and opaque RGB color before release.

Included from v3.0.163

  • The three Android home screen widgets (Fleet, Device, Traffic) remain included: 15-minute WorkManager refresh, per-instance device configuration, stale/error states, and deep links into the app.

Validation

  • The new PWA icon regression test runs as part of test:web-pwa; the main CI run that merged #87 passed.
  • Release assets and Docker images are rebuilt by the version-tag and stable workflows.

Known limitations

  • The Android widget refresh follows the Android WorkManager minimum of 15 minutes; Doze and vendor battery policies may delay it further.
  • This release does not add an in-app widget settings screen or change any server API.

Device State Console v3.0.163

Choose a tag to compare

@github-actions github-actions released this 21 Oct 16:24
0002094

Device State Console v3.0.163

Android home screen widgets

  • Added three One UI home screen widgets: Fleet (4×1 / 4×2 / 4×4), Device (2×2 / 4×2), and Traffic (2×2 / 4×2).
  • Widgets use the app's One UI palette, tabular figures, system widget radius, and system light/dark resources. The CPU gauge, sparkline, and daily bars are drawn by Canvas so the widgets keep the app's visual language.
  • Refresh runs through WorkManager at the Android minimum of 15 minutes, with a manual refresh action. The last successful snapshot is retained; offline, stale, and refresh-failure states are shown explicitly instead of fake readings.
  • Device and Traffic widgets keep a per-instance device selection and support long-press reconfiguration.
  • Tapping a widget row or card deep-links into the existing Device Detail or Traffic screen. If the app is not signed in yet, the destination is applied after auto-login.
  • Logging out or changing the Hub clears the widget snapshot to avoid leaving another account's hostnames on the home screen.
  • No server, Web, or desktop API changes.

Validation

  • Android: :app:assembleDebug, :app:testDebugUnitTest, :app:lintDebug, and a local unsigned :app:assembleRelease (R8) passed; the Verify Android One UI client CI job passed.
  • WidgetRenderTest expands every RemoteViews variant, catching unsupported views and missing view ids that would fail at launcher inflation time.
  • Release assets are built again by the version-tag release workflow.

Known limitations

  • Home screen refresh is bounded by the Android WorkManager minimum of 15 minutes; Doze and vendor battery policies may delay it further. The widget shows its last successful update and provides a manual refresh action.
  • Android 12+ uses previewLayout for the picker preview; Android 10/11 show the app icon as the widget preview.
  • Chart bitmaps use the theme colors at render time and are redrawn on the next refresh after a system theme change.
  • There is no in-app widget settings screen yet; the refresh cadence is fixed at 15 minutes.

Device State Console v3.0.162

Choose a tag to compare

@github-actions github-actions released this 21 Oct 11:57
71490c1

Device State Console v3.0.162

Stable database compatibility

  • Stable server deployments now accept non-placeholder MySQL application-account passwords with at least 6 characters, matching existing installations that use a short credential.
  • Stable Compose preflight preserves the active password from MYSQL_URL instead of replacing it with a stale MySQL initialization password.
  • The MySQL root password requirement remains at least 16 characters in stable deployments. Six-character application passwords have lower resistance to guessing; use a longer random value whenever possible and keep MySQL private to the Compose network.

Deployment reliability

  • Production deployment now propagates remote SSH/SCP failures so a rejected preflight or failed health check cannot be reported as a successful deployment.