Skip to main content
Glama
environment.go2.3 kB
package utils import ( "context" "fmt" "strconv" "time" "github.com/sirupsen/logrus" "github.com/spf13/viper" ) // IsLocal will return true if the APP_ENV is not listed in those three condition func IsLocal() bool { envLevel := MustHaveEnv("APP_ENV") return envLevel != "production" && envLevel != "staging" && envLevel != "integration" } func Env[T any](key string, defValue ...T) T { if env := viper.Get(key); env != nil { // Ensure type safety for retrieved environment variables if value, ok := env.(T); ok { return value } } if len(defValue) > 0 { return defValue[0] } var zero T return zero } // MustHaveEnv ensure the ENV is exists, otherwise will crashing the app func MustHaveEnv(key string) string { env := viper.GetString(key) if env == "" { logrus.Warn(context.Background(), map[string]any{ "field": key, }, "variable is not well set, reading from .env file") viper.SetConfigFile(".env") viper.SetConfigType("env") err := viper.ReadInConfig() if err != nil { logrus.Fatal(err, "can't read .env file") } env = viper.GetString(key) } if env == "" { logrus.Fatal(fmt.Sprintf("%s is not well set", key)) } return env } // MustHaveEnvBool ensure the ENV exists and returns a bool, otherwise it will crash the app func MustHaveEnvBool(key string) bool { env := MustHaveEnv(key) return env == "true" } // MustHaveEnvInt ensure the ENV is exists and return int value func MustHaveEnvInt(key string) int { env := MustHaveEnv(key) number, err := strconv.ParseInt(env, 10, 64) if err != nil { logrus.Fatal(fmt.Sprintf("%s is not well set", key)) } return int(number) } // MustHaveEnvMinuteDuration ensure the ENV is exists and return a minute duration func MustHaveEnvMinuteDuration(key string) time.Duration { env := MustHaveEnv(key) number, err := strconv.ParseInt(env, 10, 64) if err != nil { logrus.Fatal(fmt.Sprintf("%s is not well set", key)) } return time.Duration(number) * time.Minute } func LoadConfig(path string, name ...string) (err error) { viper.AddConfigPath(path) if len(name) > 0 && name[0] != "" { viper.SetConfigName(name[0]) } else { viper.SetConfigName(".env") } viper.SetConfigType("env") viper.AutomaticEnv() err = viper.ReadInConfig() if err != nil { return } return nil }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/samihalawa/whatsapp-go-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server