diff --git a/controllers/server.go b/controllers/server.go index 614a8135a..6c748e254 100644 --- a/controllers/server.go +++ b/controllers/server.go @@ -26,45 +26,12 @@ func serverHandlers(r *mux.Router) { } func getUsage(w http.ResponseWriter, r *http.Request) { - type usage struct { - Hosts int `json:"hosts"` - Clients int `json:"clients"` - Networks int `json:"networks"` - Users int `json:"users"` - Ingresses int `json:"ingresses"` - Egresses int `json:"egresses"` - } - var serverUsage usage - hosts, err := logic.GetAllHosts() - if err == nil { - serverUsage.Hosts = len(hosts) - } - clients, err := logic.GetAllExtClients() - if err == nil { - serverUsage.Clients = len(clients) - } - users, err := logic.GetUsers() - if err == nil { - serverUsage.Users = len(users) - } - networks, err := logic.GetNetworks() - if err == nil { - serverUsage.Networks = len(networks) - } - ingresses, err := logic.GetAllIngresses() - if err == nil { - serverUsage.Ingresses = len(ingresses) - } - egresses, err := logic.GetAllEgresses() - if err == nil { - serverUsage.Egresses = len(egresses) - } + serverUsage := logic.GetCurrentServerUsage() w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(models.SuccessResponse{ Code: http.StatusOK, Response: serverUsage, }) - } // swagger:route GET /api/server/status server getStatus diff --git a/logic/server.go b/logic/server.go index a8d509326..e97f1405d 100644 --- a/logic/server.go +++ b/logic/server.go @@ -31,3 +31,41 @@ func EnterpriseCheck() { check() } } + +func GetCurrentServerUsage() (usage models.Usage) { + usage.SetDefaults() + hosts, hErr := GetAllHosts() + if hErr == nil { + usage.Hosts = len(hosts) + } + clients, cErr := GetAllExtClients() + if cErr == nil { + usage.Clients = len(clients) + } + users, err := GetUsers() + if err == nil { + usage.Users = len(users) + } + networks, err := GetNetworks() + if err == nil { + usage.Networks = len(networks) + } + // TODO this part bellow can be optimized to get nodes just once + ingresses, err := GetAllIngresses() + if err == nil { + usage.Ingresses = len(ingresses) + } + egresses, err := GetAllEgresses() + if err == nil { + usage.Egresses = len(egresses) + } + relays, err := GetRelays() + if err == nil { + usage.Relays = len(relays) + } + gateways, err := GetInternetGateways() + if err == nil { + usage.InternetGateways = len(gateways) + } + return +} diff --git a/models/usage.go b/models/usage.go new file mode 100644 index 000000000..727f5403a --- /dev/null +++ b/models/usage.go @@ -0,0 +1,27 @@ +package models + +// Usage - struct for license usage +type Usage struct { + Servers int `json:"servers"` + Users int `json:"users"` + Hosts int `json:"hosts"` + Clients int `json:"clients"` + Networks int `json:"networks"` + Ingresses int `json:"ingresses"` + Egresses int `json:"egresses"` + Relays int `json:"relays"` + InternetGateways int `json:"internet_gateways"` +} + +// Usage.SetDefaults - sets the default values for usage +func (l *Usage) SetDefaults() { + l.Clients = 0 + l.Servers = 1 + l.Hosts = 0 + l.Users = 1 + l.Networks = 0 + l.Ingresses = 0 + l.Egresses = 0 + l.Relays = 0 + l.InternetGateways = 0 +} diff --git a/pro/types.go b/pro/types.go index 3e4ef08d1..d57fa26f1 100644 --- a/pro/types.go +++ b/pro/types.go @@ -5,6 +5,7 @@ package pro import ( "fmt" + "github.com/gravitl/netmaker/models" ) // constants for accounts api hosts @@ -48,34 +49,8 @@ type ValidatedLicense struct { // LicenseSecret - the encrypted struct for sending user-id type LicenseSecret struct { - AssociatedID string `json:"associated_id" binding:"required"` // UUID for user foreign key to User table - Usage Usage `json:"limits" binding:"required"` -} - -// Usage - struct for license usage -type Usage struct { - Servers int `json:"servers"` - Users int `json:"users"` - Hosts int `json:"hosts"` - Clients int `json:"clients"` - Networks int `json:"networks"` - Ingresses int `json:"ingresses"` - Egresses int `json:"egresses"` - Relays int `json:"relays"` - InternetGateways int `json:"internet_gateways"` -} - -// Usage.SetDefaults - sets the default values for usage -func (l *Usage) SetDefaults() { - l.Clients = 0 - l.Servers = 1 - l.Hosts = 0 - l.Users = 1 - l.Networks = 0 - l.Ingresses = 0 - l.Egresses = 0 - l.Relays = 0 - l.InternetGateways = 0 + AssociatedID string `json:"associated_id" binding:"required"` // UUID for user foreign key to User table + Usage models.Usage `json:"limits" binding:"required"` } // ValidateLicenseRequest - used for request to validate license endpoint diff --git a/pro/util.go b/pro/util.go index d7490c8fe..c0ce7f316 100644 --- a/pro/util.go +++ b/pro/util.go @@ -5,8 +5,6 @@ package pro import ( "encoding/base64" - - "github.com/gravitl/netmaker/logic" ) // base64encode - base64 encode helper function @@ -25,41 +23,3 @@ func base64decode(input string) []byte { return bytes } - -func getCurrentServerUsage() (limits Usage) { - limits.SetDefaults() - hosts, hErr := logic.GetAllHosts() - if hErr == nil { - limits.Hosts = len(hosts) - } - clients, cErr := logic.GetAllExtClients() - if cErr == nil { - limits.Clients = len(clients) - } - users, err := logic.GetUsers() - if err == nil { - limits.Users = len(users) - } - networks, err := logic.GetNetworks() - if err == nil { - limits.Networks = len(networks) - } - // TODO this part bellow can be optimized to get nodes just once - ingresses, err := logic.GetAllIngresses() - if err == nil { - limits.Ingresses = len(ingresses) - } - egresses, err := logic.GetAllEgresses() - if err == nil { - limits.Egresses = len(egresses) - } - relays, err := logic.GetRelays() - if err == nil { - limits.Relays = len(relays) - } - gateways, err := logic.GetInternetGateways() - if err == nil { - limits.InternetGateways = len(gateways) - } - return -}