Reorganise logging
This commit is contained in:
22
cif/check.go
22
cif/check.go
@@ -14,43 +14,43 @@ import (
|
||||
func CheckCif(cfg *helpers.Configuration) {
|
||||
// Check that it is after 0600, if not then skip update
|
||||
if time.Now().In(londonTimezone).Hour() <= dataAvailable {
|
||||
log.Msg.Info("Too early to update CIF data, not published until 0600")
|
||||
log.Info("Too early to update CIF data, not published until 0600")
|
||||
return
|
||||
}
|
||||
|
||||
log.Msg.Info("Checking age of CIF Data")
|
||||
log.Info("Checking age of CIF Data")
|
||||
|
||||
// Load and read metadata from database
|
||||
metadata, err := dbAccess.GetCifMetadata()
|
||||
if err != nil {
|
||||
log.Msg.Error("Unable to read last update time", zap.Error(err))
|
||||
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.Msg.Info("Full CIF download required")
|
||||
log.Info("Full CIF download required")
|
||||
err := runCifFullDownload(cfg)
|
||||
if err != nil {
|
||||
log.Msg.Error("Unable to run full CIF Update", zap.Error(err))
|
||||
log.Error("Unable to run full CIF Update", zap.Error(err))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Check if last update was today
|
||||
if isSameToday(metadata.LastUpdate) {
|
||||
log.Msg.Info("CIF Data has already been updated today, skipping")
|
||||
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.Msg.Debug("Full Update Requested due to time since last update", zap.Int("daysSinceLastUpdate", daysSinceLastUpdate))
|
||||
log.Msg.Info("Full CIF download required")
|
||||
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.Msg.Error("Unable to run full CIF Update", zap.Error(err))
|
||||
log.Error("Unable to run full CIF Update", zap.Error(err))
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -58,9 +58,9 @@ func CheckCif(cfg *helpers.Configuration) {
|
||||
daysToUpdate := generateUpdateDays(daysSinceLastUpdate)
|
||||
|
||||
// Run the update
|
||||
log.Msg.Info("CIF Update required", zap.Any("days to update", daysToUpdate))
|
||||
log.Info("CIF Update required", zap.Any("days to update", daysToUpdate))
|
||||
err = runCifUpdateDownload(cfg, metadata, daysToUpdate)
|
||||
if err != nil {
|
||||
log.Msg.Error("Unable to run CIF update", zap.Error(err))
|
||||
log.Error("Unable to run CIF update", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"git.fjla.uk/owlboard/go-types/pkg/upstreamApi"
|
||||
"git.fjla.uk/owlboard/timetable-mgr/helpers"
|
||||
"git.fjla.uk/owlboard/timetable-mgr/log"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func ConvertServiceType(input *upstreamApi.JsonScheduleV1, vstp bool) (*database.Service, error) {
|
||||
@@ -46,7 +47,7 @@ func parseSpeed(CIFSpeed *string) int32 {
|
||||
|
||||
speed, err := strconv.ParseInt(actualSpeed, 10, 32)
|
||||
if err != nil {
|
||||
log.Msg.Warn("Unable to parse speed: " + *CIFSpeed + ", returning 0")
|
||||
log.Warn("Unable to parse speed", zap.String("input-value", *CIFSpeed))
|
||||
return int32(0)
|
||||
}
|
||||
return int32(speed)
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
func getDayString(t time.Time) string {
|
||||
london, err := time.LoadLocation("Europe/London")
|
||||
if err != nil {
|
||||
log.Msg.Error("Unable to load time zone info", zap.Error(err))
|
||||
log.Error("Unable to load time zone info", zap.Error(err))
|
||||
}
|
||||
|
||||
timeNow := t.In(london)
|
||||
@@ -44,7 +44,7 @@ func isSameToday(t time.Time) bool {
|
||||
|
||||
// Returns how many days ago `t` was compared to today
|
||||
func howManyDaysAgo(t time.Time) int {
|
||||
log.Msg.Debug("Calculating how many days ago", zap.Time("Input time", t))
|
||||
log.Debug("Calculating how many days ago", zap.Time("Input time", t))
|
||||
// Truncate both times to midnight in UTC timezone
|
||||
today := time.Now().UTC().Truncate(24 * time.Hour)
|
||||
input := t.UTC().Truncate(24 * time.Hour)
|
||||
@@ -76,7 +76,7 @@ func ParseCifDate(input *string, startOrEnd string) time.Time {
|
||||
layout := "2006-01-02" // Layout of input
|
||||
t, err := time.ParseInLocation(layout, *input, londonTimezone)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error parsing date string", zap.String("date string", *input), zap.Error(err))
|
||||
log.Error("Error parsing date string", zap.String("date string", *input), zap.Error(err))
|
||||
return time.Time{}
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ func ParseCifDate(input *string, startOrEnd string) time.Time {
|
||||
} else if startOrEnd == "end" {
|
||||
t = time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, 0, londonTimezone)
|
||||
} else {
|
||||
log.Msg.Error("Error parsing date string", zap.String("date string", *input), zap.Error(err))
|
||||
log.Error("Error parsing date string", zap.String("date string", *input), zap.Error(err))
|
||||
return time.Time{}
|
||||
}
|
||||
|
||||
|
||||
14
cif/parse.go
14
cif/parse.go
@@ -13,7 +13,7 @@ import (
|
||||
// Accepts the CIF data as a stream and outputs parsed data
|
||||
func parseCifDataStream(dataStream io.ReadCloser) (*parsedData, error) {
|
||||
defer dataStream.Close()
|
||||
log.Msg.Debug("Starting CIF Datastream parsing")
|
||||
log.Debug("Starting CIF Datastream parsing")
|
||||
if dataStream == nil {
|
||||
return nil, errors.New("unable to parse nil pointer")
|
||||
}
|
||||
@@ -29,7 +29,7 @@ func parseCifDataStream(dataStream io.ReadCloser) (*parsedData, error) {
|
||||
for decoder.More() {
|
||||
var obj map[string]json.RawMessage
|
||||
if err := decoder.Decode(&obj); err != nil {
|
||||
log.Msg.Error("Error decoding JSON String")
|
||||
log.Error("Error decoding JSON String")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ func parseCifDataStream(dataStream io.ReadCloser) (*parsedData, error) {
|
||||
case "JsonTimetableV1":
|
||||
var timetable upstreamApi.JsonTimetableV1
|
||||
if err := json.Unmarshal(value, &timetable); err != nil {
|
||||
log.Msg.Error("Error decoding JSONTimetableV1 object", zap.Error(err))
|
||||
log.Error("Error decoding JSONTimetableV1 object", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
parsed.header = timetable
|
||||
@@ -53,17 +53,17 @@ func parseCifDataStream(dataStream io.ReadCloser) (*parsedData, error) {
|
||||
case "JsonScheduleV1":
|
||||
var schedule upstreamApi.JsonScheduleV1
|
||||
if err := json.Unmarshal(value, &schedule); err != nil {
|
||||
log.Msg.Error("Error decoding JSONScheduleV1 object", zap.Error(err))
|
||||
log.Error("Error decoding JSONScheduleV1 object", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
parsed.sched = append(parsed.sched, schedule)
|
||||
case "EOF":
|
||||
log.Msg.Info("Reached EOF")
|
||||
log.Info("Reached EOF")
|
||||
default:
|
||||
log.Msg.Warn("Unknown CIF Data type", zap.String("key", key))
|
||||
log.Warn("Unknown CIF Data type", zap.String("key", key))
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Msg.Debug("CIF Parsing completed")
|
||||
log.Debug("CIF Parsing completed")
|
||||
return &parsed, nil
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ import (
|
||||
|
||||
// Processes parsed CIF data and applies the data to the database
|
||||
func processParsedCif(data *parsedData) error {
|
||||
log.Msg.Debug("Starting CIF Processing")
|
||||
log.Msg.Info("Processing CIF Data", zap.Int("schedule-count", len(data.sched)))
|
||||
log.Debug("Starting CIF Processing")
|
||||
log.Info("Processing CIF Data", zap.Int("schedule-count", len(data.sched)))
|
||||
|
||||
// Batch size for processing
|
||||
batchSize := 250 // Needs optimising for better RAM use. 1000 ~ 5.7GB, 500 ~ 5.5GB, 750 ~ 5.2GB
|
||||
@@ -34,7 +34,7 @@ func processParsedCif(data *parsedData) error {
|
||||
if len(deleteBatch) > 0 {
|
||||
err := doDeletions(deleteBatch)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error deleting CIF Entries", zap.Error(err))
|
||||
log.Error("Error deleting CIF Entries", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -56,13 +56,13 @@ func processParsedCif(data *parsedData) error {
|
||||
if len(createBatch) > 0 {
|
||||
err := doCreations(createBatch)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error creating CIF Entries", zap.Error(err))
|
||||
log.Error("Error creating CIF Entries", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.Msg.Debug("CIF Processing complete")
|
||||
log.Debug("CIF Processing complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ func processParsedCif(data *parsedData) error {
|
||||
func doDeletions(deletions []*upstreamApi.JsonScheduleV1) error {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
log.Msg.Panic("Panic:", zap.Any("panic", r))
|
||||
log.Panic("Panic:", zap.Any("panic", r))
|
||||
}
|
||||
}()
|
||||
deleteQueries := make([]database.DeleteQuery, 0)
|
||||
@@ -86,7 +86,7 @@ func doDeletions(deletions []*upstreamApi.JsonScheduleV1) error {
|
||||
|
||||
err := dbAccess.DeleteCifEntries(deleteQueries)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error deleting documents", zap.Error(err))
|
||||
log.Error("Error deleting documents", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ func doCreations(creations []*upstreamApi.JsonScheduleV1) error {
|
||||
for _, item := range creations {
|
||||
document, err := ConvertServiceType(item, false)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error converting JsonSchedule to Service type", zap.Error(err))
|
||||
log.Error("Error converting JsonSchedule to Service type", zap.Error(err))
|
||||
}
|
||||
|
||||
createDocuments = append(createDocuments, *document)
|
||||
@@ -107,7 +107,7 @@ func doCreations(creations []*upstreamApi.JsonScheduleV1) error {
|
||||
|
||||
err := dbAccess.CreateCifEntries(createDocuments)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error creating documents", zap.Error(err))
|
||||
log.Error("Error creating documents", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -13,22 +13,22 @@ import (
|
||||
|
||||
// Replaces all existing CIF Data with a new download
|
||||
func runCifFullDownload(cfg *helpers.Configuration) error {
|
||||
log.Msg.Info("Downloading all CIF Data")
|
||||
log.Info("Downloading all CIF Data")
|
||||
|
||||
// Download CIF Data file
|
||||
url, err := getUpdateUrl("full")
|
||||
if err != nil {
|
||||
log.Msg.Error("Error getting download URL", zap.Error(err))
|
||||
log.Error("Error getting download URL", zap.Error(err))
|
||||
}
|
||||
dataStream, err := nrod.NrodStream(url, cfg)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error downloading CIF data", zap.Error(err))
|
||||
log.Error("Error downloading CIF data", zap.Error(err))
|
||||
}
|
||||
|
||||
// Parse CIF file
|
||||
parsed, err := parseCifDataStream(dataStream)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error parsing CIF data", zap.Error(err))
|
||||
log.Error("Error parsing CIF data", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -38,13 +38,13 @@ func runCifFullDownload(cfg *helpers.Configuration) error {
|
||||
// Process CIF file
|
||||
err = processParsedCif(parsed)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error processing CIF data", zap.Error(err))
|
||||
log.Error("Error processing CIF data", zap.Error(err))
|
||||
}
|
||||
|
||||
newMeta := generateMetadata(&parsed.header)
|
||||
ok := dbAccess.PutCifMetadata(newMeta, fullUpdateType)
|
||||
if !ok {
|
||||
log.Msg.Warn("CIF Data updated, but metadata write failed")
|
||||
log.Warn("CIF Data updated, but metadata write failed")
|
||||
}
|
||||
|
||||
parsed = nil
|
||||
@@ -53,41 +53,41 @@ func runCifFullDownload(cfg *helpers.Configuration) error {
|
||||
|
||||
// Runs a CIF Update for up to five days
|
||||
func runCifUpdateDownload(cfg *helpers.Configuration, metadata *dbAccess.CifMetadata, days []time.Time) error {
|
||||
log.Msg.Info("Downloading CIF Updates")
|
||||
log.Info("Downloading CIF Updates")
|
||||
|
||||
// Loop over dates
|
||||
for _, time := range days {
|
||||
log.Msg.Info("Downloading CIF File", zap.Time("CIF Data from", time))
|
||||
log.Info("Downloading CIF File", zap.Time("CIF Data from", time))
|
||||
|
||||
// Download CIF data file
|
||||
data, err := fetchUpdate(time, cfg)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error fetching CIF update", zap.Error(err))
|
||||
log.Error("Error fetching CIF update", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
// Parse CIF file
|
||||
parsed, err := parseCifDataStream(data)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error parsing CIF data", zap.Error(err))
|
||||
log.Error("Error parsing CIF data", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
// Check CIF Metadata
|
||||
log.Msg.Debug("Starting metadata checks")
|
||||
log.Debug("Starting metadata checks")
|
||||
|
||||
reason, update := checkMetadata(metadata, &parsed.header)
|
||||
if !update {
|
||||
log.Msg.Warn("Update file not processed", zap.String("reason", reason))
|
||||
log.Warn("Update file not processed", zap.String("reason", reason))
|
||||
continue
|
||||
}
|
||||
|
||||
log.Msg.Info("CIF Data is suitable for processing", zap.String("reason", reason))
|
||||
log.Info("CIF Data is suitable for processing", zap.String("reason", reason))
|
||||
|
||||
// Process CIF file
|
||||
err = processParsedCif(parsed)
|
||||
if err != nil {
|
||||
log.Msg.Error("Error processing CIF data", zap.Error(err))
|
||||
log.Error("Error processing CIF data", zap.Error(err))
|
||||
}
|
||||
|
||||
metadata = generateMetadata(&parsed.header)
|
||||
@@ -96,7 +96,7 @@ func runCifUpdateDownload(cfg *helpers.Configuration, metadata *dbAccess.CifMeta
|
||||
|
||||
ok := dbAccess.PutCifMetadata(metadata, dailyUpdateType)
|
||||
if !ok {
|
||||
log.Msg.Warn("CIF Data updated, but metadata write failed.")
|
||||
log.Warn("CIF Data updated, but metadata write failed.")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user