From 4d10ea2e03678ac27d41bae1fd9505113f18b36c Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Thu, 24 Sep 2026 23:45:59 +0200 Subject: [PATCH] feat: add `SYNC_SYSTEM_NAMES` env var to sync system names with hostname (#1917) --- internal/hub/systems/system.go | 4 +++ internal/hub/systems/system_sync_name_test.go | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 internal/hub/systems/system_sync_name_test.go diff --git a/internal/hub/systems/system.go b/internal/hub/systems/system.go index a93d69e3..469c1e06 100644 --- a/internal/hub/systems/system.go +++ b/internal/hub/systems/system.go @@ -279,6 +279,10 @@ func (sys *System) createRecords(data *system.CombinedData) (*core.Record, error if err := createSystemDetailsRecord(txApp, data.Details, sys.Id); err != nil { return err } + // sync display name with hostname if enabled (details are fetched once per agent connection) + if syncNames, _ := utils.GetEnv("SYNC_SYSTEM_NAMES"); syncNames == "true" && data.Details.Hostname != "" { + systemRecord.Set("name", data.Details.Hostname) + } } if data.Monitors != nil { diff --git a/internal/hub/systems/system_sync_name_test.go b/internal/hub/systems/system_sync_name_test.go new file mode 100644 index 00000000..339b6566 --- /dev/null +++ b/internal/hub/systems/system_sync_name_test.go @@ -0,0 +1,34 @@ +//go:build testing + +package systems + +import ( + "testing" + + "github.com/henrygd/beszel/internal/entities/system" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestCreateRecordsSyncSystemNames(t *testing.T) { + for _, tc := range []struct { + name string + env string + hostname string + expected string + }{ + {"disabled", "", "new-host", "test-system"}, + {"enabled", "true", "new-host", "new-host"}, + {"enabled with empty hostname", "true", "", "test-system"}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Setenv("SYNC_SYSTEM_NAMES", tc.env) + sys, app := newTestSystemWithHub(t) + _, err := sys.createRecords(&system.CombinedData{Details: &system.Details{Hostname: tc.hostname}}) + require.NoError(t, err) + record, err := app.FindRecordById("systems", sys.Id) + require.NoError(t, err) + assert.Equal(t, tc.expected, record.GetString("name")) + }) + } +}