summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-08-11 14:57:20 +0300
committerPaul Buetow <paul@buetow.org>2024-08-11 14:57:20 +0300
commit4fbe8284ce4d6d6f9da563785bab1278f69c5f9d (patch)
treec1075ac6b4a17f81c5c740c9ad21b57c7f5c1f52
parent911bac5345502d099e93aa72a79b91e9ba14f01f (diff)
initial cron service
-rw-r--r--cmd/gosd/main.go5
-rw-r--r--internal/config/config.go18
-rw-r--r--internal/config/config_test.go12
-rw-r--r--internal/config/server/server.go27
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
}