Преглед изворни кода

set free tier limits through config

Abhishek Kondur пре 2 година
родитељ
комит
96a4e6ccf9
7 измењених фајлова са 117 додато и 76 уклоњено
  1. 47 42
      config/config.go
  2. 3 18
      ee/initialize.go
  3. 0 4
      ee/license.go
  4. 8 12
      ee/types.go
  5. 8 0
      logic/serverconf.go
  6. 3 0
      main.go
  7. 48 0
      servercfg/serverconf.go

+ 47 - 42
config/config.go

@@ -32,48 +32,53 @@ type EnvironmentConfig struct {
 
 // ServerConfig - server conf struct
 type ServerConfig struct {
-	CoreDNSAddr           string `yaml:"corednsaddr"`
-	APIConnString         string `yaml:"apiconn"`
-	APIHost               string `yaml:"apihost"`
-	APIPort               string `yaml:"apiport"`
-	Broker                string `yam:"broker"`
-	ServerBrokerEndpoint  string `yaml:"serverbrokerendpoint"`
-	BrokerType            string `yaml:"brokertype"`
-	EmqxRestEndpoint      string `yaml:"emqxrestendpoint"`
-	MasterKey             string `yaml:"masterkey"`
-	DNSKey                string `yaml:"dnskey"`
-	AllowedOrigin         string `yaml:"allowedorigin"`
-	NodeID                string `yaml:"nodeid"`
-	RestBackend           string `yaml:"restbackend"`
-	MessageQueueBackend   string `yaml:"messagequeuebackend"`
-	DNSMode               string `yaml:"dnsmode"`
-	DisableRemoteIPCheck  string `yaml:"disableremoteipcheck"`
-	Version               string `yaml:"version"`
-	SQLConn               string `yaml:"sqlconn"`
-	Platform              string `yaml:"platform"`
-	Database              string `yaml:"database"`
-	Verbosity             int32  `yaml:"verbosity"`
-	AuthProvider          string `yaml:"authprovider"`
-	OIDCIssuer            string `yaml:"oidcissuer"`
-	ClientID              string `yaml:"clientid"`
-	ClientSecret          string `yaml:"clientsecret"`
-	FrontendURL           string `yaml:"frontendurl"`
-	DisplayKeys           string `yaml:"displaykeys"`
-	AzureTenant           string `yaml:"azuretenant"`
-	Telemetry             string `yaml:"telemetry"`
-	HostNetwork           string `yaml:"hostnetwork"`
-	Server                string `yaml:"server"`
-	PublicIPService       string `yaml:"publicipservice"`
-	MQPassword            string `yaml:"mqpassword"`
-	MQUserName            string `yaml:"mqusername"`
-	MetricsExporter       string `yaml:"metrics_exporter"`
-	BasicAuth             string `yaml:"basic_auth"`
-	LicenseValue          string `yaml:"license_value"`
-	NetmakerAccountID     string `yaml:"netmaker_account_id"`
-	IsEE                  string `yaml:"is_ee"`
-	StunPort              int    `yaml:"stun_port"`
-	StunHost              string `yaml:"stun_host"`
-	Proxy                 string `yaml:"proxy"`
+	CoreDNSAddr          string `yaml:"corednsaddr"`
+	APIConnString        string `yaml:"apiconn"`
+	APIHost              string `yaml:"apihost"`
+	APIPort              string `yaml:"apiport"`
+	Broker               string `yam:"broker"`
+	ServerBrokerEndpoint string `yaml:"serverbrokerendpoint"`
+	BrokerType           string `yaml:"brokertype"`
+	EmqxRestEndpoint     string `yaml:"emqxrestendpoint"`
+	MasterKey            string `yaml:"masterkey"`
+	DNSKey               string `yaml:"dnskey"`
+	AllowedOrigin        string `yaml:"allowedorigin"`
+	NodeID               string `yaml:"nodeid"`
+	RestBackend          string `yaml:"restbackend"`
+	MessageQueueBackend  string `yaml:"messagequeuebackend"`
+	DNSMode              string `yaml:"dnsmode"`
+	DisableRemoteIPCheck string `yaml:"disableremoteipcheck"`
+	Version              string `yaml:"version"`
+	SQLConn              string `yaml:"sqlconn"`
+	Platform             string `yaml:"platform"`
+	Database             string `yaml:"database"`
+	Verbosity            int32  `yaml:"verbosity"`
+	AuthProvider         string `yaml:"authprovider"`
+	OIDCIssuer           string `yaml:"oidcissuer"`
+	ClientID             string `yaml:"clientid"`
+	ClientSecret         string `yaml:"clientsecret"`
+	FrontendURL          string `yaml:"frontendurl"`
+	DisplayKeys          string `yaml:"displaykeys"`
+	AzureTenant          string `yaml:"azuretenant"`
+	Telemetry            string `yaml:"telemetry"`
+	HostNetwork          string `yaml:"hostnetwork"`
+	Server               string `yaml:"server"`
+	PublicIPService      string `yaml:"publicipservice"`
+	MQPassword           string `yaml:"mqpassword"`
+	MQUserName           string `yaml:"mqusername"`
+	MetricsExporter      string `yaml:"metrics_exporter"`
+	BasicAuth            string `yaml:"basic_auth"`
+	LicenseValue         string `yaml:"license_value"`
+	NetmakerAccountID    string `yaml:"netmaker_account_id"`
+	IsEE                 string `yaml:"is_ee"`
+	StunPort             int    `yaml:"stun_port"`
+	StunHost             string `yaml:"stun_host"`
+	Proxy                string `yaml:"proxy"`
+	NodeLimit            int    `yaml:"node_limit"`
+	UserLimit            int    `yaml:"user_limit"`
+	ClientLimit          int    `yaml:"client_limit"`
+	NetworkLimit         int    `yaml:"network_limit"`
+	DeployedByOperator   bool   `yaml:"deployed_by_operator"`
 }
 
 // SQLConfig - Generic SQL Config

+ 3 - 18
ee/initialize.go

@@ -16,6 +16,7 @@ import (
 // InitEE - Initialize EE Logic
 func InitEE() {
 	setIsEnterprise()
+	servercfg.Is_EE = true
 	models.SetLogo(retrieveEELogo())
 	controller.HttpHandlers = append(
 		controller.HttpHandlers,
@@ -26,13 +27,8 @@ func InitEE() {
 	logic.EnterpriseCheckFuncs = append(logic.EnterpriseCheckFuncs, func() {
 		// == License Handling ==
 		ValidateLicense()
-		if Limits.FreeTier {
-			logger.Log(0, "proceeding with Free Tier license")
-			logic.SetFreeTierForTelemetry(true)
-		} else {
-			logger.Log(0, "proceeding with Paid Tier license")
-			logic.SetFreeTierForTelemetry(false)
-		}
+		logger.Log(0, "proceeding with Paid Tier license")
+		logic.SetFreeTierForTelemetry(false)
 		// == End License Handling ==
 		AddLicenseHooks()
 		resetFailover()
@@ -42,17 +38,6 @@ func InitEE() {
 	logic.EnterpriseResetAllPeersFailovers = eelogic.WipeAffectedFailoversOnly
 }
 
-func setControllerLimits() {
-	logic.Node_Limit = Limits.Nodes
-	logic.Users_Limit = Limits.Users
-	logic.Clients_Limit = Limits.Clients
-	logic.Free_Tier = Limits.FreeTier
-	servercfg.Is_EE = true
-	if logic.Free_Tier {
-		logic.Networks_Limit = 3
-	}
-}
-
 func resetFailover() {
 	nets, err := logic.GetNetworks()
 	if err == nil {

+ 0 - 4
ee/license.go

@@ -93,14 +93,10 @@ func ValidateLicense() error {
 	}
 
 	Limits.Networks = math.MaxInt
-	Limits.FreeTier = license.FreeTier == "yes"
 	Limits.Clients = license.LimitClients
 	Limits.Nodes = license.LimitNodes
 	Limits.Servers = license.LimitServers
 	Limits.Users = license.LimitUsers
-	if Limits.FreeTier {
-		Limits.Networks = 3
-	}
 	setControllerLimits()
 
 	logger.Log(0, "License validation succeeded!")

+ 8 - 12
ee/types.go

@@ -18,7 +18,6 @@ var Limits = GlobalLimits{
 	Nodes:    0,
 	Clients:  0,
 	Networks: 0,
-	FreeTier: false,
 }
 
 // GlobalLimits - struct for holding global limits on this netmaker server in memory
@@ -27,22 +26,19 @@ type GlobalLimits struct {
 	Users    int
 	Nodes    int
 	Clients  int
-	FreeTier bool
 	Networks int
 }
 
 // LicenseKey - the license key struct representation with associated data
 type LicenseKey struct {
-	LicenseValue   string `json:"license_value"` // actual (public) key and the unique value for the key
-	Expiration     int64  `json:"expiration"`
-	LimitServers   int    `json:"limit_servers"`
-	LimitUsers     int    `json:"limit_users"`
-	LimitNodes     int    `json:"limit_nodes"`
-	LimitClients   int    `json:"limit_clients"`
-	Metadata       string `json:"metadata"`
-	SubscriptionID string `json:"subscription_id"` // for a paid subscription (non-free-tier license)
-	FreeTier       string `json:"free_tier"`       // yes if free tier
-	IsActive       string `json:"is_active"`       // yes if active
+	LicenseValue string `json:"license_value"` // actual (public) key and the unique value for the key
+	Expiration   int64  `json:"expiration"`
+	LimitServers int    `json:"limit_servers"`
+	LimitUsers   int    `json:"limit_users"`
+	LimitNodes   int    `json:"limit_nodes"`
+	LimitClients int    `json:"limit_clients"`
+	Metadata     string `json:"metadata"`
+	IsActive     string `json:"is_active"` // yes if active
 }
 
 // ValidatedLicense - the validated license struct

+ 8 - 0
logic/serverconf.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 
 	"github.com/gravitl/netmaker/database"
+	"github.com/gravitl/netmaker/servercfg"
 )
 
 var (
@@ -85,3 +86,10 @@ func StoreJWTSecret(privateKey string) error {
 	}
 	return database.Insert("nm-jwt-secret", string(data), database.SERVERCONF_TABLE_NAME)
 }
+
+func SetFreeTierLimits() {
+	Node_Limit = servercfg.GetNodeLimit()
+	Users_Limit = servercfg.GetUserLimit()
+	Clients_Limit = servercfg.GetClientLimit()
+	Networks_Limit = servercfg.GetNetworkLimit()
+}

+ 3 - 0
main.go

@@ -39,6 +39,9 @@ func main() {
 	initialize()                       // initial db and acls
 	setGarbageCollection()
 	setVerbosity()
+	if servercfg.DeployedByOperator() {
+		logic.SetFreeTierLimits()
+	}
 	defer database.CloseDB()
 	ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGTERM, os.Interrupt)
 	defer stop()

+ 48 - 0
servercfg/serverconf.go

@@ -10,6 +10,7 @@ import (
 	"time"
 
 	"github.com/gravitl/netmaker/config"
+
 	"github.com/gravitl/netmaker/models"
 )
 
@@ -604,3 +605,50 @@ func IsProxyEnabled() bool {
 	}
 	return enabled
 }
+
+func GetNodeLimit() int {
+	var nodelimit int
+	if os.Getenv("NODE_LIMIT") != "" {
+		nodelimit, _ = strconv.Atoi(os.Getenv("Node_LIMIT"))
+	} else {
+		nodelimit = config.Config.Server.NodeLimit
+	}
+	return nodelimit
+}
+
+func GetUserLimit() int {
+	var userlimit int
+	if os.Getenv("USER_LIMIT") != "" {
+		userlimit, _ = strconv.Atoi(os.Getenv("USER_LIMIT"))
+	} else {
+		userlimit = config.Config.Server.UserLimit
+	}
+	return userlimit
+}
+
+func GetNetworkLimit() int {
+	var networklimit int
+	if os.Getenv("NETWORK_LIMIT") != "" {
+		networklimit, _ = strconv.Atoi(os.Getenv("NETWORK_LIMIT"))
+	} else {
+		networklimit = config.Config.Server.NetworkLimit
+	}
+	return networklimit
+}
+
+func GetClientLimit() int {
+	var clientLimit int
+	if os.Getenv("CLIENT_LIMIT") != "" {
+		clientLimit, _ = strconv.Atoi(os.Getenv("CLIENT_LIMIT"))
+	} else {
+		clientLimit = config.Config.Server.ClientLimit
+	}
+	return clientLimit
+}
+
+func DeployedByOperator() bool {
+	if os.Getenv("DEPLOYED_BY_OPERATOR") != "" {
+		return os.Getenv("DEPLOYED_BY_OPERATOR") == "true"
+	}
+	return config.Config.Server.DeployedByOperator
+}