mirror of
https://github.com/tiennm99/claude-code-routine-trigger.git
synced 2026-10-14 10:18:19 +00:00
feat: implement core daemon (config, fire client, scheduler)
This commit is contained in:
1 parent
981ec3255e
commit
9c4d7a532f
6 files changed
+384
-1
No files matched your search
@@ -0,0 +1,61 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
httpClientTimeout = 30 * time.Second
|
||||
httpFireTimeout = 30 * time.Second
|
||||
shutdownTimeout = 35 * time.Second
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg, err := Load()
|
||||
if err != nil {
|
||||
log.Fatalf("config: %v", err)
|
||||
}
|
||||
|
||||
logger := newLogger(cfg.LogLevel)
|
||||
slog.SetDefault(logger)
|
||||
|
||||
fire := &FireClient{
|
||||
URL: cfg.FireURL,
|
||||
Token: cfg.Token,
|
||||
HTTP: &http.Client{Timeout: httpClientTimeout},
|
||||
Template: cfg.Template,
|
||||
TZ: cfg.Location,
|
||||
Log: logger,
|
||||
}
|
||||
|
||||
sched, err := NewScheduler(cfg, fire, logger)
|
||||
if err != nil {
|
||||
logger.Error("scheduler init failed", "err", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
||||
defer cancel()
|
||||
|
||||
sched.Start()
|
||||
logger.Info("started",
|
||||
"schedules", cfg.Schedules,
|
||||
"tz", cfg.Location.String(),
|
||||
"entries", sched.EntryCount(),
|
||||
)
|
||||
|
||||
<-ctx.Done()
|
||||
logger.Info("shutting down")
|
||||
|
||||
stopCtx, stopCancel := context.WithTimeout(context.Background(), shutdownTimeout)
|
||||
defer stopCancel()
|
||||
sched.Stop(stopCtx)
|
||||
logger.Info("stopped cleanly")
|
||||
}
|
||||
Reference in new issue
Block a user