/// <summary> /// Creates all of the required MongoDB collections that this logset requires. /// </summary> protected ISet <string> CreateMongoDbCollections(ISet <string> requestedCollections, IMongoDatabase database, IParserFactory parserFactory) { IDictionary <string, ISet <string> > collectionIndexMap = BuildCollectionIndexMap(requestedCollections, parserFactory); // Create collections & indexes using the dictionary. ISet <string> collectionsCreated = new SortedSet <string>(); foreach (var collection in collectionIndexMap) { var collectionName = collection.Key; ISet <string> indexes = collection.Value; IMongoCollection <BsonDocument> dbCollection = database.GetCollection <BsonDocument>(collectionName); collectionsCreated.Add(collectionName); foreach (var index in indexes) { var indexKeysBuilder = new IndexKeysDefinitionBuilder <BsonDocument>(); CreateIndexOptions indexOptions = new CreateIndexOptions { Sparse = false }; dbCollection.Indexes.CreateOne(indexKeysBuilder.Ascending(index), indexOptions); } // If we are working against a sharded Mongo cluster, we need to explicitly shard each collection. if (mongoConnectionInfo.ConnectionType == MongoConnectionType.ShardedCluster) { MongoAdminHelper.EnableShardingOnCollectionIfNotEnabled(mongoConnectionInfo.GetClient(), database.DatabaseNamespace.DatabaseName, collectionName); } } return(collectionsCreated); }
public IMongoDatabase GetDatabase(string name) { var mongoClient = GetClient(); IMongoDatabase database = mongoClient.GetDatabase(name); // If we are using a connection to a sharded database, we need to explicitly enable sharding on the db. if (ConnectionType == MongoConnectionType.ShardedCluster) { MongoAdminHelper.EnableShardingOnDatabaseIfNotEnabled(mongoClient, name); } return(database); }
/// <summary> /// Takes action to process a logset based on the current status of the Logset. /// </summary> private LogsetParsingResult ProcessLogset(LogsharkRequest request, RunInitializationResult runInitializationResult) { var statusChecker = new LogsetProcessingStatusChecker(request.Configuration.MongoConnectionInfo); LogsetProcessingStatus existingProcessedLogsetStatus = statusChecker.GetStatus(runInitializationResult.LogsetHash, runInitializationResult.CollectionsRequested); Func <LogsetParsingRequest, LogsetParsingResult> parseLogset = logsetParsingRequest => ParseLogset(logsetParsingRequest, request.Configuration); Action <string> dropLogset = logsetHash => MongoAdminHelper.DropDatabase(request.Configuration.MongoConnectionInfo.GetClient(), logsetHash); var parsingRequest = new LogsetParsingRequest(runInitializationResult, request.ForceParse); ILogsetProcessingStrategy processingStrategy = LogsetProcessingStrategyFactory.GetLogsetProcessingStrategy(request.Target, parseLogset, dropLogset, request.Configuration); return(processingStrategy.ProcessLogset(parsingRequest, existingProcessedLogsetStatus)); }
protected MongoConnectionType GetConnectionType() { bool isCluster; try { isCluster = MongoAdminHelper.IsMongoCluster(client); } catch (MongoException ex) { Log.DebugFormat("Unable to determine if current MongoDB connection is a sharded cluster: {0}", ex.Message); return(MongoConnectionType.Undetermined); } if (isCluster) { return(MongoConnectionType.ShardedCluster); } return(MongoConnectionType.SingleNode); }
/// <summary> /// Performs any teardown tasks. /// </summary> private void TearDown(LogsharkRunContext context) { // Purge application temp directory to free up disk space for the user. PurgeTempDirectory(context.Request.Configuration); // Drop logset if user didn't want to retain it, assuming they didn't piggyback on an existing processed logset. bool utilizedExistingLogset = context.ParsingResult != null && context.ParsingResult.UtilizedExistingProcessedLogset; if (context.Request.DropMongoDBPostRun && utilizedExistingLogset) { Log.InfoFormat("Dropping Mongo database {0}..", context.InitializationResult); try { MongoAdminHelper.DropDatabase(context.Request.Configuration.MongoConnectionInfo.GetClient(), context.InitializationResult.LogsetHash); } catch (Exception ex) { Log.ErrorFormat("Failed to clean up Mongo database '{0}': {1}", context.InitializationResult.LogsetHash, ex.Message); } } }
protected bool RemoteLogsetHasData(string mongoDatabaseName) { return(MongoAdminHelper.DatabaseExists(mongoConnectionInfo.GetClient(), mongoDatabaseName)); }