mirror of
https://github.com/gravitl/netmaker.git
synced 2026-10-12 11:10:00 +00:00
79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/gravitl/netmaker/models"
|
|
"github.com/gravitl/netmaker/schema"
|
|
"github.com/gravitl/netmaker/scope"
|
|
)
|
|
|
|
func GetCurrentServerUsage(ctx context.Context) (limits models.Usage) {
|
|
limits.SetDefaults()
|
|
hosts, hErr := GetAllHostsWithStatus(ctx, schema.OnlineSt)
|
|
if hErr == nil {
|
|
limits.Hosts = len(hosts)
|
|
}
|
|
clients, cErr := GetAllExtClientsWithStatus(ctx, schema.OnlineSt)
|
|
if cErr == nil {
|
|
limits.Clients = len(clients)
|
|
}
|
|
|
|
if scope.Level(ctx) == scope.TenantScope {
|
|
limits.Users, _ = (&schema.User{}).CountWithMembership(ctx)
|
|
} else {
|
|
limits.Users, _ = (&schema.User{}).Count(ctx)
|
|
}
|
|
limits.Networks, _ = (&schema.Network{}).Count(ctx)
|
|
limits.Egresses, _ = (&schema.Egress{}).Count(ctx)
|
|
|
|
nodes, _ := GetAllNodes(ctx)
|
|
|
|
for _, client := range clients {
|
|
nodes = append(nodes, models.ConvertToStaticNode(client))
|
|
}
|
|
|
|
limits.NetworkUsage = make(map[string]models.NetworkUsage)
|
|
networks, _ := (&schema.Network{}).ListAll(ctx)
|
|
for _, network := range networks {
|
|
limits.NetworkUsage[network.Name] = models.NetworkUsage{}
|
|
}
|
|
|
|
for _, node := range nodes {
|
|
netUsage, ok := limits.NetworkUsage[node.Network]
|
|
if !ok {
|
|
// if network doesn't exist, this node is probably awaiting cleanup.
|
|
// so ignore.
|
|
continue
|
|
}
|
|
|
|
netUsage.Nodes++
|
|
if node.IsStatic {
|
|
netUsage.Clients++
|
|
}
|
|
if node.IsIngressGateway {
|
|
limits.Ingresses++
|
|
netUsage.Ingresses++
|
|
}
|
|
if node.EgressDetails.IsEgressGateway {
|
|
netUsage.Egresses++
|
|
}
|
|
if node.IsRelay {
|
|
limits.Relays++
|
|
netUsage.Relays++
|
|
}
|
|
if node.IsInternetGateway || NodeIsInternetEgressRouter(ctx, node.ID.String(), node.Network) {
|
|
limits.InternetGateways++
|
|
netUsage.InternetGateways++
|
|
}
|
|
if node.IsAutoRelay {
|
|
limits.FailOvers++
|
|
netUsage.FailOvers++
|
|
}
|
|
|
|
limits.NetworkUsage[node.Network] = netUsage
|
|
}
|
|
|
|
return
|
|
}
|