From d65602f904981fa3da3239ed85a74183447adc1c Mon Sep 17 00:00:00 2001 From: Maycon Santos Date: Wed, 21 Feb 2024 15:16:43 +0100 Subject: [PATCH] Add posture checks metrics report (#1603) --- management/server/metrics/selfhosted.go | 59 +++++++++++--------- management/server/metrics/selfhosted_test.go | 31 ++++++++++ 2 files changed, 65 insertions(+), 25 deletions(-) diff --git a/management/server/metrics/selfhosted.go b/management/server/metrics/selfhosted.go index 9a8c65b8e..17693f19e 100644 --- a/management/server/metrics/selfhosted.go +++ b/management/server/metrics/selfhosted.go @@ -157,31 +157,33 @@ func (w *Worker) generatePayload(apiKey string) pushPayload { func (w *Worker) generateProperties() properties { var ( - uptime float64 - accounts int - expirationEnabled int - users int - serviceUsers int - pats int - peers int - peersSSHEnabled int - setupKeysUsage int - ephemeralPeersSKs int - ephemeralPeersSKUsage int - activePeersLastDay int - osPeers map[string]int - userPeers int - rules int - rulesProtocol map[string]int - rulesDirection map[string]int - groups int - routes int - routesWithRGGroups int - nameservers int - uiClient int - version string - peerActiveVersions []string - osUIClients map[string]int + uptime float64 + accounts int + expirationEnabled int + users int + serviceUsers int + pats int + peers int + peersSSHEnabled int + setupKeysUsage int + ephemeralPeersSKs int + ephemeralPeersSKUsage int + activePeersLastDay int + osPeers map[string]int + userPeers int + rules int + rulesProtocol map[string]int + rulesDirection map[string]int + rulesWithSrcPostureChecks int + postureChecks int + groups int + routes int + routesWithRGGroups int + nameservers int + uiClient int + version string + peerActiveVersions []string + osUIClients map[string]int ) start := time.Now() metricsProperties := make(properties) @@ -219,8 +221,13 @@ func (w *Worker) generateProperties() properties { rulesDirection["oneway"]++ } } + if len(policy.SourcePostureChecks) > 0 { + rulesWithSrcPostureChecks++ + } } + postureChecks += len(account.PostureChecks) + for _, user := range account.Users { if user.IsServiceUser { serviceUsers++ @@ -286,6 +293,8 @@ func (w *Worker) generateProperties() properties { metricsProperties["active_peers_last_day"] = activePeersLastDay metricsProperties["user_peers"] = userPeers metricsProperties["rules"] = rules + metricsProperties["rules_with_src_posture_checks"] = rulesWithSrcPostureChecks + metricsProperties["posture_checks"] = postureChecks metricsProperties["groups"] = groups metricsProperties["routes"] = routes metricsProperties["routes_with_routing_groups"] = routesWithRGGroups diff --git a/management/server/metrics/selfhosted_test.go b/management/server/metrics/selfhosted_test.go index a577f8309..7be3c818d 100644 --- a/management/server/metrics/selfhosted_test.go +++ b/management/server/metrics/selfhosted_test.go @@ -6,6 +6,7 @@ import ( nbdns "github.com/netbirdio/netbird/dns" "github.com/netbirdio/netbird/management/server" nbpeer "github.com/netbirdio/netbird/management/server/peer" + "github.com/netbirdio/netbird/management/server/posture" "github.com/netbirdio/netbird/route" ) @@ -62,6 +63,7 @@ func (mockDatasource) GetAllAccounts() []*server.Account { Protocol: server.PolicyRuleProtocolTCP, }, }, + SourcePostureChecks: []string{"1"}, }, }, Routes: map[string]*route.Route{ @@ -70,6 +72,26 @@ func (mockDatasource) GetAllAccounts() []*server.Account { PeerGroups: make([]string, 1), }, }, + PostureChecks: []*posture.Checks{ + { + ID: "1", + Name: "test", + Checks: posture.ChecksDefinition{ + NBVersionCheck: &posture.NBVersionCheck{ + MinVersion: "0.0.1", + }, + }, + }, + { + ID: "2", + Name: "tes2", + Checks: posture.ChecksDefinition{ + NBVersionCheck: &posture.NBVersionCheck{ + MinVersion: "0.0.2", + }, + }, + }, + }, Users: map[string]*server.User{ "1": { IsServiceUser: true, @@ -246,4 +268,13 @@ func TestGenerateProperties(t *testing.T) { if properties["store_engine"] != server.FileStoreEngine { t.Errorf("expected JsonFile, got %s", properties["store_engine"]) } + + if properties["rules_with_src_posture_checks"] != 1 { + t.Errorf("expected 1 rules_with_src_posture_checks, got %d", properties["rules_with_src_posture_checks"]) + } + + if properties["posture_checks"] != 2 { + t.Errorf("expected 1 posture_checks, got %d", properties["posture_checks"]) + } + }