You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

132 rivejä
3.7 KiB

  1. package config
  2. import (
  3. "fmt"
  4. "os"
  5. "time"
  6. )
  7. type Config struct {
  8. HTTPAddr string
  9. WSAddr string
  10. MQTTHost string
  11. MQTTUser string
  12. MQTTPass string
  13. MQTTClientID string
  14. KafkaURL string
  15. DBHost string
  16. DBUser string
  17. DBPass string
  18. DBName string
  19. HTTPClientID string
  20. ClientSecret string
  21. HTTPUsername string
  22. HTTPPassword string
  23. HTTPAudience string
  24. ConfigPath string
  25. APIBaseURL string
  26. APIAuthURL string
  27. // TLSInsecureSkipVerify enables skipping TLS cert verification (e.g. for dev); default false.
  28. TLSInsecureSkipVerify bool
  29. }
  30. func getEnv(key, def string) string {
  31. if v := os.Getenv(key); v != "" {
  32. return v
  33. }
  34. return def
  35. }
  36. func getEnvBool(key string, defaultVal bool) bool {
  37. switch os.Getenv(key) {
  38. case "1", "true", "TRUE", "yes":
  39. return true
  40. case "0", "false", "FALSE", "no":
  41. return false
  42. }
  43. return defaultVal
  44. }
  45. func getEnvPanic(key string) string {
  46. if v := os.Getenv(key); v != "" {
  47. return v
  48. }
  49. panic(fmt.Sprintf("environment variable %s is not set", key))
  50. }
  51. func Load() *Config {
  52. return &Config{
  53. HTTPAddr: getEnv("HTTP_HOST_PATH", "0.0.0.0:1902"),
  54. WSAddr: getEnv("HTTPWS_HOST_PATH", "0.0.0.0:8088"),
  55. MQTTHost: getEnv("MQTT_HOST", "192.168.1.101"),
  56. MQTTUser: getEnvPanic("MQTT_USERNAME"),
  57. MQTTPass: getEnvPanic("MQTT_PASSWORD"),
  58. MQTTClientID: getEnvPanic("MQTT_CLIENT_ID"),
  59. KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"),
  60. DBHost: getEnv("DBHost", "127.0.0.1"),
  61. DBUser: getEnvPanic("DBUser"),
  62. DBPass: getEnvPanic("DBPass"),
  63. DBName: getEnv("DBName", "go_crud_db"),
  64. HTTPClientID: getEnvPanic("HTTPClientID"),
  65. ClientSecret: getEnvPanic("ClientSecret"),
  66. HTTPUsername: getEnvPanic("HTTPUsername"),
  67. HTTPPassword: getEnvPanic("HTTPPassword"),
  68. HTTPAudience: getEnvPanic("HTTPAudience"),
  69. ConfigPath: getEnv("CONFIG_PATH", "/app/cmd/server/config.json"),
  70. APIBaseURL: getEnv("API_BASE_URL", "https://10.251.0.30:5050"),
  71. TLSInsecureSkipVerify: getEnvBool("TLS_INSECURE_SKIP_VERIFY", false),
  72. }
  73. }
  74. func LoadDecoder() *Config {
  75. return &Config{
  76. KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"),
  77. }
  78. }
  79. func LoadServer() *Config {
  80. return &Config{
  81. KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"),
  82. HTTPAddr: getEnv("HTTP_HOST_PATH", "0.0.0.0:1902"),
  83. DBHost: getEnv("DBHost", "127.0.0.1"),
  84. DBUser: getEnvPanic("DBUser"),
  85. DBPass: getEnvPanic("DBPass"),
  86. DBName: getEnv("DBName", "go_crud_db"),
  87. HTTPClientID: getEnvPanic("HTTPClientID"),
  88. ClientSecret: getEnvPanic("ClientSecret"),
  89. HTTPUsername: getEnvPanic("HTTPUsername"),
  90. HTTPPassword: getEnvPanic("HTTPPassword"),
  91. HTTPAudience: getEnvPanic("HTTPAudience"),
  92. ConfigPath: getEnv("CONFIG_PATH", "/app/cmd/server/config.json"),
  93. APIBaseURL: getEnv("API_BASE_URL", "https://10.251.0.30:5050"),
  94. APIAuthURL: getEnv("API_AUTH_URL", "https://10.251.0.30:10002"),
  95. TLSInsecureSkipVerify: getEnvBool("TLS_INSECURE_SKIP_VERIFY", false),
  96. }
  97. }
  98. func LoadBridge() *Config {
  99. return &Config{
  100. KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"),
  101. MQTTHost: getEnv("MQTT_HOST", "192.168.1.101"),
  102. MQTTUser: getEnvPanic("MQTT_USERNAME"),
  103. MQTTPass: getEnvPanic("MQTT_PASSWORD"),
  104. MQTTClientID: getEnvPanic("MQTT_CLIENT_ID"),
  105. }
  106. }
  107. func LoadLocation() *Config {
  108. return &Config{
  109. KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"),
  110. TLSInsecureSkipVerify: getEnvBool("TLS_INSECURE_SKIP_VERIFY", false),
  111. }
  112. }
  113. const (
  114. SMALL_CHANNEL_SIZE = 200
  115. MEDIUM_CHANNEL_SIZE = 500
  116. LARGE_CHANNEL_SIZE = 2000
  117. SMALL_TICKER_INTERVAL = 1 * time.Second
  118. MEDIUM_TICKER_INTERVAL = 2 * time.Second
  119. LARGE_TICKER_INTERVAL = 5 * time.Second
  120. )