diff options
| author | Paul Buetow <paul@buetow.org> | 2024-08-11 14:57:20 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-08-11 14:57:20 +0300 |
| commit | 4fbe8284ce4d6d6f9da563785bab1278f69c5f9d (patch) | |
| tree | c1075ac6b4a17f81c5c740c9ad21b57c7f5c1f52 | |
| parent | 911bac5345502d099e93aa72a79b91e9ba14f01f (diff) | |
initial cron service
| -rw-r--r-- | cmd/gosd/main.go | 5 | ||||
| -rw-r--r-- | internal/config/config.go | 18 | ||||
| -rw-r--r-- | internal/config/config_test.go | 12 | ||||
| -rw-r--r-- | internal/config/server/server.go | 27 |
4 files changed, 46 insertions, 16 deletions
diff --git a/cmd/gosd/main.go b/cmd/gosd/main.go index 6d11756..e83d6f8 100644 --- a/cmd/gosd/main.go +++ b/cmd/gosd/main.go @@ -9,6 +9,7 @@ import ( config "codeberg.org/snonux/gos/internal/config/server" "codeberg.org/snonux/gos/internal/server" + "codeberg.org/snonux/gos/internal/server/cron" "codeberg.org/snonux/gos/internal/server/handler" ) @@ -28,6 +29,10 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() + if err := cron.Start(ctx, conf); err != nil { + panic(err) + } + serv.Handle("health", func(w http.ResponseWriter, r *http.Request) error { fmt.Fprint(w, serv.Status.String()) return nil diff --git a/internal/config/config.go b/internal/config/config.go index c05d553..d697434 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -27,7 +27,7 @@ func FromFile[T any](configFile string) (T, error) { // Set config from envoronment variable if present, e.g. hansWurst from GOS_HANS_WURST func FromENV(keys ...string) string { - for _, key := range keys{ + for _, key := range keys { if key == "" { continue } @@ -43,11 +43,13 @@ func FromENV(keys ...string) string { } func isAllUpperCase(s string) bool { - for _, r := range s { - if unicode.IsLetter(r) && !unicode.IsUpper(r) { - return false - } - } - return true + for _, r := range s { + if unicode.IsLetter(r) && !unicode.IsUpper(r) { + return false + } + if unicode.IsDigit(r) { + return false + } + } + return true } - diff --git a/internal/config/config_test.go b/internal/config/config_test.go index a0a5228..45008de 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -55,4 +55,16 @@ func TestSecondENV(t *testing.T) { if expected != got { t.Errorf("got '%s' but expected '%s'", got, expected) } +}dfdf + +func TestIsAllUpperCase(t *testing.T) { + if isAllUpperCase("foo_bar") { + t.Errorf("lowercas letters in test case") + } + if isAllUpperCase("FOO123") { + t.Errorf("numbers in string should not evaluate to is all upper") + } + if !isAllUpperCase("FOO_BAR") { + t.Errorf("should be all upper") + } } diff --git a/internal/config/server/server.go b/internal/config/server/server.go index 6b06ff3..7e642d0 100644 --- a/internal/config/server/server.go +++ b/internal/config/server/server.go @@ -10,25 +10,27 @@ import ( ) type ServerConfig struct { - ListenAddr string `json:"ListenAddr,omitempty"` - Partner string `json:"Partner,omitempty"` - APIKey string `json:"APIKey,omitempty"` - DataDir string `json:"StateDir,omitempty"` - EmailTo string `json:"EmailTo,omitempty"` - EmailFrom string `json:"EmailFrom,omitempty"` - SMTPServer string `json:"SMTPServer,omitempty"` + ListenAddr string `json:"ListenAddr,omitempty"` + Partner string `json:"Partner,omitempty"` + APIKey string `json:"APIKey,omitempty"` + DataDir string `json:"StateDir,omitempty"` + EmailTo string `json:"EmailTo,omitempty"` + EmailFrom string `json:"EmailFrom,omitempty"` + SMTPServer string `json:"SMTPServer,omitempty"` + CRONMergeIntervalS int `json:"CRONMergeInterval,omitempty"` } func New(configFile string) (ServerConfig, error) { conf, _ := config.FromFile[ServerConfig](configFile) + conf.ListenAddr = config.FromENV("GOS_LISTEN_ADDR", conf.ListenAddr, "localhost:8080") conf.Partner = config.FromENV("GOS_PARTNER", conf.Partner) conf.APIKey = config.FromENV("GOS_API_KEY", conf.APIKey) conf.DataDir = config.FromENV("GOS_DATA_DIR", conf.DataDir, "data") conf.EmailTo = config.FromENV("GOS_EMAIL_TO", conf.EmailTo) conf.EmailFrom = config.FromENV("GOS_EMAIL_FROM", conf.EmailFrom) - conf.SMTPServer = config.FromENV("GOS_SMTP_SERVER", conf.SMTPServer) + conf.SMTPServer = config.FromENV("GOS_SMTP_SERVER", conf.SMTPServer) if conf.SMTPServer == "" { hostname, err := os.Hostname() if err != nil { @@ -38,6 +40,15 @@ func New(configFile string) (ServerConfig, error) { log.Println("Set SMTPServer to " + conf.SMTPServer) } + // TODO: When there are more int parsing cases in the config, use generic? config.FromENV? + if conf.CRONMergeIntervalS == 0 { + fmt.Println("FOO", config.FromENV("GOS_CRON_MERGE_INTERVAL", "3600")) + // var err error + // if conf.CRONMergeIntervalS, err = strconv.Atoi(config.FromENV("GOS_CRON_MERGE_INTERVAL", "3600")); err != nil { + // return conf, err + // } + } + return conf, nil } |
