mirror of
https://github.com/henrygd/beszel.git
synced 2026-09-30 05:17:49 +02:00
fix(hub): preserve custom DNS resolvers when syncing monitors (#2448)
This commit is contained in:
@@ -100,9 +100,23 @@ func TestSSHNetworkMonitorReconnectSync(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
collection, err := app.FindCachedCollectionByNameOrId("network_monitors")
|
collection, err := app.FindCachedCollectionByNameOrId("network_monitors")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
configs := []monitor.Config{
|
||||||
|
{Target: "localhost", Protocol: "tcp", Port: 80, Interval: 60},
|
||||||
|
{Target: "localhost", Protocol: "dns", Interval: 60},
|
||||||
|
{Target: "localhost", Protocol: "dns", Server: "127.0.0.1:5353", Interval: 60},
|
||||||
|
}
|
||||||
|
var probes []*core.Record
|
||||||
|
for i := range configs {
|
||||||
|
cfg := &configs[i]
|
||||||
probe := core.NewRecord(collection)
|
probe := core.NewRecord(collection)
|
||||||
probe.Load(map[string]any{"system": sys.Id, "target": "localhost", "protocol": "tcp", "port": 80, "interval": 60, "enabled": true})
|
probe.Load(map[string]any{
|
||||||
|
"system": sys.Id, "target": cfg.Target, "protocol": cfg.Protocol,
|
||||||
|
"port": cfg.Port, "server": cfg.Server, "interval": cfg.Interval, "enabled": true,
|
||||||
|
})
|
||||||
require.NoError(t, app.SaveNoValidate(probe))
|
require.NoError(t, app.SaveNoValidate(probe))
|
||||||
|
cfg.ID = probe.Id
|
||||||
|
probes = append(probes, probe)
|
||||||
|
}
|
||||||
fetch := func() {
|
fetch := func() {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
_, err := sys.fetchDataFromAgent(common.DataRequestOptions{})
|
_, err := sys.fetchDataFromAgent(common.DataRequestOptions{})
|
||||||
@@ -120,7 +134,7 @@ func TestSSHNetworkMonitorReconnectSync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fetch()
|
fetch()
|
||||||
require.Equal(t, probe.Id, receive().Configs[0].ID)
|
require.ElementsMatch(t, configs, receive().Configs)
|
||||||
require.False(t, sys.monitorsNeedSync.Load())
|
require.False(t, sys.monitorsNeedSync.Load())
|
||||||
fetch()
|
fetch()
|
||||||
require.Empty(t, requests, "steady-state fetch must not resync")
|
require.Empty(t, requests, "steady-state fetch must not resync")
|
||||||
@@ -128,22 +142,24 @@ func TestSSHNetworkMonitorReconnectSync(t *testing.T) {
|
|||||||
// Simulate loss of the agent process/connection and its in-memory monitors.
|
// Simulate loss of the agent process/connection and its in-memory monitors.
|
||||||
require.NoError(t, sys.client.Load().Close())
|
require.NoError(t, sys.client.Load().Close())
|
||||||
fetch()
|
fetch()
|
||||||
require.Equal(t, probe.Id, receive().Configs[0].ID)
|
require.ElementsMatch(t, configs, receive().Configs)
|
||||||
require.False(t, sys.monitorsNeedSync.Load())
|
require.False(t, sys.monitorsNeedSync.Load())
|
||||||
|
|
||||||
// Failed replacements are retried on the next successful stats fetch.
|
// Failed replacements are retried on the next successful stats fetch.
|
||||||
require.NoError(t, sys.client.Load().Close())
|
require.NoError(t, sys.client.Load().Close())
|
||||||
failSync.Store(true)
|
failSync.Store(true)
|
||||||
fetch()
|
fetch()
|
||||||
receive()
|
require.ElementsMatch(t, configs, receive().Configs)
|
||||||
require.True(t, sys.monitorsNeedSync.Load())
|
require.True(t, sys.monitorsNeedSync.Load())
|
||||||
failSync.Store(false)
|
failSync.Store(false)
|
||||||
fetch()
|
fetch()
|
||||||
receive()
|
require.ElementsMatch(t, configs, receive().Configs)
|
||||||
require.False(t, sys.monitorsNeedSync.Load())
|
require.False(t, sys.monitorsNeedSync.Load())
|
||||||
|
|
||||||
|
for _, probe := range probes {
|
||||||
probe.Set("enabled", false)
|
probe.Set("enabled", false)
|
||||||
require.NoError(t, app.SaveNoValidate(probe))
|
require.NoError(t, app.SaveNoValidate(probe))
|
||||||
|
}
|
||||||
require.NoError(t, sys.client.Load().Close())
|
require.NoError(t, sys.client.Load().Close())
|
||||||
fetch()
|
fetch()
|
||||||
require.Empty(t, receive().Configs, "empty replacement must clear stale monitors")
|
require.Empty(t, receive().Configs, "empty replacement must clear stale monitors")
|
||||||
|
|||||||
@@ -380,7 +380,7 @@ func (sm *SystemManager) resetFailedSmartFetchState(systemID string) {
|
|||||||
func (sm *SystemManager) GetMonitorConfigsForSystem(systemID string) ([]monitor.Config, error) {
|
func (sm *SystemManager) GetMonitorConfigsForSystem(systemID string) ([]monitor.Config, error) {
|
||||||
var configs []monitor.Config
|
var configs []monitor.Config
|
||||||
err := sm.hub.DB().
|
err := sm.hub.DB().
|
||||||
NewQuery("SELECT id, target, protocol, port, interval FROM network_monitors WHERE system = {:system} AND enabled = true").
|
NewQuery("SELECT id, target, protocol, port, interval, server FROM network_monitors WHERE system = {:system} AND enabled = true").
|
||||||
Bind(dbx.Params{"system": systemID}).
|
Bind(dbx.Params{"system": systemID}).
|
||||||
All(&configs)
|
All(&configs)
|
||||||
return configs, err
|
return configs, err
|
||||||
|
|||||||
Reference in New Issue
Block a user