(now time.Time)
| 7 | ) |
| 8 | |
| 9 | func (api *API) Tick(now time.Time) error { |
| 10 | datasets, err := api.ReadDatasets() |
| 11 | if err != nil { |
| 12 | return err |
| 13 | } |
| 14 | |
| 15 | hash, err := api.LatestConfigHash() |
| 16 | if err != nil { |
| 17 | return fmt.Errorf("read latest config hash: %w", err) |
| 18 | } |
| 19 | |
| 20 | // refresh datasets |
| 21 | for _, dataset := range datasets { |
| 22 | if dataset.Refresh != nil { |
| 23 | dur, err := time.ParseDuration(dataset.Refresh.Interval) |
| 24 | if err != nil { |
| 25 | return fmt.Errorf("parse refresh interval: %w", err) |
| 26 | } |
| 27 | |
| 28 | if lastRefresh, ok := api.lastRefresh.Load(dataset.ID); !ok || lastRefresh.(time.Time).Before(now.Add(-dur)) { |
| 29 | log.Println("refreshing", dataset.ID) |
| 30 | err = api.refreshDataset(hash, dataset.ID) |
| 31 | if err != nil { |
| 32 | return fmt.Errorf("refreshing %s: %w", dataset.ID, err) |
| 33 | } |
| 34 | api.lastRefresh.Store(dataset.ID, now) |
| 35 | } |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | return nil |
| 40 | } |
no test coverage detected