protected override async Task <JobResult> RunInternalAsync(CancellationToken token)
        {
            if (!ConfigurationManager.AppSettings.GetBool("Migration:CanResetData").GetValueOrDefault())
            {
                return(JobResult.FailedWithMessage("Migration:CanResetData was not set in the app.config."));
            }

            Log.Info().Message("Flushing redis cache").Write();
            _cacheClient.FlushAll();

            Log.Info().Message("Resetting elastic search").Write();
            ElasticSearchConfiguration.ConfigureMapping(_elasticClient, true);

            foreach (var collectionName in _mongoDatabase.GetCollectionNames().Where(name => !name.StartsWith("system")))
            {
                Log.Info().Message("Dropping collection: {0}", collectionName).Write();
                _mongoDatabase.DropCollection(collectionName);
            }

            Log.Info().Message("Creating indexes...").Write();
            new ApplicationRepository(_mongoDatabase);
            new OrganizationRepository(_mongoDatabase);
            new ProjectRepository(_mongoDatabase);
            new TokenRepository(_mongoDatabase);
            new WebHookRepository(_mongoDatabase);
            new UserRepository(_mongoDatabase);
            Log.Info().Message("Finished creating indexes...").Write();

            return(JobResult.Success);
        }
Exemple #2
0
        public static void AddElasticSearch(this IServiceCollection services, ElasticSearchConfiguration configuration)
        {
            var settings = new ConnectionSettings(new Uri(configuration.ConnectionString));

            services.AddSingleton(settings);
            services.AddTransient <IElasticClient, ElasticClient>(e => new ElasticClient(settings));
        }
Exemple #3
0
 public ElasticSearchRepository(
     ElasticSearchConfiguration configuration,
     ILogger <ElasticSearchRepository <T> > logger = null)
 {
     _configuration = configuration;
     _logger        = (ILogger)logger ?? NullLogger.Instance;
 }
Exemple #4
0
        public static IServiceCollection AddElasticSearch(this IServiceCollection services, Action <ElasticSearchConfiguration> configureOptions)
        {
            var options = new ElasticSearchConfiguration();

            configureOptions?.Invoke(options);
            services.TryAddSingleton(options);
            return(services);
        }
        public IisFlow()
        {
            var elasticConfiguration = new ElasticSearchConfiguration();

            elasticConfiguration.IndexNameFormat = @"\i\i\s\l\o\g\s\-yyyyMM";

            CreateProcess()
            .FromInput(new FileInput(@"C:\inetpub\logs\LogFiles\W3SVC1\*.log", System.Text.Encoding.UTF8, true))
            .Then(new IISLogProcessor())
            .Then(new InfluxDbOutput())
            .Then(new ElasticSearchOutput(elasticConfiguration));
        }
		public FruitSearcherFlow ()
		{
			
			var elasticConfiguration = new ElasticSearchConfiguration();
			elasticConfiguration.IndexNameFormat = @"\a\p\p\l\o\g\s\-yyyyMM";

			CreateProcess()
				.FromInput(new FileInput(@"C:\Repo\deliberate-logging\code\FruitSearcher\logs\*.log", System.Text.Encoding.UTF8, true))
				.Then(new LogJsonParser())
				.Then(new InfluxDbOutputForFruitSearcher())
				.Then(new ElasticSearchOutput(elasticConfiguration));
			 
			
		}
Exemple #7
0
        public static void AddElasticsearch(
            this IServiceCollection services, IConfiguration configuration)
        {
            var elasticSearchConfiguration = new ElasticSearchConfiguration();

            configuration.GetSection(nameof(ElasticSearchConfiguration)).Bind(elasticSearchConfiguration);

            var settings = new ConnectionSettings(new Uri(elasticSearchConfiguration.Uri))
                           .DefaultIndex(elasticSearchConfiguration.DefaultIndex);

            var client = new ElasticClient(settings);

            services.AddSingleton <IElasticClient>(client);
        }
