timetable-extension #1
@ -51,15 +51,8 @@ func runCifFullDownload(cfg *helpers.Configuration) error {
 | 
			
		||||
	// Set parsed to nil to encourage garbage collection
 | 
			
		||||
	parsed = nil
 | 
			
		||||
 | 
			
		||||
	// 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))
 | 
			
		||||
	}
 | 
			
		||||
	// Create Indexes
 | 
			
		||||
	dbAccess.CreateTimetableIndexes()
 | 
			
		||||
 | 
			
		||||
	postTime := time.Now()
 | 
			
		||||
	updateDuration := postTime.Sub(preTime)
 | 
			
		||||
@ -111,11 +104,22 @@ func runCifUpdateDownload(cfg *helpers.Configuration, metadata *dbAccess.CifMeta
 | 
			
		||||
		parsed = nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Write metadata to database
 | 
			
		||||
	ok := dbAccess.PutCifMetadata(metadata, dailyUpdateType)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		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()
 | 
			
		||||
	duration := endTime.Sub(startTime)
 | 
			
		||||
	log.Info("CIF Update process ended", zap.Duration("duration", duration))
 | 
			
		||||
 | 
			
		||||
@ -47,5 +47,9 @@ func RunCorpusUpdate(cfg *helpers.Configuration) error {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := dbAccess.CreateCorpusIndexes(); err != nil {
 | 
			
		||||
		log.Error("Corpus Indexes creation failed, application speed will be reduced", zap.Error(err))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -151,3 +151,25 @@ func RemoveOutdatedServices(cutoff time.Time) (count int64, err error) {
 | 
			
		||||
	count = res.DeletedCount
 | 
			
		||||
	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"
 | 
			
		||||
 | 
			
		||||
	"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
 | 
			
		||||
@ -53,3 +56,27 @@ func convertStationsToInterfaceSlice(stationsData *[]database.StationEntry) *[]i
 | 
			
		||||
	}
 | 
			
		||||
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user