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" ) // Checks if the CIF Data needs updating, and what type of update is needed (Full/Partial) and if partial // what days data needs updating, then calls an update function to handle the update. func CheckCif(cfg *helpers.Configuration) { // Check that it is after 0600, if not then skip update if time.Now().In(londonTimezone).Hour() <= dataAvailable { log.Info("Too early to update CIF data, not published until 0600") return } log.Debug("Checking age of CIF Data") // Load and read metadata from database metadata, err := dbAccess.GetCifMetadata() if err != nil { log.Error("Unable to read last update time", zap.Error(err)) return } // If no metadata is found in DB, presume no CIF data exists if metadata == nil { log.Info("Full CIF download required") err := runCifFullDownload(cfg) if err != nil { log.Warn("Unable to run full CIF Update", zap.Error(err)) } return } // Check if last update was today if isSameToday(metadata.LastUpdate) { log.Info("CIF Data has already been updated today, skipping") return } // Check how many days since last update, if more than 5, run full update, else run update daysSinceLastUpdate := howManyDaysAgo(metadata.LastUpdate) if daysSinceLastUpdate > 5 { log.Debug("Full Update Requested due to time since last update", zap.Int("daysSinceLastUpdate", daysSinceLastUpdate)) log.Info("Full CIF download required") err := runCifFullDownload(cfg) if err != nil { log.Error("Full CIF update failed", zap.Error(err)) } return } daysToUpdate := generateUpdateDays(daysSinceLastUpdate) // Run the update log.Info("CIF Update required", zap.Any("days to update", daysToUpdate)) err = runCifUpdateDownload(cfg, metadata, daysToUpdate) if err != nil { log.Warn("Daily CIF update failed", zap.Error(err)) } }