Merge pull request #913 from netbirdio/feature/add_selfhosted_metrics_for_pat_and_service_user

Add selfhosted metrics for PATs and service users
This commit is contained in:
pascal-fischer 2023-05-31 14:41:34 +02:00 committed by GitHub
commit e87647c853
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -157,13 +157,19 @@ func (w *Worker) generateProperties() properties {
var ( var (
uptime float64 uptime float64
accounts int accounts int
expirationEnabled int
users int users int
serviceUsers int
pats int
peers int peers int
peersSSHEnabled int
setupKeysUsage int setupKeysUsage int
activePeersLastDay int activePeersLastDay int
osPeers map[string]int osPeers map[string]int
userPeers int userPeers int
rules int rules int
rulesProtocol map[string]int
rulesDirection map[string]int
groups int groups int
routes int routes int
nameservers int nameservers int
@ -176,24 +182,55 @@ func (w *Worker) generateProperties() properties {
metricsProperties := make(properties) metricsProperties := make(properties)
osPeers = make(map[string]int) osPeers = make(map[string]int)
osUIClients = make(map[string]int) osUIClients = make(map[string]int)
rulesProtocol = make(map[string]int)
rulesDirection = make(map[string]int)
uptime = time.Since(w.startupTime).Seconds() uptime = time.Since(w.startupTime).Seconds()
connections := w.connManager.GetAllConnectedPeers() connections := w.connManager.GetAllConnectedPeers()
version = nbversion.NetbirdVersion() version = nbversion.NetbirdVersion()
for _, account := range w.dataSource.GetAllAccounts() { for _, account := range w.dataSource.GetAllAccounts() {
accounts++ accounts++
users = users + len(account.Users)
rules = rules + len(account.Rules) if account.Settings.PeerLoginExpirationEnabled {
expirationEnabled++
}
groups = groups + len(account.Groups) groups = groups + len(account.Groups)
routes = routes + len(account.Routes) routes = routes + len(account.Routes)
nameservers = nameservers + len(account.NameServerGroups) nameservers = nameservers + len(account.NameServerGroups)
for _, policy := range account.Policies {
for _, rule := range policy.Rules {
rules++
rulesProtocol[string(rule.Protocol)]++
if rule.Bidirectional {
rulesDirection["bidirectional"]++
} else {
rulesDirection["oneway"]++
}
}
}
for _, user := range account.Users {
if user.IsServiceUser {
serviceUsers++
} else {
users++
}
pats += len(user.PATs)
}
for _, key := range account.SetupKeys { for _, key := range account.SetupKeys {
setupKeysUsage = setupKeysUsage + key.UsedTimes setupKeysUsage = setupKeysUsage + key.UsedTimes
} }
for _, peer := range account.Peers { for _, peer := range account.Peers {
peers++ peers++
if peer.SSHEnabled {
peersSSHEnabled++
}
if peer.SetupKey == "" { if peer.SetupKey == "" {
userPeers++ userPeers++
} }
@ -224,7 +261,11 @@ func (w *Worker) generateProperties() properties {
metricsProperties["uptime"] = uptime metricsProperties["uptime"] = uptime
metricsProperties["accounts"] = accounts metricsProperties["accounts"] = accounts
metricsProperties["users"] = users metricsProperties["users"] = users
metricsProperties["service_users"] = serviceUsers
metricsProperties["pats"] = pats
metricsProperties["peers"] = peers metricsProperties["peers"] = peers
metricsProperties["peers_ssh_enabled"] = peersSSHEnabled
metricsProperties["peers_login_expiration_enabled"] = expirationEnabled
metricsProperties["setup_keys_usage"] = setupKeysUsage metricsProperties["setup_keys_usage"] = setupKeysUsage
metricsProperties["active_peers_last_day"] = activePeersLastDay metricsProperties["active_peers_last_day"] = activePeersLastDay
metricsProperties["user_peers"] = userPeers metricsProperties["user_peers"] = userPeers
@ -236,6 +277,15 @@ func (w *Worker) generateProperties() properties {
metricsProperties["min_active_peer_version"] = minActivePeerVersion metricsProperties["min_active_peer_version"] = minActivePeerVersion
metricsProperties["max_active_peer_version"] = maxActivePeerVersion metricsProperties["max_active_peer_version"] = maxActivePeerVersion
metricsProperties["ui_clients"] = uiClient metricsProperties["ui_clients"] = uiClient
for protocol, count := range rulesProtocol {
metricsProperties["rules_protocol_"+protocol] = count
}
for direction, count := range rulesDirection {
metricsProperties["rules_direction_"+direction] = count
}
for os, count := range osPeers { for os, count := range osPeers {
metricsProperties[os] = count metricsProperties[os] = count
} }