usage.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package logic
  2. import (
  3. "context"
  4. "github.com/gravitl/netmaker/db"
  5. "github.com/gravitl/netmaker/models"
  6. "github.com/gravitl/netmaker/schema"
  7. )
  8. func GetCurrentServerUsage() (limits models.Usage) {
  9. limits.SetDefaults()
  10. hosts, hErr := GetAllHostsWithStatus(models.OnlineSt)
  11. if hErr == nil {
  12. limits.Hosts = len(hosts)
  13. }
  14. clients, cErr := GetAllExtClientsWithStatus(models.OnlineSt)
  15. if cErr == nil {
  16. limits.Clients = len(clients)
  17. }
  18. users, err := GetUsers()
  19. if err == nil {
  20. limits.Users = len(users)
  21. }
  22. networks, err := GetNetworks()
  23. if err == nil {
  24. limits.Networks = len(networks)
  25. }
  26. limits.Egresses, _ = (&schema.Egress{}).Count(db.WithContext(context.TODO()))
  27. nodes, _ := GetAllNodes()
  28. for _, client := range clients {
  29. nodes = append(nodes, client.ConvertToStaticNode())
  30. }
  31. limits.NetworkUsage = make(map[string]models.NetworkUsage)
  32. for _, network := range networks {
  33. limits.NetworkUsage[network.NetID] = models.NetworkUsage{}
  34. }
  35. for _, node := range nodes {
  36. netUsage, ok := limits.NetworkUsage[node.Network]
  37. if !ok {
  38. // if network doesn't exist, this node is probably awaiting cleanup.
  39. // so ignore.
  40. continue
  41. }
  42. netUsage.Nodes++
  43. if node.IsStatic {
  44. netUsage.Clients++
  45. }
  46. if node.IsIngressGateway {
  47. limits.Ingresses++
  48. netUsage.Ingresses++
  49. }
  50. if node.EgressDetails.IsEgressGateway {
  51. netUsage.Egresses++
  52. }
  53. if node.IsRelay {
  54. limits.Relays++
  55. netUsage.Relays++
  56. }
  57. if node.IsInternetGateway {
  58. limits.InternetGateways++
  59. netUsage.InternetGateways++
  60. }
  61. if node.IsFailOver {
  62. limits.FailOvers++
  63. netUsage.FailOvers++
  64. }
  65. limits.NetworkUsage[node.Network] = netUsage
  66. }
  67. return
  68. }