diff options
author | Alan Pearce | 2024-05-15 21:09:02 +0200 |
---|---|---|
committer | Alan Pearce | 2024-05-15 21:09:02 +0200 |
commit | fa97ca832d6dc301dabb5d9c76730630f99534e0 (patch) | |
tree | e34b587ba42c78df184f136198fd0093d916131e /searchix.go | |
parent | d65d80e1133eebf11cc1adb3438a1cc53635185f (diff) | |
download | searchix-fa97ca832d6dc301dabb5d9c76730630f99534e0.tar.lz searchix-fa97ca832d6dc301dabb5d9c76730630f99534e0.tar.zst searchix-fa97ca832d6dc301dabb5d9c76730630f99534e0.zip |
feat: monitor import jobs via sentry
Diffstat (limited to 'searchix.go')
-rw-r--r-- | searchix.go | 75 |
1 files changed, 59 insertions, 16 deletions
diff --git a/searchix.go b/searchix.go index ce1f5e1..9917969 100644 --- a/searchix.go +++ b/searchix.go @@ -15,6 +15,7 @@ import ( "searchix/internal/index" "searchix/internal/server" + "github.com/getsentry/sentry-go" "github.com/pelletier/go-toml/v2" ) @@ -65,6 +66,16 @@ func main() { log.SetFlags(log.LstdFlags) } + err = sentry.Init(sentry.ClientOptions{ + EnableTracing: true, + TracesSampleRate: 1.0, + Dsn: cfg.Web.SentryDSN, + Environment: cfg.Web.Environment, + }) + if err != nil { + slog.Warn("could not initialise sentry", "error", err) + } + read, write, exists, err := index.OpenOrCreate(cfg.DataPath, *replace) if err != nil { log.Fatalf("Failed to open or create index: %v", err) @@ -94,23 +105,54 @@ func main() { slog.Debug("server stopped") }() - go func() { - nextRun := nextOccurrenceOfLocalTime(cfg.Importer.UpdateAt) - for { - slog.Debug("scheduling next run", "next-run", nextRun) - <-time.After(time.Until(nextRun)) - wg.Add(1) - slog.Info("updating index") - err = importer.Start(cfg, write, false) - wg.Done() - if err != nil { - slog.Warn("error updating index", "error", err) - } else { - slog.Info("update complete") + go func(localHub *sentry.Hub) { + const monitorSlug = "import" + localHub.WithScope(func(scope *sentry.Scope) { + scope.SetContext("monitor", sentry.Context{"slug": monitorSlug}) + monitorConfig := &sentry.MonitorConfig{ + Schedule: sentry.IntervalSchedule(1, sentry.MonitorScheduleUnitDay), + // minutes + MaxRuntime: 10, + CheckInMargin: 5, + Timezone: time.Local.String(), } - nextRun = nextRun.AddDate(0, 0, 1) - } - }() + + nextRun := nextOccurrenceOfLocalTime(cfg.Importer.UpdateAt) + for { + slog.Debug("scheduling next run", "next-run", nextRun) + <-time.After(time.Until(nextRun)) + wg.Add(1) + slog.Info("updating index") + + eventID := localHub.CaptureCheckIn(&sentry.CheckIn{ + MonitorSlug: monitorSlug, + Status: sentry.CheckInStatusInProgress, + }, monitorConfig) + + err = importer.Start(cfg, write, false) + wg.Done() + if err != nil { + slog.Warn("error updating index", "error", err) + + localHub.CaptureException(err) + localHub.CaptureCheckIn(&sentry.CheckIn{ + ID: *eventID, + MonitorSlug: monitorSlug, + Status: sentry.CheckInStatusError, + }, monitorConfig) + } else { + slog.Info("update complete") + + localHub.CaptureCheckIn(&sentry.CheckIn{ + ID: *eventID, + MonitorSlug: monitorSlug, + Status: sentry.CheckInStatusOK, + }, monitorConfig) + } + nextRun = nextRun.AddDate(0, 0, 1) + } + }) + }(sentry.CurrentHub().Clone()) sErr := make(chan error) wg.Add(1) @@ -128,5 +170,6 @@ func main() { // Error starting or closing listener: log.Fatalf("error: %v", err) } + sentry.Flush(2 * time.Second) wg.Wait() } |