From 378918a295ccb6a9c33ee327e35bb4d3ae3707b5 Mon Sep 17 00:00:00 2001 From: f18m Date: Wed, 30 Oct 2024 22:24:39 +0100 Subject: [PATCH] Fix excessive logging when new "link" attribute is empty --- .../pkg/uibackend/types.go | 26 ++++++++++++------- .../pkg/uibackend/uibackend.go | 4 +-- .../pkg/uibackend/uibackend_test.go | 4 +-- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/dhcp-clients-webapp-backend/pkg/uibackend/types.go b/dhcp-clients-webapp-backend/pkg/uibackend/types.go index 2c54a20..36aa3b4 100644 --- a/dhcp-clients-webapp-backend/pkg/uibackend/types.go +++ b/dhcp-clients-webapp-backend/pkg/uibackend/types.go @@ -86,7 +86,7 @@ type PastDhcpClientData struct { type DhcpClientFriendlyName struct { MacAddress net.HardwareAddr FriendlyName string - Link template.Template + Link *template.Template // maybe nil } // IpAddressReservation represents a static IP configuration loaded from the addon configuration file @@ -94,7 +94,7 @@ type IpAddressReservation struct { Name string Mac net.HardwareAddr IP netip.Addr - Link template.Template + Link *template.Template // maybe nil } // AddonConfig is used to unmarshal HomeAssistant option file correctly @@ -186,9 +186,12 @@ func (b *AddonConfig) UnmarshalJSON(data []byte) error { return fmt.Errorf("invalid MAC address found inside 'ip_address_reservations': %s", r.Mac) } - linkTemplate, err := template.New("linkTemplate").Parse(r.Link) - if err != nil { - return fmt.Errorf("invalid golang template found inside 'link': %s", r.Link) + var linkTemplate *template.Template + if r.Link != "" { + linkTemplate, err = template.New("linkTemplate").Parse(r.Link) + if err != nil { + return fmt.Errorf("invalid golang template found inside 'link': %s", r.Link) + } } // normalize the IP and MAC address format (e.g. to lowercase) @@ -199,7 +202,7 @@ func (b *AddonConfig) UnmarshalJSON(data []byte) error { Name: r.Name, Mac: macAddr, IP: ipAddr, - Link: *linkTemplate, + Link: linkTemplate, } b.ipAddressReservationsByIP[ipAddr] = ipReservation @@ -213,15 +216,18 @@ func (b *AddonConfig) UnmarshalJSON(data []byte) error { return fmt.Errorf("invalid MAC address found inside 'dhcp_clients_friendly_names': %s", client.Mac) } - linkTemplate, err := template.New("linkTemplate").Parse(client.Link) - if err != nil { - return fmt.Errorf("invalid golang template found inside 'link': %s", client.Link) + var linkTemplate *template.Template + if client.Link != "" { + linkTemplate, err = template.New("linkTemplate").Parse(client.Link) + if err != nil { + return fmt.Errorf("invalid golang template found inside 'link': %s", client.Link) + } } b.friendlyNames[macAddr.String()] = DhcpClientFriendlyName{ MacAddress: macAddr, FriendlyName: client.Name, - Link: *linkTemplate, + Link: linkTemplate, } } diff --git a/dhcp-clients-webapp-backend/pkg/uibackend/uibackend.go b/dhcp-clients-webapp-backend/pkg/uibackend/uibackend.go index 6323666..0e3ad89 100644 --- a/dhcp-clients-webapp-backend/pkg/uibackend/uibackend.go +++ b/dhcp-clients-webapp-backend/pkg/uibackend/uibackend.go @@ -500,12 +500,12 @@ func (b *UIBackend) evaluateLink(hostname string, ip netip.Addr, mac net.Hardwar r, hasFriendlyName := b.cfg.friendlyNames[mac.String()] if hasFriendlyName { - theTemplate = &r.Link + theTemplate = r.Link friendlyName = r.FriendlyName } else { r, hasReservation := b.cfg.ipAddressReservationsByIP[ip] if hasReservation { - theTemplate = &r.Link + theTemplate = r.Link } } diff --git a/dhcp-clients-webapp-backend/pkg/uibackend/uibackend_test.go b/dhcp-clients-webapp-backend/pkg/uibackend/uibackend_test.go index b9bcc34..a503519 100644 --- a/dhcp-clients-webapp-backend/pkg/uibackend/uibackend_test.go +++ b/dhcp-clients-webapp-backend/pkg/uibackend/uibackend_test.go @@ -22,8 +22,8 @@ func MustParseMAC(s string) net.HardwareAddr { return mac } -func MustParseTemplate(s string) template.Template { - return *template.Must(template.New("test").Parse(s)) +func MustParseTemplate(s string) *template.Template { + return template.Must(template.New("test").Parse(s)) } func getMockLeases() []*dnsmasq.Lease {