Add logic to avoid timetable updates too early
This commit is contained in:
parent
848f4bf7bd
commit
46c82eefa6
@ -17,15 +17,28 @@ func CifCheck(cfg *helpers.Configuration) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lastUpdate := time.Unix(utime, 0)
|
lastUpdate := time.Unix(utime, 0)
|
||||||
currentTime := time.Now()
|
currentTime := time.Now().In(time.UTC)
|
||||||
|
london, _ := time.LoadLocation("Europe/London")
|
||||||
|
londonTime := currentTime.In(london)
|
||||||
dataAge := currentTime.Sub(lastUpdate)
|
dataAge := currentTime.Sub(lastUpdate)
|
||||||
day := 24 * time.Hour
|
maxAge := 22 * time.Hour
|
||||||
|
|
||||||
log.Msg.Debug("CIF Data", zap.Duration("Data Age", dataAge), zap.Duration("Max Age", day))
|
log.Msg.Debug("CIF Data", zap.Duration("Data Age", dataAge), zap.Duration("Max Age", maxAge))
|
||||||
|
|
||||||
if dataAge >= day {
|
if dataAge >= maxAge {
|
||||||
log.Msg.Warn("Timetable data is more than 24 hours old")
|
log.Msg.Warn("Timetable data is more than 24 hours old")
|
||||||
// Call Update Here
|
if londonTime.Hour() >= updateHour {
|
||||||
|
runUpdate("daily")
|
||||||
|
} else {
|
||||||
|
log.Msg.Debug("Timetable update is required but data is not yet available")
|
||||||
|
}
|
||||||
|
} else if dataAge > 48 {
|
||||||
|
log.Msg.Warn("Timetable data is more than 48 hours old")
|
||||||
|
if londonTime.Hour() >= updateHour {
|
||||||
|
runUpdate("full")
|
||||||
|
} else {
|
||||||
|
log.Msg.Debug("Waiting until todays data is available before updating")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.Msg.Info("Timetable data is less than 24 hours old")
|
log.Msg.Info("Timetable data is less than 24 hours old")
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
package cif
|
package cif
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.fjla.uk/owlboard/timetable-mgr/log"
|
"git.fjla.uk/owlboard/timetable-mgr/log"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const updateHour = 7
|
||||||
|
const dailyUpdateUrl = "https://publicdatafeeds.networkrail.co.uk/ntrod/CifFileAuthenticate?type=CIF_ALL_UPDATE_DAILY&day=toc-update-"
|
||||||
|
const fullUpdateUrl = "https://publicdatafeeds.networkrail.co.uk/ntrod/CifFileAuthenticate?type=CIF_ALL_FULL_DAILY&day=toc-full"
|
||||||
|
|
||||||
func getDayString() string {
|
func getDayString() string {
|
||||||
london, err := time.LoadLocation("Europe/London")
|
london, err := time.LoadLocation("Europe/London")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -20,3 +25,13 @@ func getDayString() string {
|
|||||||
|
|
||||||
return dayStrings[day]
|
return dayStrings[day]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getUpdateUrl(updateType string) (string, error) {
|
||||||
|
if updateType == "daily" {
|
||||||
|
return dailyUpdateUrl + getDayString(), nil
|
||||||
|
} else if updateType == "full" {
|
||||||
|
return fullUpdateUrl, nil
|
||||||
|
}
|
||||||
|
err := errors.New("Invalid update type provided, must be one of 'daily' or 'full'")
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
17
src/cif/update.go
Normal file
17
src/cif/update.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package cif
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"git.fjla.uk/owlboard/timetable-mgr/log"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
func runUpdate(updateType string) error {
|
||||||
|
url, err := getUpdateUrl(updateType)
|
||||||
|
if err != nil {
|
||||||
|
log.Msg.Error("Unable to get the update URL", zap.Error(err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return errors.New("This function is not yet defined")
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user