Exemple #8
0
        public RandomDataFlow()
        {
            var elasticConfiguration = new ElasticSearchConfiguration();

            elasticConfiguration.Host            = "localhost";
            elasticConfiguration.Port            = 9200;
            elasticConfiguration.IndexNameFormat = @"\b\a\c\o\n\l\o\g\-yyyyMMdd";
            elasticConfiguration.Mappings        = mappings =>
            {
                mappings.String(m => m.Name("Message").Index(FieldIndexOption.not_analyzed));
            };

            CreateProcess().FromInput(new RandomBaconInput())
            .ToOutput(new ElasticSearchOutput(elasticConfiguration));
        }
Exemple #9
0
        //[Theory]
        //[InlineData("\"data.load time-s\":\"262", 1)]
        //public void GetByCustomData(string filter, int count) {
        //    var result = GetByFilter(filter);
        //    Assert.NotNull(result);
        //    Assert.Equal(count, result.Count);
        //}

        private void CreateEvents()
        {
            ElasticSearchConfiguration.ConfigureMapping(_client, true);

            var parserPluginManager = IoC.GetInstance <EventParserPluginManager>();

            foreach (var file in Directory.GetFiles(@"..\..\Search\Data\", "event*.json", SearchOption.AllDirectories))
            {
                var events = parserPluginManager.ParseEvents(File.ReadAllText(file), 2, "exceptionless/2.0.0.0");
                Assert.NotNull(events);
                Assert.True(events.Count > 0);
                _repository.Add(events);
            }

            _client.Refresh();
        }
Exemple #10
0
        public static IServiceCollection AddElasticSearch(this IServiceCollection services,
                                                          Action <IElasticSearchConfiguration> options)
        {
            var esConfiguration = new ElasticSearchConfiguration();

            options(esConfiguration);

            if (esConfiguration.UseAuditingLog && string.IsNullOrWhiteSpace(esConfiguration.AuditingLogIndexName))
            {
                throw new ArgumentNullException(nameof(esConfiguration.AuditingLogIndexName));
            }

            services.AddSingleton <IElasticSearchConfiguration, ElasticSearchConfiguration>(service => esConfiguration);

            return(services);
        }
Exemple #11
0
        private void CreateStacks()
        {
            ElasticSearchConfiguration.ConfigureMapping(_client, true);

            var serializer = JsonSerializer.CreateDefault(new JsonSerializerSettings {
                ContractResolver = new LowerCaseUnderscorePropertyNamesContractResolver()
            });

            foreach (var file in Directory.GetFiles(@"..\..\Search\Data\", "stack*.json", SearchOption.AllDirectories))
            {
                using (var stream = new FileStream(file, FileMode.Open)) {
                    using (var streamReader = new StreamReader(stream)) {
                        var stack = serializer.Deserialize(streamReader, typeof(Stack)) as Stack;
                        Assert.NotNull(stack);
                        _repository.Add(stack);
                    }
                }
            }

            _client.Refresh();
        }
        private void CreateStacks()
        {
            ElasticSearchConfiguration.ConfigureMapping(_client, true);

            var serializer = IoC.GetInstance <JsonSerializer>();

            foreach (var file in Directory.GetFiles(@"..\..\Search\Data\", "stack*.json", SearchOption.AllDirectories))
            {
                if (file.EndsWith("summary.json"))
                {
                    continue;
                }

                using (var stream = new FileStream(file, FileMode.Open)) {
                    using (var streamReader = new StreamReader(stream)) {
                        var stack = serializer.Deserialize(streamReader, typeof(Stack)) as Stack;
                        Assert.NotNull(stack);
                        _repository.Add(stack);
                    }
                }
            }

            _client.Refresh();
        }
Exemple #13
0
        public void RegisterServices(Container container)
        {
            container.RegisterSingle <IDependencyResolver>(() => new SimpleInjectorCoreDependencyResolver(container));

            if (Settings.Current.EnableAppStats)
            {
                container.RegisterSingle <IAppStatsClient>(() => new AppStatsClient(Settings.Current.AppStatsServerName, Settings.Current.AppStatsServerPort));
            }
            else
            {
                container.RegisterSingle <IAppStatsClient, InMemoryAppStatsClient>();
            }

            container.RegisterSingle <IDependencyResolver>(() => new SimpleInjectorCoreDependencyResolver(container));

            container.RegisterSingle <MongoDatabase>(() => {
                if (String.IsNullOrEmpty(Settings.Current.MongoConnectionString))
                {
                    throw new ConfigurationErrorsException("MongoConnectionString was not found in the Web.config.");
                }

                MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1);
                var url             = new MongoUrl(Settings.Current.MongoConnectionString);
                string databaseName = url.DatabaseName;
                if (Settings.Current.AppendMachineNameToDatabase)
                {
                    databaseName += String.Concat("-", Environment.MachineName.ToLower());
                }

                MongoServer server = new MongoClient(url).GetServer();
                return(server.GetDatabase(databaseName));
            });

            container.RegisterSingle <IElasticClient>(() => ElasticSearchConfiguration.GetElasticClient(Settings.Current.ElasticSearchConnectionString.Split(',').Select(url => new Uri(url))));

            if (Settings.Current.EnableRedis)
            {
                var muxer = ConnectionMultiplexer.Connect(Settings.Current.RedisConnectionString);
                container.RegisterSingle(muxer);

                container.Register <ICacheClient, HybridCacheClient>();

                container.RegisterSingle <IQueue <EventPost> >(() => new RedisQueue <EventPost>(muxer, statName: StatNames.PostsQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <EventUserDescription> >(() => new RedisQueue <EventUserDescription>(muxer, statName: StatNames.EventsUserDescriptionQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <EventNotification> >(() => new RedisQueue <EventNotification>(muxer, statName: StatNames.EventNotificationQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <WebHookNotification> >(() => new RedisQueue <WebHookNotification>(muxer, statName: StatNames.WebHookQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <MailMessage> >(() => new RedisQueue <MailMessage>(muxer, statName: StatNames.EmailsQueueSize, stats: container.GetInstance <IAppStatsClient>()));

                container.RegisterSingle <RedisMessageBus>(() => new RedisMessageBus(muxer.GetSubscriber()));
                container.Register <IMessagePublisher>(container.GetInstance <RedisMessageBus>);
                container.Register <IMessageSubscriber>(container.GetInstance <RedisMessageBus>);
            }
            else
            {
                container.RegisterSingle <ICacheClient, InMemoryCacheClient>();

                container.RegisterSingle <IQueue <EventPost> >(() => new InMemoryQueue <EventPost>(statName: StatNames.PostsQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <EventUserDescription> >(() => new InMemoryQueue <EventUserDescription>(statName: StatNames.EventsUserDescriptionQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <EventNotification> >(() => new InMemoryQueue <EventNotification>(statName: StatNames.EventNotificationQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <WebHookNotification> >(() => new InMemoryQueue <WebHookNotification>(statName: StatNames.WebHookQueueSize, stats: container.GetInstance <IAppStatsClient>()));
                container.RegisterSingle <IQueue <MailMessage> >(() => new InMemoryQueue <MailMessage>(statName: StatNames.EmailsQueueSize, stats: container.GetInstance <IAppStatsClient>()));

                container.RegisterSingle <InMemoryMessageBus>();
                container.Register <IMessagePublisher>(container.GetInstance <InMemoryMessageBus>);
                container.Register <IMessageSubscriber>(container.GetInstance <InMemoryMessageBus>);
            }

            if (Settings.Current.EnableAzureStorage)
            {
                container.RegisterSingle <IFileStorage>(new AzureFileStorage(Settings.Current.AzureStorageConnectionString));
            }
            else if (!String.IsNullOrEmpty(Settings.Current.StorageFolder))
            {
                container.RegisterSingle <IFileStorage>(new FolderFileStorage(Settings.Current.StorageFolder));
            }
            else
            {
                container.RegisterSingle <IFileStorage>(new InMemoryFileStorage());
            }

            container.RegisterSingle <IStackRepository, StackRepository>();
            container.RegisterSingle <IEventRepository, EventRepository>();
            container.RegisterSingle <IOrganizationRepository, OrganizationRepository>();
            container.RegisterSingle <IProjectRepository, ProjectRepository>();
            container.RegisterSingle <IUserRepository, UserRepository>();
            container.RegisterSingle <IWebHookRepository, WebHookRepository>();
            container.RegisterSingle <ITokenRepository, TokenRepository>();
            container.RegisterSingle <IApplicationRepository, ApplicationRepository>();

            container.RegisterSingle <IGeoIPResolver, MindMaxGeoIPResolver>();

            container.RegisterSingle <IValidator <Application>, ApplicationValidator>();
            container.RegisterSingle <IValidator <Organization>, OrganizationValidator>();
            container.RegisterSingle <IValidator <PersistentEvent>, PersistentEventValidator>();
            container.RegisterSingle <IValidator <Project>, ProjectValidator>();
            container.RegisterSingle <IValidator <Stack>, StackValidator>();
            container.RegisterSingle <IValidator <Token>, TokenValidator>();
            container.RegisterSingle <IValidator <UserDescription>, UserDescriptionValidator>();
            container.RegisterSingle <IValidator <User>, UserValidator>();
            container.RegisterSingle <IValidator <WebHook>, WebHookValidator>();

            container.RegisterSingle <IEmailGenerator>(() => new RazorEmailGenerator(@"Mail\Templates"));
            container.RegisterSingle <IMailer, Mailer>();
            if (Settings.Current.WebsiteMode != WebsiteMode.Dev)
            {
                container.RegisterSingle <IMailSender, SmtpMailSender>();
            }
            else
            {
                container.RegisterSingle <IMailSender>(() => new InMemoryMailSender());
            }

            container.Register <ILockProvider, CacheLockProvider>();
            container.Register <StripeEventHandler>();
            container.RegisterSingle <BillingManager>();
            container.RegisterSingle <DataHelper>();
            container.RegisterSingle <EventStats>();
            container.RegisterSingle <EventPipeline>();
            container.RegisterSingle <EventPluginManager>();
            container.RegisterSingle <FormattingPluginManager>();
        }
Exemple #14
0
 public void Deconstruct(
     out ConsoleConfiguration console,
     out FileConfiguration file,
     out ElasticSearchConfiguration elasticSearch,
     out TracingConfiguration tracing) => (console, file, elasticSearch, tracing) = (
     this.Console ?? new ConsoleConfiguration(),
 public BookSearchAppService(ElasticSearchConfiguration config)
     : base(config)
 {
 }
Exemple #16
0
 public BookChangedEventHandler(ElasticSearchConfiguration config)
     : base(config)
 {
 }
Exemple #17
0
        public void RegisterServices(Container container)
        {
            container.RegisterSingle <IDependencyResolver>(() => new SimpleInjectorCoreDependencyResolver(container));

            var metricsClient = new InMemoryMetricsClient();

            metricsClient.StartDisplayingStats();
            container.RegisterSingle <IMetricsClient>(metricsClient);

            container.RegisterSingle <MongoDatabase>(() => {
                if (String.IsNullOrEmpty(Settings.Current.MongoConnectionString))
                {
                    throw new ConfigurationErrorsException("MongoConnectionString was not found in the Web.config.");
                }

                MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1);
                MongoServer server = new MongoClient(new MongoUrl(Settings.Current.MongoConnectionString)).GetServer();
                return(server.GetDatabase(Settings.Current.MongoDatabaseName));
            });

            container.RegisterSingle <IElasticClient>(() => ElasticSearchConfiguration.GetElasticClient(Settings.Current.ElasticSearchConnectionString.Split(',').Select(url => new Uri(url))));

            container.RegisterSingle <ICacheClient, InMemoryCacheClient>();

            container.RegisterSingle <IQueue <EventPost> >(() => new InMemoryQueue <EventPost>(statName: MetricNames.PostsQueueSize, metrics: container.GetInstance <IMetricsClient>()));
            container.RegisterSingle <IQueue <EventUserDescription> >(() => new InMemoryQueue <EventUserDescription>(statName: MetricNames.EventsUserDescriptionQueueSize, metrics: container.GetInstance <IMetricsClient>()));
            container.RegisterSingle <IQueue <EventNotificationWorkItem> >(() => new InMemoryQueue <EventNotificationWorkItem>(statName: MetricNames.EventNotificationQueueSize, metrics: container.GetInstance <IMetricsClient>()));
            container.RegisterSingle <IQueue <WebHookNotification> >(() => new InMemoryQueue <WebHookNotification>(statName: MetricNames.WebHookQueueSize, metrics: container.GetInstance <IMetricsClient>()));
            container.RegisterSingle <IQueue <MailMessage> >(() => new InMemoryQueue <MailMessage>(statName: MetricNames.EmailsQueueSize, metrics: container.GetInstance <IMetricsClient>()));
            container.RegisterSingle <IQueue <StatusMessage> >(() => new InMemoryQueue <StatusMessage>());

            container.RegisterSingle <IMessageBus, InMemoryMessageBus>();

            container.RegisterSingle <IMessagePublisher>(container.GetInstance <IMessageBus>);
            container.RegisterSingle <IMessageSubscriber>(container.GetInstance <IMessageBus>);

            if (!String.IsNullOrEmpty(Settings.Current.StorageFolder))
            {
                container.RegisterSingle <IFileStorage>(new FolderFileStorage(Settings.Current.StorageFolder));
            }
            else
            {
                container.RegisterSingle <IFileStorage>(new InMemoryFileStorage());
            }

            container.RegisterSingle <IStackRepository, StackRepository>();
            container.RegisterSingle <IEventRepository, EventRepository>();
            container.RegisterSingle <IOrganizationRepository, OrganizationRepository>();
            container.RegisterSingle <IProjectRepository, ProjectRepository>();
            container.RegisterSingle <IUserRepository, UserRepository>();
            container.RegisterSingle <IWebHookRepository, WebHookRepository>();
            container.RegisterSingle <ITokenRepository, TokenRepository>();
            container.RegisterSingle <IApplicationRepository, ApplicationRepository>();

            container.RegisterSingle <IGeoIPResolver, MindMaxGeoIPResolver>();

            container.RegisterSingle <IValidator <Application>, ApplicationValidator>();
            container.RegisterSingle <IValidator <Organization>, OrganizationValidator>();
            container.RegisterSingle <IValidator <PersistentEvent>, PersistentEventValidator>();
            container.RegisterSingle <IValidator <Project>, ProjectValidator>();
            container.RegisterSingle <IValidator <Stack>, StackValidator>();
            container.RegisterSingle <IValidator <Models.Admin.Token>, TokenValidator>();
            container.RegisterSingle <IValidator <UserDescription>, UserDescriptionValidator>();
            container.RegisterSingle <IValidator <User>, UserValidator>();
            container.RegisterSingle <IValidator <WebHook>, WebHookValidator>();

            container.RegisterSingle <IEmailGenerator>(() => new RazorEmailGenerator(@"Mail\Templates"));
            container.RegisterSingle <IMailer, Mailer>();
            if (Settings.Current.WebsiteMode != WebsiteMode.Dev)
            {
                container.RegisterSingle <IMailSender, SmtpMailSender>();
            }
            else
            {
                container.RegisterSingle <IMailSender>(() => new InMemoryMailSender());
            }

            container.Register <ILockProvider, CacheLockProvider>();
            container.Register <StripeEventHandler>();
            container.RegisterSingle <BillingManager>();
            container.RegisterSingle <DataHelper>();
            container.RegisterSingle <EventStats>();
            container.RegisterSingle <EventPipeline>();
            container.RegisterSingle <EventPluginManager>();
            container.RegisterSingle <FormattingPluginManager>();

            container.RegisterSingle <ICoreLastReferenceIdManager, NullCoreLastReferenceIdManager>();
        }
 protected ContentChangedEventHandlerBase(ElasticSearchConfiguration config)
 {
     CurrentIndexName = config.DefaultIndexName;
     Client           = config.Client;
 }
Exemple #19
0
        public static IHealthChecksBuilder AddElasticSearchHealthCheck(this IHealthChecksBuilder builder, ElasticSearchConfiguration configuration)
        {
            //if (configuration.Enabled)
            //{
            //    var elasticUrl = configuration.ElasticUrl;

            //    builder.AddElasticsearch(elasticUrl, name: "ElasticSearch Client", failureStatus: HealthStatus.Degraded,
            //        tags: new[] { HealthCheckType.Infrastructure.ToString(), HealthCheckType.Logging.ToString(), "Port:9200" }, timeout: new TimeSpan(0,1,0));
            //}


            return(builder);
        }
 protected SearchAppServiceBase(ElasticSearchConfiguration config)
 {
     Client           = config.Client;
     CurrentIndexName = config.DefaultIndexName;
 }