background_tasks.go 844 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //"I want to be a cleaner, just like you," said Mathilda
  2. //"Okay," replied Leon
  3. package backgroundtasks
  4. import (
  5. "context"
  6. "time"
  7. "golang.org/x/sync/errgroup"
  8. "github.com/grafana/grafana/pkg/bus"
  9. "github.com/grafana/grafana/pkg/log"
  10. "github.com/grafana/grafana/pkg/models"
  11. )
  12. var (
  13. tlog log.Logger = log.New("ticker")
  14. )
  15. func Init(ctx context.Context) error {
  16. g, _ := errgroup.WithContext(ctx)
  17. g.Go(func() error { return start(ctx) })
  18. return g.Wait()
  19. }
  20. func start(ctx context.Context) error {
  21. go cleanup(time.Now())
  22. ticker := time.NewTicker(time.Hour * 1)
  23. for {
  24. select {
  25. case tick := <-ticker.C:
  26. go cleanup(tick)
  27. case <-ctx.Done():
  28. return ctx.Err()
  29. }
  30. }
  31. }
  32. func cleanup(now time.Time) {
  33. err := bus.Publish(&models.HourCommand{Time: now})
  34. if err != nil {
  35. tlog.Error("Cleanup job failed", "error", err)
  36. }
  37. }