ev/internal/lg/init.go

69 lines
1.4 KiB
Go
Raw Permalink Normal View History

package lg
import (
"context"
"log"
2022-08-14 13:40:02 -06:00
"os"
2022-08-23 21:24:13 -06:00
"strings"
"go.uber.org/multierr"
)
func Init(ctx context.Context, name string) (context.Context, func() error) {
2022-08-13 18:59:15 -06:00
ctx, span := Span(ctx)
defer span.End()
stop := [3]func() error{
initLogger(name),
}
ctx, stop[1] = initMetrics(ctx, name)
ctx, stop[2] = initTracing(ctx, name)
reverse(stop[:])
return ctx, func() error {
log.Println("flushing logs...")
errs := make([]error, len(stop))
for i, fn := range stop {
2022-08-13 18:59:15 -06:00
if fn != nil {
errs[i] = fn()
}
}
log.Println("all stopped.")
return multierr.Combine(errs...)
}
}
2022-08-14 13:40:02 -06:00
func env(name, defaultValue string) string {
2022-08-23 21:24:13 -06:00
name = strings.TrimSpace(name)
defaultValue = strings.TrimSpace(defaultValue)
if v := strings.TrimSpace(os.Getenv(name)); v != "" {
log.Println("# ", name, "=", v)
2022-08-14 13:40:02 -06:00
return v
}
2022-08-23 21:24:13 -06:00
log.Println("# ", name, "=", defaultValue, "(default)")
2022-08-14 13:40:02 -06:00
return defaultValue
}
2022-08-23 21:24:13 -06:00
type secret string
func (s secret) String() string {
if s == "" {
return "(nil)"
}
return "***"
}
func (s secret) Secret() string {
return string(s)
}
func envSecret(name, defaultValue string) secret {
name = strings.TrimSpace(name)
defaultValue = strings.TrimSpace(defaultValue)
if v := strings.TrimSpace(os.Getenv(name)); v != "" {
log.Println("# ", name, "=", secret(v))
return secret(v)
}
log.Println("# ", name, "=", secret(defaultValue), "(default)")
return secret(defaultValue)
}