public static DataAccessResponseType PurgePlatform() { DataAccessResponseType response = new DataAccessResponseType(); //We only allow purging on local, debug & stage if (Sahara.Core.Settings.Environment.Current.ToLower() == "production") { response.isSuccess = false; response.ErrorMessage = "Cannot purge a production version of the platform"; return(response); } else if (Sahara.Core.Settings.Environment.Current.ToLower() != "staging" && Sahara.Core.Settings.Environment.Current.ToLower() != "stage" && Sahara.Core.Settings.Environment.Current.ToLower() != "debug" && Sahara.Core.Settings.Environment.Current.ToLower() != "test" && Sahara.Core.Settings.Environment.Current.ToLower() != "testing" && Sahara.Core.Settings.Environment.Current.ToLower() != "local") { response.isSuccess = false; response.ErrorMessage = "Can only purge a stage, test, debug or local version of the platform"; return(response); } else { //Deprovision All Accounts: DeprovisionAllAccounts(); //Clear Stripe Plans: var stripeManager = new StripeManager(); var planIDs = stripeManager.GetPlanIDs(); foreach (string planID in planIDs) { stripeManager.DeletePlan(planID); } //Delete All SQL Databases: DeleteAllSQLDatabases(); //Clear Platform Storage Accounts: ClearPlatformStorageAccounts(); /*====================================== * Delete AccountPartition Document Database * ========================================*/ /* RETIRED ---*/ //var client = Sahara.Core.Settings.Azure.DocumentDB.DocumentClients.AccountDocumentClient; var databasename = Sahara.Core.Settings.Azure.DocumentDB.AccountPartitionDatabaseId; Database accountDatabase = Sahara.Core.Settings.Azure.DocumentDbClients.AccountDocumentClient.CreateDatabaseQuery().Where(db => db.Id == databasename).ToArray().FirstOrDefault(); if (accountDatabase != null) { //Create if not exists accountDatabase = Sahara.Core.Settings.Azure.DocumentDbClients.AccountDocumentClient.DeleteDatabaseAsync(accountDatabase.SelfLink).Result; } /*====================================== * FLUSH ALL REDIS CACHES * ========================================*/ var redisEndpoints = Sahara.Core.Settings.Azure.Redis.RedisMultiplexers.RedisMultiplexer.GetEndPoints(true); var redisServer = Sahara.Core.Settings.Azure.Redis.RedisMultiplexers.RedisMultiplexer.GetServer(redisEndpoints[0]); redisServer.FlushAllDatabases(); /* * var platformEndpoints = Sahara.Core.Settings.Azure.Redis.RedisMultiplexers.PlatformManager_Multiplexer.GetEndPoints(true); * var platformServer = Sahara.Core.Settings.Azure.Redis.RedisMultiplexers.PlatformManager_Multiplexer.GetServer(platformEndpoints[0]); * * var accountEndpoints = Sahara.Core.Settings.Azure.Redis.RedisMultiplexers.AccountManager_Multiplexer.GetEndPoints(true); * var accountServer = Sahara.Core.Settings.Azure.Redis.RedisMultiplexers.AccountManager_Multiplexer.GetServer(accountEndpoints[0]); * * platformServer.FlushAllDatabases(); * accountServer.FlushAllDatabases(); */ /*================================================================ * DELETE ALL AZURE SEARCH DATASOURCES, INDEXES & INDEXERS (LEGACY USING SINGLE PLAN) * ================================================================== * * SearchServiceClient searchServiceClient = Settings.Azure.Search.AccountsSearchServiceClient; * * //Delete all search indexes * var indexList = searchServiceClient.Indexes.List(); * foreach (Microsoft.Azure.Search.Models.Index index in indexList.Indexes) * { * searchServiceClient.Indexes.Delete(index.Name); * } * * //Delete all search indexers * var indexerList = searchServiceClient.Indexers.List(); * foreach (Microsoft.Azure.Search.Models.Indexer indexer in indexerList.Indexers) * { * searchServiceClient.Indexers.Delete(indexer.Name); * } * * //Delete all search datasources * var dataSourcesList = searchServiceClient.DataSources.List(); * foreach (Microsoft.Azure.Search.Models.DataSource datasource in dataSourcesList.DataSources) * { * searchServiceClient.DataSources.Delete(datasource.Name); * }*/ /*============================================================================== * DELETE ALL AZURE SEARCH DATASOURCES, INDEXES & INDEXERS (LOOP THROUGH ALL) * =============================================================================*/ //Refresh and get list: var searchPartitions = Settings.Azure.Search.RefreshSearchPartitions(); foreach (var searchPartition in searchPartitions) { SearchServiceClient searchServiceClient = Settings.Azure.Search.GetSearchPartitionClient(searchPartition.Name); //Delete all search indexes var indexList = searchServiceClient.Indexes.List(); foreach (Microsoft.Azure.Search.Models.Index index in indexList.Indexes) { searchServiceClient.Indexes.Delete(index.Name); } //Delete all search indexers var indexerList = searchServiceClient.Indexers.List(); foreach (Microsoft.Azure.Search.Models.Indexer indexer in indexerList.Indexers) { searchServiceClient.Indexers.Delete(indexer.Name); } //Delete all search datasources var dataSourcesList = searchServiceClient.DataSources.List(); foreach (Microsoft.Azure.Search.Models.DataSource datasource in dataSourcesList.DataSources) { searchServiceClient.DataSources.Delete(datasource.Name); } } /*====================================== * SEND BACK RESULTS * ========================================*/ response.isSuccess = true; response.SuccessMessage = "Platform has been purged."; return(response); } }