示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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));
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);
                }
            }
        }
示例#6
0
 protected bool RemoteLogsetHasData(string mongoDatabaseName)
 {
     return(MongoAdminHelper.DatabaseExists(mongoConnectionInfo.GetClient(), mongoDatabaseName));
 }