opencost.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package env
  2. import (
  3. "time"
  4. "github.com/opencost/opencost/core/pkg/env"
  5. "github.com/opencost/opencost/core/pkg/log"
  6. "github.com/opencost/opencost/core/pkg/util/timeutil"
  7. )
  8. // Environment variables specific to the running of opencost
  9. const (
  10. DefaultAPIPort = 9003
  11. defaultOpencostNamespace = "opencost"
  12. )
  13. const (
  14. UTCOffsetEnvVar = "UTC_OFFSET"
  15. MCPQueryTimeoutSecondsEnvVar = "MCP_QUERY_TIMEOUT_SECONDS"
  16. CurrencyProviderEnvVar = "CURRENCY_PROVIDER"
  17. CurrencyAPIKeyEnvVar = "CURRENCY_API_KEY"
  18. )
  19. func GetOpencostAPIPort() int {
  20. return env.GetAPIPortWithDefault(DefaultAPIPort)
  21. }
  22. // GetOpencostNamespace returns the environment variable value that is set for the kubernetes namespace
  23. // this service is installed in.
  24. func GetOpencostNamespace() string {
  25. return env.GetInstallNamespace(defaultOpencostNamespace)
  26. }
  27. // GetUTCOffset returns the environment variable value for UTCOffset
  28. func GetUTCOffset() string {
  29. return env.Get(UTCOffsetEnvVar, "")
  30. }
  31. // GetParsedUTCOffset returns the duration of the configured UTC offset
  32. func GetParsedUTCOffset() time.Duration {
  33. offset, err := timeutil.ParseUTCOffset(GetUTCOffset())
  34. if err != nil {
  35. log.Warnf("Failed to parse UTC offset: %s", err)
  36. return time.Duration(0)
  37. }
  38. return offset
  39. }
  40. // GetMCPQueryTimeout returns the configured timeout for MCP query operations.
  41. // Default is 60 seconds, but can be configured via MCP_QUERY_TIMEOUT_SECONDS environment variable.
  42. // Minimum timeout is 1 second to prevent immediate timeouts.
  43. func GetMCPQueryTimeout() time.Duration {
  44. seconds := env.GetInt(MCPQueryTimeoutSecondsEnvVar, 60)
  45. if seconds <= 0 {
  46. seconds = 1
  47. }
  48. return time.Duration(seconds) * time.Second
  49. }
  50. // GetCurrencyProvider returns the currency provider name from environment variable.
  51. // Default is "default" which disables currency conversion.
  52. func GetCurrencyProvider() string {
  53. return env.Get(CurrencyProviderEnvVar, "default")
  54. }
  55. // GetCurrencyAPIKey returns the currency API key from environment variable.
  56. // Returns empty string if not set.
  57. func GetCurrencyAPIKey() string {
  58. return env.Get(CurrencyAPIKeyEnvVar, "")
  59. }