Standardize codebase consistency: naming, JSON tags, logging, error wrapping
- JSON tags: fix snake_case to camelCase in dnsmasq (configFile, domainsConfigured, lastRestart), crowdsec Machine (lastPush, lastHeartbeat), network (primaryIP, primaryInterface). cscli raw parsing structs keep snake_case to match CLI output. - Error wrapping: fix %v to %w in enableAuthelia for proper error chain preservation - Naming: rename dnsmasq.ConfigGenerator to dnsmasq.Manager (matches all other packages), rename ServiceStatus to Status in dnsmasq and haproxy (matches authelia, crowdsec, etc.) - Logging: standardize all slog calls to use "component" key instead of message prefixes. Affects reconcile, dnsfilter, ddns — now consistent with dnsmasq, haproxy, nftables, sse.
This commit is contained in:
@@ -24,36 +24,36 @@ type DNSEntry struct {
|
||||
Wildcard bool // true: address=/ (all subdomains); false: host-record= (exact match)
|
||||
}
|
||||
|
||||
// ConfigGenerator handles dnsmasq configuration generation
|
||||
type ConfigGenerator struct {
|
||||
// Manager handles dnsmasq configuration generation
|
||||
type Manager struct {
|
||||
configPath string
|
||||
filterConfPath string // path to addn-hosts file for DNS filtering
|
||||
}
|
||||
|
||||
// NewConfigGenerator creates a new dnsmasq config generator
|
||||
func NewConfigGenerator(configPath string) *ConfigGenerator {
|
||||
// NewManager creates a new dnsmasq config generator
|
||||
func NewManager(configPath string) *Manager {
|
||||
if configPath == "" {
|
||||
configPath = "/etc/dnsmasq.d/wild-cloud.conf"
|
||||
}
|
||||
return &ConfigGenerator{
|
||||
return &Manager{
|
||||
configPath: configPath,
|
||||
}
|
||||
}
|
||||
|
||||
// GetConfigPath returns the dnsmasq config file path
|
||||
func (g *ConfigGenerator) GetConfigPath() string {
|
||||
func (g *Manager) GetConfigPath() string {
|
||||
return g.configPath
|
||||
}
|
||||
|
||||
// SetFilterConfPath sets the path to an additional hosts file for DNS filtering.
|
||||
// When set, the generated config includes an addn-hosts= directive.
|
||||
func (g *ConfigGenerator) SetFilterConfPath(path string) {
|
||||
func (g *Manager) SetFilterConfPath(path string) {
|
||||
g.filterConfPath = path
|
||||
}
|
||||
|
||||
// Generate creates a dnsmasq configuration from registered domain entries.
|
||||
// It auto-detects the Wild Central server's IP address for the listen directive.
|
||||
func (g *ConfigGenerator) Generate(cfg *config.State, entries []DNSEntry) string {
|
||||
func (g *Manager) Generate(cfg *config.State, entries []DNSEntry) string {
|
||||
// Use configured dnsmasq IP (bound to eth0), falling back to auto-detect.
|
||||
// Auto-detect can pick wlan0 if that's the default route, which is wrong
|
||||
// when dnsmasq is only listening on eth0.
|
||||
@@ -123,7 +123,7 @@ log-dhcp
|
||||
// A full restart is required because SIGHUP (reload) does not re-read
|
||||
// host-record= directives — only address=/ and a few other directives
|
||||
// are reloaded on SIGHUP.
|
||||
func (g *ConfigGenerator) RestartService() error {
|
||||
func (g *Manager) RestartService() error {
|
||||
cmd := exec.Command("systemctl", "restart", "dnsmasq.service")
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
@@ -133,18 +133,18 @@ func (g *ConfigGenerator) RestartService() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ServiceStatus represents the status of the dnsmasq service
|
||||
type ServiceStatus struct {
|
||||
// Status represents the status of the dnsmasq service
|
||||
type Status struct {
|
||||
Status string `json:"status"`
|
||||
PID int `json:"pid"`
|
||||
IP string `json:"ip"`
|
||||
ConfigFile string `json:"config_file"`
|
||||
DomainsConfigured int `json:"domains_configured"`
|
||||
LastRestart time.Time `json:"last_restart"`
|
||||
ConfigFile string `json:"configFile"`
|
||||
DomainsConfigured int `json:"domainsConfigured"`
|
||||
LastRestart time.Time `json:"lastRestart"`
|
||||
}
|
||||
|
||||
// GetStatus checks the status of the dnsmasq service
|
||||
func (g *ConfigGenerator) GetStatus() (*ServiceStatus, error) {
|
||||
func (g *Manager) GetStatus() (*Status, error) {
|
||||
// Get the Wild Central IP address
|
||||
dnsIP, err := network.GetWildCentralIP()
|
||||
if err != nil {
|
||||
@@ -152,7 +152,7 @@ func (g *ConfigGenerator) GetStatus() (*ServiceStatus, error) {
|
||||
dnsIP = ""
|
||||
}
|
||||
|
||||
status := &ServiceStatus{
|
||||
status := &Status{
|
||||
ConfigFile: g.configPath,
|
||||
IP: dnsIP,
|
||||
}
|
||||
@@ -205,7 +205,7 @@ func (g *ConfigGenerator) GetStatus() (*ServiceStatus, error) {
|
||||
}
|
||||
|
||||
// ReadConfig reads the current dnsmasq configuration
|
||||
func (g *ConfigGenerator) ReadConfig() (string, error) {
|
||||
func (g *Manager) ReadConfig() (string, error) {
|
||||
data, err := os.ReadFile(g.configPath)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("reading dnsmasq config: %w", err)
|
||||
@@ -214,7 +214,7 @@ func (g *ConfigGenerator) ReadConfig() (string, error) {
|
||||
}
|
||||
|
||||
// UpdateConfig regenerates and writes the dnsmasq configuration and optionally restarts.
|
||||
func (g *ConfigGenerator) UpdateConfig(cfg *config.State, entries []DNSEntry, restart bool) error {
|
||||
func (g *Manager) UpdateConfig(cfg *config.State, entries []DNSEntry, restart bool) error {
|
||||
// Generate fresh config from scratch
|
||||
configContent := g.Generate(cfg, entries)
|
||||
|
||||
@@ -235,7 +235,7 @@ func (g *ConfigGenerator) UpdateConfig(cfg *config.State, entries []DNSEntry, re
|
||||
// GenerateMainConfig creates the main dnsmasq configuration with global settings.
|
||||
// Used by the DnsmasqGenerate handler to preview/apply the base config independently
|
||||
// of domain-specific DNS entries (which are handled by Generate + UpdateConfig).
|
||||
func (g *ConfigGenerator) GenerateMainConfig(cfg *config.State) string {
|
||||
func (g *Manager) GenerateMainConfig(cfg *config.State) string {
|
||||
dnsIP, err := network.GetWildCentralIP()
|
||||
if err != nil {
|
||||
slog.Error("failed to detect Wild Central IP", "component", "dnsmasq", "error", err)
|
||||
@@ -300,7 +300,7 @@ log-dhcp
|
||||
}
|
||||
|
||||
// ValidateConfig tests a dnsmasq configuration file for syntax errors
|
||||
func (g *ConfigGenerator) ValidateConfig(configPath string) error {
|
||||
func (g *Manager) ValidateConfig(configPath string) error {
|
||||
cmd := exec.Command("dnsmasq", "--test", "-C", configPath)
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
@@ -314,13 +314,13 @@ func (g *ConfigGenerator) ValidateConfig(configPath string) error {
|
||||
|
||||
// ReloadService restarts dnsmasq to apply configuration changes.
|
||||
// Uses a full restart because SIGHUP does not re-read host-record= directives.
|
||||
func (g *ConfigGenerator) ReloadService() error {
|
||||
func (g *Manager) ReloadService() error {
|
||||
return g.RestartService()
|
||||
}
|
||||
|
||||
// ConfigureSystemDNS configures systemd-resolved to use the local dnsmasq server
|
||||
// This should only be called on first start of dnsmasq
|
||||
func (g *ConfigGenerator) ConfigureSystemDNS() error {
|
||||
func (g *Manager) ConfigureSystemDNS() error {
|
||||
// Auto-detect network info to get the DNS IP
|
||||
netInfo, err := network.DetectNetworkInfo()
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user