package cif import ( "time" "git.fjla.uk/owlboard/timetable-mgr/dbAccess" "git.fjla.uk/owlboard/timetable-mgr/helpers" "git.fjla.uk/owlboard/timetable-mgr/log" "go.uber.org/zap" ) // Break this down in to smaller, simpler functions func CifCheck(cfg *helpers.Configuration) error { log.Msg.Debug("Checking age of CIF Data") metadata, err := dbAccess.GetCifMetadata() if err != nil { log.Msg.Error("Unable to fetch CifMetadata", zap.Error(err)) return err } if metadata == nil { log.Msg.Info("No metadata found for last CIF Update, recreating timetable") newMeta, err := runUpdate("full", nil) if err != nil { log.Msg.Error("CIF Update failed", zap.Error(err)) return err } ok := dbAccess.PutCifMetadata(*newMeta) if !ok { log.Msg.Warn("CIF Update Successful but metadata update failed") return nil } } london, _ := time.LoadLocation("Europe/London") londonTimeNow := time.Now().In(london) day := 12 * time.Hour updateThreshold := londonTimeNow.Add(-day) availableHour := 6 if londonTimeNow.Hour() >= availableHour { if metadata.LastUpdate.Before(updateThreshold) || metadata.LastUpdate.Equal(updateThreshold) { newMeta, err := runUpdate("full", metadata) if err != nil { log.Msg.Error("CIF Update failed", zap.Error(err)) return err } if newMeta == nil { log.Msg.Info("CIF Update requirements not met, will retry") return nil } ok := dbAccess.PutCifMetadata(*newMeta) if !ok { log.Msg.Warn("CIF Update Successful but metadata update failed") return nil } return nil } } log.Msg.Info("CIF Data does not require updating at this time", zap.Time("Last Update", metadata.LastUpdate)) return nil }