mirror of
https://github.com/versia-pub/versia-go.git
synced 2026-03-13 12:39:15 +01:00
refactor: workers
This commit is contained in:
parent
02ad720439
commit
8fa44e5f72
20 changed files with 764 additions and 465 deletions
|
|
@ -1,13 +1,24 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"git.devminer.xyz/devminer/unitel"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/rs/zerolog/log"
|
||||
"net/url"
|
||||
"os"
|
||||
"regexp"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.devminer.xyz/devminer/unitel"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type Mode string
|
||||
|
||||
const (
|
||||
ModeCombined Mode = "combined"
|
||||
ModeWeb Mode = "web"
|
||||
ModeConsumer Mode = "consumer"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
|
|
@ -25,6 +36,9 @@ type Config struct {
|
|||
NATSURI string
|
||||
NATSStreamName string
|
||||
|
||||
Mode Mode
|
||||
Consumers []string
|
||||
|
||||
DatabaseURI string
|
||||
|
||||
Telemetry unitel.Opts
|
||||
|
|
@ -62,6 +76,13 @@ func Load() {
|
|||
Msg("Both VERSIA_TLS_KEY and VERSIA_TLS_CERT have to be set if you want to use in-process TLS termination.")
|
||||
}
|
||||
|
||||
mode := getEnvStrOneOf("VERSIA_MODE", ModeCombined, ModeCombined, ModeWeb, ModeConsumer)
|
||||
|
||||
var consumers []string
|
||||
if raw := optionalEnvStr("VERSIA_TQ_CUSTOMERS"); raw != nil {
|
||||
consumers = strings.Split(*raw, ",")
|
||||
}
|
||||
|
||||
C = Config{
|
||||
Port: getEnvInt("VERSIA_PORT", 80),
|
||||
TLSCert: tlsCert,
|
||||
|
|
@ -76,13 +97,15 @@ func Load() {
|
|||
|
||||
NATSURI: os.Getenv("NATS_URI"),
|
||||
NATSStreamName: getEnvStr("NATS_STREAM_NAME", "versia-go"),
|
||||
DatabaseURI: os.Getenv("DATABASE_URI"),
|
||||
|
||||
Mode: mode,
|
||||
Consumers: consumers,
|
||||
|
||||
DatabaseURI: os.Getenv("DATABASE_URI"),
|
||||
|
||||
ForwardTracesTo: forwardTracesTo,
|
||||
Telemetry: unitel.ParseOpts("versia-go"),
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func optionalEnvStr(key string) *string {
|
||||
|
|
@ -93,6 +116,18 @@ func optionalEnvStr(key string) *string {
|
|||
return &value
|
||||
}
|
||||
|
||||
func getEnvBool(key string, default_ bool) bool {
|
||||
if value, ok := os.LookupEnv(key); ok {
|
||||
b, err := strconv.ParseBool(value)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
return default_
|
||||
}
|
||||
|
||||
func getEnvStr(key, default_ string) string {
|
||||
if value, ok := os.LookupEnv(key); ok {
|
||||
return value
|
||||
|
|
@ -113,3 +148,22 @@ func getEnvInt(key string, default_ int) int {
|
|||
|
||||
return default_
|
||||
}
|
||||
|
||||
func getEnvStrOneOf[T ~string](key string, default_ T, enum ...T) T {
|
||||
if value, ok := os.LookupEnv(key); ok {
|
||||
if !slices.Contains(enum, T(value)) {
|
||||
sb := strings.Builder{}
|
||||
sb.WriteString(key)
|
||||
sb.WriteString(" can only be one of ")
|
||||
for _, v := range enum {
|
||||
sb.WriteString(string(v))
|
||||
}
|
||||
|
||||
panic(sb.String())
|
||||
}
|
||||
|
||||
return T(value)
|
||||
}
|
||||
|
||||
return default_
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue