timetable-extension #1
@ -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))
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user