From 44352f80067e840201fc92af334397bfe00d6731 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 11 Jan 2024 22:18:04 +0700 Subject: [PATCH] all: make discovery refresh interval configurable --- config.go | 35 +++++++++++++++--------------- docs/config.md | 8 +++++++ internal/clientinfo/client_info.go | 19 +++++++++++----- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/config.go b/config.go index 0b5d39c..2ffec37 100644 --- a/config.go +++ b/config.go @@ -179,23 +179,24 @@ func (c *Config) FirstUpstream() *UpstreamConfig { // ServiceConfig specifies the general ctrld config. type ServiceConfig struct { - LogLevel string `mapstructure:"log_level" toml:"log_level,omitempty"` - LogPath string `mapstructure:"log_path" toml:"log_path,omitempty"` - CacheEnable bool `mapstructure:"cache_enable" toml:"cache_enable,omitempty"` - CacheSize int `mapstructure:"cache_size" toml:"cache_size,omitempty"` - CacheTTLOverride int `mapstructure:"cache_ttl_override" toml:"cache_ttl_override,omitempty"` - CacheServeStale bool `mapstructure:"cache_serve_stale" toml:"cache_serve_stale,omitempty"` - MaxConcurrentRequests *int `mapstructure:"max_concurrent_requests" toml:"max_concurrent_requests,omitempty" validate:"omitempty,gte=0"` - DHCPLeaseFile string `mapstructure:"dhcp_lease_file_path" toml:"dhcp_lease_file_path" validate:"omitempty,file"` - DHCPLeaseFileFormat string `mapstructure:"dhcp_lease_file_format" toml:"dhcp_lease_file_format" validate:"required_unless=DHCPLeaseFile '',omitempty,oneof=dnsmasq isc-dhcp"` - DiscoverMDNS *bool `mapstructure:"discover_mdns" toml:"discover_mdns,omitempty"` - DiscoverARP *bool `mapstructure:"discover_arp" toml:"discover_arp,omitempty"` - DiscoverDHCP *bool `mapstructure:"discover_dhcp" toml:"discover_dhcp,omitempty"` - DiscoverPtr *bool `mapstructure:"discover_ptr" toml:"discover_ptr,omitempty"` - DiscoverHosts *bool `mapstructure:"discover_hosts" toml:"discover_hosts,omitempty"` - ClientIDPref string `mapstructure:"client_id_preference" toml:"client_id_preference,omitempty" validate:"omitempty,oneof=host mac"` - Daemon bool `mapstructure:"-" toml:"-"` - AllocateIP bool `mapstructure:"-" toml:"-"` + LogLevel string `mapstructure:"log_level" toml:"log_level,omitempty"` + LogPath string `mapstructure:"log_path" toml:"log_path,omitempty"` + CacheEnable bool `mapstructure:"cache_enable" toml:"cache_enable,omitempty"` + CacheSize int `mapstructure:"cache_size" toml:"cache_size,omitempty"` + CacheTTLOverride int `mapstructure:"cache_ttl_override" toml:"cache_ttl_override,omitempty"` + CacheServeStale bool `mapstructure:"cache_serve_stale" toml:"cache_serve_stale,omitempty"` + MaxConcurrentRequests *int `mapstructure:"max_concurrent_requests" toml:"max_concurrent_requests,omitempty" validate:"omitempty,gte=0"` + DHCPLeaseFile string `mapstructure:"dhcp_lease_file_path" toml:"dhcp_lease_file_path" validate:"omitempty,file"` + DHCPLeaseFileFormat string `mapstructure:"dhcp_lease_file_format" toml:"dhcp_lease_file_format" validate:"required_unless=DHCPLeaseFile '',omitempty,oneof=dnsmasq isc-dhcp"` + DiscoverMDNS *bool `mapstructure:"discover_mdns" toml:"discover_mdns,omitempty"` + DiscoverARP *bool `mapstructure:"discover_arp" toml:"discover_arp,omitempty"` + DiscoverDHCP *bool `mapstructure:"discover_dhcp" toml:"discover_dhcp,omitempty"` + DiscoverPtr *bool `mapstructure:"discover_ptr" toml:"discover_ptr,omitempty"` + DiscoverHosts *bool `mapstructure:"discover_hosts" toml:"discover_hosts,omitempty"` + DiscoverRefreshInterval int `mapstructure:"discover_refresh_interval" toml:"discover_refresh_interval,omitempty"` + ClientIDPref string `mapstructure:"client_id_preference" toml:"client_id_preference,omitempty" validate:"omitempty,oneof=host mac"` + Daemon bool `mapstructure:"-" toml:"-"` + AllocateIP bool `mapstructure:"-" toml:"-"` } // NetworkConfig specifies configuration for networks where ctrld will handle requests. diff --git a/docs/config.md b/docs/config.md index 90c15e0..b92e320 100644 --- a/docs/config.md +++ b/docs/config.md @@ -200,6 +200,14 @@ Perform LAN client discovery using hosts file. - Required: no - Default: true +### discover_refresh_interval +Time in seconds between each discovery refresh loop to update new client information data. +The default value is 120 seconds, lower this value to make the discovery process run more aggressively. + +- Type: integer +- Required: no +- Default: 120 + ### dhcp_lease_file_path Relative or absolute path to a custom DHCP leases file location. diff --git a/internal/clientinfo/client_info.go b/internal/clientinfo/client_info.go index 1fe1083..0e5c157 100644 --- a/internal/clientinfo/client_info.go +++ b/internal/clientinfo/client_info.go @@ -70,6 +70,7 @@ type Table struct { hostnameResolvers []HostnameResolver refreshers []refresher initOnce sync.Once + refreshInterval int dhcp *dhcp merlin *merlinDiscover @@ -88,12 +89,17 @@ type Table struct { } func NewTable(cfg *ctrld.Config, selfIP, cdUID string, ns []string) *Table { + refreshInterval := cfg.Service.DiscoverRefreshInterval + if refreshInterval <= 0 { + refreshInterval = 2 * 60 // 2 minutes + } return &Table{ - svcCfg: cfg.Service, - quitCh: make(chan struct{}), - selfIP: selfIP, - cdUID: cdUID, - ptrNameservers: ns, + svcCfg: cfg.Service, + quitCh: make(chan struct{}), + selfIP: selfIP, + cdUID: cdUID, + ptrNameservers: ns, + refreshInterval: refreshInterval, } } @@ -104,8 +110,9 @@ func (t *Table) AddLeaseFile(name string, format ctrld.LeaseFileFormat) { clientInfoFiles[name] = format } +// RefreshLoop runs all the refresher to update new client info data. func (t *Table) RefreshLoop(ctx context.Context) { - timer := time.NewTicker(time.Minute * 5) + timer := time.NewTicker(time.Second * time.Duration(t.refreshInterval)) defer timer.Stop() for { select {