public BackupScheduler( ILogger logger, ICosmosAccountFacade cosmosFacade, IStorageFacade storageFacade, IImmutableList <CollectionBackupPlan> collectionPlans, TechnicalConstants technicalConstants) { _logger = logger; _cosmosFacade = cosmosFacade; _storageFacade = storageFacade; _collectionBackupPlans = collectionPlans; _technicalConstants = technicalConstants; }
private async static IAsyncEnumerable <CollectionPlan> GetCollectionPlansAsync( IImmutableList <CollectionBackupPlan> collectionBackupPlans, TechnicalConstants technicalConstants, ICosmosAccountFacade cosmosFacade, IStorageFacade storageFacade, ILogger logger) { var byDbs = collectionBackupPlans.GroupBy(p => p.Db).ToDictionary(g => g.Key); var dbs = await cosmosFacade.GetDatabasesAsync(); logger = logger.AddContext("Account", cosmosFacade.AccountName); foreach (var db in dbs) { if (byDbs.ContainsKey(db.DatabaseName)) { var byCollections = byDbs[db.DatabaseName].ToDictionary(c => c.Collection); var collections = await db.GetCollectionsAsync(); foreach (var coll in collections) { if (byCollections.ContainsKey(coll.CollectionName)) { var plan = byCollections[coll.CollectionName].SpecificPlan; var collectionLogger = logger .AddContext("Db", db.DatabaseName) .AddContext("Collection", coll.CollectionName); var logController = new LogCollectionBackupController( coll, storageFacade, plan.Rpo, plan.Included, technicalConstants.LogConstants, collectionLogger); yield return(new CollectionPlan( logController, coll, () => new IndexCollectionController( coll.Parent.Parent.AccountName, coll.Parent.DatabaseName, coll.CollectionName, storageFacade, plan.RetentionInDays, technicalConstants.IndexConstants, collectionLogger), plan)); } } } } }