feat(observabillity): #115 integrate otel for metrics and traces
Some checks failed
Build Docker Image / Build-Docker-Image (push) Has been cancelled

This commit is contained in:
2025-06-07 12:18:41 +02:00
parent 7efaa0fc61
commit e2ff1221ca
32 changed files with 480 additions and 314 deletions

View File

@@ -1,12 +1,17 @@
package types
import (
"errors"
"spend-sparrow/internal/log"
)
var (
ErrMissingConfig = errors.New("missing config")
)
type Settings struct {
Port string
PrometheusEnabled bool
Port string
OtelEnabled bool
BaseUrl string
Environment string
@@ -22,37 +27,46 @@ type SmtpSettings struct {
FromName string
}
func NewSettingsFromEnv(env func(string) string) *Settings {
var smtp *SmtpSettings
func NewSettingsFromEnv(env func(string) string) (*Settings, error) {
var (
smtp *SmtpSettings
err error
)
if env("SMTP_ENABLED") == "true" {
smtp = getSmtpSettings(env)
smtp, err = getSmtpSettings(env)
if err != nil {
return nil, err
}
}
settings := &Settings{
Port: env("PORT"),
PrometheusEnabled: env("PROMETHEUS_ENABLED") == "true",
BaseUrl: env("BASE_URL"),
Environment: env("ENVIRONMENT"),
Smtp: smtp,
Port: env("PORT"),
OtelEnabled: env("OTEL_ENABLED") == "true",
BaseUrl: env("BASE_URL"),
Environment: env("ENVIRONMENT"),
Smtp: smtp,
}
if settings.BaseUrl == "" {
log.Fatal("BASE_URL must be set")
log.L.Error("BASE_URL must be set")
return nil, ErrMissingConfig
}
if settings.Port == "" {
log.Fatal("PORT must be set")
log.L.Error("PORT must be set")
return nil, ErrMissingConfig
}
if settings.Environment == "" {
log.Fatal("ENVIRONMENT must be set")
log.L.Error("ENVIRONMENT must be set")
return nil, ErrMissingConfig
}
log.Info("BASE_URL is %q", settings.BaseUrl)
log.Info("ENVIRONMENT is %q", settings.Environment)
log.L.Info("settings read", "BASE_URL", settings.BaseUrl)
log.L.Info("settings read", "ENVIRONMENT", settings.Environment)
return settings
return settings, nil
}
func getSmtpSettings(env func(string) string) *SmtpSettings {
func getSmtpSettings(env func(string) string) (*SmtpSettings, error) {
smtp := SmtpSettings{
Host: env("SMTP_HOST"),
Port: env("SMTP_PORT"),
@@ -63,23 +77,29 @@ func getSmtpSettings(env func(string) string) *SmtpSettings {
}
if smtp.Host == "" {
log.Fatal("SMTP_HOST must be set")
log.L.Error("SMTP_HOST must be set")
return nil, ErrMissingConfig
}
if smtp.Port == "" {
log.Fatal("SMTP_PORT must be set")
log.L.Error("SMTP_PORT must be set")
return nil, ErrMissingConfig
}
if smtp.User == "" {
log.Fatal("SMTP_USER must be set")
log.L.Error("SMTP_USER must be set")
return nil, ErrMissingConfig
}
if smtp.Pass == "" {
log.Fatal("SMTP_PASS must be set")
log.L.Error("SMTP_PASS must be set")
return nil, ErrMissingConfig
}
if smtp.FromMail == "" {
log.Fatal("SMTP_FROM_MAIL must be set")
log.L.Error("SMTP_FROM_MAIL must be set")
return nil, ErrMissingConfig
}
if smtp.FromName == "" {
log.Fatal("SMTP_FROM_NAME must be set")
log.L.Error("SMTP_FROM_NAME must be set")
return nil, ErrMissingConfig
}
return &smtp
return &smtp, nil
}