timetable-extension #1

Open
fred.boniface wants to merge 160 commits from timetable-extension into main
4 changed files with 66 additions and 9 deletions
Showing only changes of commit 7bd9187e64 - Show all commits

View File

@ -51,15 +51,8 @@ func runCifFullDownload(cfg *helpers.Configuration) error {
// Set parsed to nil to encourage garbage collection // Set parsed to nil to encourage garbage collection
parsed = nil parsed = nil
// Clear out of date schedules // Create Indexes
cutoff := time.Now().Add(-time.Hour * 24 * 7) dbAccess.CreateTimetableIndexes()
log.Debug("Attempting to remove outdated services", zap.Time("scheduleEnd before", cutoff))
count, err := dbAccess.RemoveOutdatedServices(cutoff)
if err != nil {
log.Warn("Out of date services not removed", zap.Error(err))
} else {
log.Info("Out of date services removed", zap.Int64("removal count", count))
}
postTime := time.Now() postTime := time.Now()
updateDuration := postTime.Sub(preTime) updateDuration := postTime.Sub(preTime)
@ -111,11 +104,22 @@ func runCifUpdateDownload(cfg *helpers.Configuration, metadata *dbAccess.CifMeta
parsed = nil parsed = nil
} }
// Write metadata to database
ok := dbAccess.PutCifMetadata(metadata, dailyUpdateType) ok := dbAccess.PutCifMetadata(metadata, dailyUpdateType)
if !ok { if !ok {
log.Warn("CIF Data updated, but metadata write failed.") log.Warn("CIF Data updated, but metadata write failed.")
} }
// Clear out of date schedules
cutoff := time.Now().Add(-time.Hour * 24 * 7)
log.Debug("Attempting to remove outdated services", zap.Time("scheduleEnd before", cutoff))
count, err := dbAccess.RemoveOutdatedServices(cutoff)
if err != nil {
log.Warn("Out of date services not removed", zap.Error(err))
} else {
log.Info("Out of date services removed", zap.Int64("removal count", count))
}
endTime := time.Now() endTime := time.Now()
duration := endTime.Sub(startTime) duration := endTime.Sub(startTime)
log.Info("CIF Update process ended", zap.Duration("duration", duration)) log.Info("CIF Update process ended", zap.Duration("duration", duration))

View File

@ -47,5 +47,9 @@ func RunCorpusUpdate(cfg *helpers.Configuration) error {
return err return err
} }
if err := dbAccess.CreateCorpusIndexes(); err != nil {
log.Error("Corpus Indexes creation failed, application speed will be reduced", zap.Error(err))
}
return nil return nil
} }

View File

@ -151,3 +151,25 @@ func RemoveOutdatedServices(cutoff time.Time) (count int64, err error) {
count = res.DeletedCount count = res.DeletedCount
return // Automatically returns names values return // Automatically returns names values
} }
// Creates indexes on the Timetable collection
func CreateTimetableIndexes() error {
coll := MongoClient.Database(DatabaseName).Collection(TimetableCollection)
indexModels := []mongo.IndexModel{
{
Keys: bson.M{
"trainUid": 1,
"stpIndicator": 1,
"scheduleStartDate": 1,
},
Options: options.Index().SetName("delete_query"),
},
}
_, err := coll.Indexes().CreateMany(context.Background(), indexModels)
if err != nil {
return err
}
return nil
}

View File

@ -4,6 +4,9 @@ import (
"context" "context"
"git.fjla.uk/owlboard/go-types/pkg/database" "git.fjla.uk/owlboard/go-types/pkg/database"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
) )
// Puts an array of Corpus Documents into the database // Puts an array of Corpus Documents into the database
@ -53,3 +56,27 @@ func convertStationsToInterfaceSlice(stationsData *[]database.StationEntry) *[]i
} }
return &interfaceSlice return &interfaceSlice
} }
func CreateCorpusIndexes() error {
coll := MongoClient.Database(DatabaseName).Collection(CorpusCollection)
indexModels := []mongo.IndexModel{
{
Keys: bson.M{
"tiploc": 1,
},
Options: options.Index().SetName("tiploc"),
},
{
Keys: bson.M{
"3alpha": 1,
},
Options: options.Index().SetName("3alpha"),
},
}
_, err := coll.Indexes().CreateMany(context.Background(), indexModels)
if err != nil {
return err
}
return nil
}