diff --git a/app.go b/app.go index 01528fb..062860d 100644 --- a/app.go +++ b/app.go @@ -756,13 +756,25 @@ func (h *Headscale) getTLSSettings() (*tls.Config, error) { } } -func (h *Headscale) setLastStateChangeToNow(namespace string) { +func (h *Headscale) setLastStateChangeToNow(namespaces ...string) { + var err error + now := time.Now().UTC() - lastStateUpdate.WithLabelValues("", "headscale").Set(float64(now.Unix())) - if h.lastStateChange == nil { - h.lastStateChange = xsync.NewMapOf[time.Time]() + + if len(namespaces) == 0 { + namespaces, err = h.ListNamespacesStr() + if err != nil { + log.Error().Caller().Err(err).Msg("failed to fetch all namespaces, failing to update last changed state.") + } + } + + for _, namespace := range namespaces { + lastStateUpdate.WithLabelValues(namespace, "headscale").Set(float64(now.Unix())) + if h.lastStateChange == nil { + h.lastStateChange = xsync.NewMapOf[time.Time]() + } + h.lastStateChange.Store(namespace, now) } - h.lastStateChange.Store(namespace, now) } func (h *Headscale) getLastStateChange(namespaces ...string) time.Time { diff --git a/namespaces.go b/namespaces.go index 19407b8..0add03f 100644 --- a/namespaces.go +++ b/namespaces.go @@ -148,6 +148,21 @@ func (h *Headscale) ListNamespaces() ([]Namespace, error) { return namespaces, nil } +func (h *Headscale) ListNamespacesStr() ([]string, error) { + namespaces, err := h.ListNamespaces() + if err != nil { + return []string{}, err + } + + namespaceStrs := make([]string, len(namespaces)) + + for index, namespace := range namespaces { + namespaceStrs[index] = namespace.Name + } + + return namespaceStrs, nil +} + // ListMachinesInNamespace gets all the nodes in a given namespace. func (h *Headscale) ListMachinesInNamespace(name string) ([]Machine, error) { err := CheckForFQDNRules(name)