| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | package logicimport (	"context"	"github.com/gravitl/netmaker/db"	"github.com/gravitl/netmaker/models"	"github.com/gravitl/netmaker/schema")func GetCurrentServerUsage() (limits models.Usage) {	limits.SetDefaults()	hosts, hErr := GetAllHostsWithStatus(models.OnlineSt)	if hErr == nil {		limits.Hosts = len(hosts)	}	clients, cErr := GetAllExtClientsWithStatus(models.OnlineSt)	if cErr == nil {		limits.Clients = len(clients)	}	users, err := GetUsers()	if err == nil {		limits.Users = len(users)	}	networks, err := GetNetworks()	if err == nil {		limits.Networks = len(networks)	}	limits.Egresses, _ = (&schema.Egress{}).Count(db.WithContext(context.TODO()))	nodes, _ := GetAllNodes()	for _, client := range clients {		nodes = append(nodes, client.ConvertToStaticNode())	}	limits.NetworkUsage = make(map[string]models.NetworkUsage)	for _, network := range networks {		limits.NetworkUsage[network.NetID] = 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 {			limits.InternetGateways++			netUsage.InternetGateways++		}		if node.IsFailOver {			limits.FailOvers++			netUsage.FailOvers++		}		limits.NetworkUsage[node.Network] = netUsage	}	return}
 |