Пример #1
0
        public IntegrationTestsBase(ITestOutputHelper output) : base(output)
        {
            var builder = new MvcWebApplicationBuilder <Startup>()
                          .UseSolutionRelativeContentRoot("src/Exceptionless.Api")
                          .ConfigureBeforeStartup(Configure)
                          .ConfigureAfterStartup(RegisterServices)
                          .UseApplicationAssemblies();

            _server = builder.Build();

            var settings = GetService <Newtonsoft.Json.JsonSerializerSettings>();

            _serializer = GetService <ITextSerializer>();
            _client     = new FluentClient(new JsonContentSerializer(settings), _server.CreateHandler())
            {
                BaseUri = new Uri(_server.BaseAddress + "api/v2")
            };
            _httpClient = new HttpClient(_server.CreateHandler())
            {
                BaseAddress = new Uri(_server.BaseAddress + "api/v2/")
            };

            _configuration = GetService <ExceptionlessElasticConfiguration>();
            _configuration.DeleteIndexesAsync().GetAwaiter().GetResult();
            _configuration.ConfigureIndexesAsync(beginReindexingOutdated: false).GetAwaiter().GetResult();
        }
Пример #2
0
        public static async Task CreateSearchDataAsync(ExceptionlessElasticConfiguration configuration, IEventRepository eventRepository, EventParserPluginManager parserPluginManager, bool updateDates = false)
        {
            string path = Path.Combine("..", "..", "..", "Search", "Data");

            foreach (string file in Directory.GetFiles(path, "event*.json", SearchOption.AllDirectories))
            {
                if (file.EndsWith("summary.json"))
                {
                    continue;
                }

                var events = parserPluginManager.ParseEvents(await File.ReadAllTextAsync(file), 2, "exceptionless/2.0.0.0");
                Assert.NotNull(events);
                Assert.True(events.Count > 0);
                foreach (var ev in events)
                {
                    if (updateDates)
                    {
                        ev.Date       = SystemClock.OffsetNow;
                        ev.CreatedUtc = SystemClock.UtcNow;
                    }

                    ev.CopyDataToIndex(Array.Empty <string>());
                }

                await eventRepository.AddAsync(events, o => o.ImmediateConsistency());
            }

            configuration.Events.QueryParser.Configuration.MappingResolver.RefreshMapping();
        }
Пример #3
0
 public StackRepository(ExceptionlessElasticConfiguration configuration, IEventRepository eventRepository, IValidator <Stack> validator, AppOptions options)
     : base(configuration.Stacks, validator, options)
 {
     _eventRepository = eventRepository;
     DocumentsChanging.AddHandler(OnDocumentChangingAsync);
     AddPropertyRequiredForRemove(s => s.SignatureHash);
 }
Пример #4
0
 public CleanupSnapshotJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory)
     : base(configuration.Client, lockProvider, loggerFactory)
 {
     AddRepository(Settings.Current.AppScopePrefix + "ex_organizations", TimeSpan.FromDays(7));
     AddRepository(Settings.Current.AppScopePrefix + "ex_stacks", TimeSpan.FromDays(7));
     AddRepository(Settings.Current.AppScopePrefix + "ex_events", TimeSpan.FromDays(7));
 }
Пример #5
0
 public ElasticTestBase(ITestOutputHelper output) : base(output)
 {
     Log.MinimumLevel = LogLevel.Information;
     Log.SetLogLevel <ScheduledTimer>(LogLevel.Warning);
     _container     = CreateContainer();
     _configuration = GetService <ExceptionlessElasticConfiguration>();
 }
Пример #6
0
 public DataMigrationJob(
     ExceptionlessElasticConfiguration configuration,
     ILoggerFactory loggerFactory
     ) : base(loggerFactory)
 {
     _configuration = configuration;
 }
 public StackRepository(ExceptionlessElasticConfiguration configuration, IEventRepository eventRepository, IValidator <Stack> validator)
     : base(configuration.Stacks.Stack, validator)
 {
     _eventRepository = eventRepository;
     DocumentsChanging.AddHandler(OnDocumentChangingAsync);
     FieldsRequiredForRemove.Add(ElasticType.GetFieldName(s => s.SignatureHash));
 }
Пример #8
0
        public IntegrationTestsBase(ITestOutputHelper output, AppWebHostFactory factory) : base(output)
        {
            Log.MinimumLevel = LogLevel.Information;
            Log.SetLogLevel <ScheduledTimer>(LogLevel.Warning);
            Log.SetLogLevel <InMemoryMessageBus>(LogLevel.Warning);
            Log.SetLogLevel <InMemoryCacheClient>(LogLevel.Warning);
            Log.SetLogLevel <InMemoryMetricsClient>(LogLevel.Information);
            Log.SetLogLevel("StartupActions", LogLevel.Warning);
            Log.SetLogLevel <Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager>(LogLevel.Warning);

            var configuredFactory = factory.Factories.FirstOrDefault();

            if (configuredFactory == null)
            {
                configuredFactory = factory.WithWebHostBuilder(builder => {
                    builder.ConfigureTestServices(RegisterServices); // happens after normal container configure and overrides services
                });
            }

            _disposables.Add(_testSystemClock);

            _httpClient             = configuredFactory.CreateClient();
            _server                 = configuredFactory.Server;
            _httpClient.BaseAddress = new Uri(_server.BaseAddress + "api/v2/", UriKind.Absolute);

            var testScope = configuredFactory.Services.CreateScope();

            _disposables.Add(testScope);
            ServiceProvider = testScope.ServiceProvider;

            var settings = GetService <JsonSerializerSettings>();

            _client        = new FluentClient(_httpClient, new NewtonsoftJsonSerializer(settings));
            _configuration = GetService <ExceptionlessElasticConfiguration>();
        }
        public SetStackDuplicateSignature(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(loggerFactory)
        {
            _config = configuration;
            _client = configuration.Client;

            MigrationType = MigrationType.Repeatable;
        }
Пример #10
0
 public CleanupSnapshotJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory)
     : base(configuration.Client, lockProvider, loggerFactory)
 {
     _configuration = configuration;
     AddRepository(configuration.Options.ScopePrefix + "organizations", TimeSpan.FromDays(7));
     AddRepository(configuration.Options.ScopePrefix + "stacks", TimeSpan.FromDays(7));
     AddRepository(configuration.Options.ScopePrefix + "events", TimeSpan.FromDays(7));
 }
Пример #11
0
        public SetStackStatus(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(loggerFactory)
        {
            _config = configuration;
            _client = configuration.Client;

            MigrationType = MigrationType.VersionedAndResumable;
            Version       = 2;
        }
Пример #12
0
 public EventRepository(ExceptionlessElasticConfiguration configuration, IValidator <PersistentEvent> validator)
     : base(configuration.Events.Event, validator)
 {
     DisableCache();
     BatchNotifications = true;
     DefaultExcludes.Add(EventIndexType.Fields.IDX);
     FieldsRequiredForRemove.Add(EventIndexType.Fields.Date);
 }
Пример #13
0
        public UpdateIndexMappings(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(loggerFactory)
        {
            _config = configuration;
            _client = configuration.Client;

            MigrationType = MigrationType.VersionedAndResumable;
            Version       = 1;
        }
Пример #14
0
 public AdminController(ExceptionlessElasticConfiguration configuration, IFileStorage fileStorage, IMessagePublisher messagePublisher, IOrganizationRepository organizationRepository, IQueue <EventPost> eventPostQueue, IQueue <WorkItemData> workItemQueue)
 {
     _configuration          = configuration;
     _fileStorage            = fileStorage;
     _messagePublisher       = messagePublisher;
     _organizationRepository = organizationRepository;
     _eventPostQueue         = eventPostQueue;
     _workItemQueue          = workItemQueue;
 }
Пример #15
0
 public CleanupOrphanedDataJob(ExceptionlessElasticConfiguration config, IStackRepository stackRepository, IEventRepository eventRepository, ICacheClient cacheClient, ILockProvider lockProvider, ILoggerFactory loggerFactory = null) : base(loggerFactory)
 {
     _config          = config;
     _elasticClient   = config.Client;
     _stackRepository = stackRepository;
     _eventRepository = eventRepository;
     _cacheClient     = cacheClient;
     _lockProvider    = lockProvider;
 }
Пример #16
0
 public EventRepository(ExceptionlessElasticConfiguration configuration, IValidator <PersistentEvent> validator)
     : base(configuration.Events.Event, validator)
 {
     DisableCache();
     BatchNotifications = true;
     DefaultExcludes.Add(ElasticType.GetFieldName(e => e.Idx));
     DefaultExcludes.Add(EventIndexType.Alias.IpAddress);
     DefaultExcludes.Add("error");
     FieldsRequiredForRemove.Add(ElasticType.GetFieldName(e => e.Date));
 }
Пример #17
0
    public FixDuplicateStacks(ExceptionlessElasticConfiguration configuration, IStackRepository stackRepository, IEventRepository eventRepository, ILoggerFactory loggerFactory) : base(loggerFactory)
    {
        _config          = configuration;
        _client          = configuration.Client;
        _cache           = configuration.Cache;
        _stackRepository = stackRepository;
        _eventRepository = eventRepository;

        MigrationType = MigrationType.Repeatable;
    }
        public EventRepository(ExceptionlessElasticConfiguration configuration, IOptions <AppOptions> options, IValidator <PersistentEvent> validator)
            : base(configuration.Events.Event, validator, options)
        {
            DisableCache();
            BatchNotifications = true;

            AddDefaultExclude(e => e.Idx);
            // copy to fields
            AddDefaultExclude(EventIndexType.Alias.IpAddress);
            AddDefaultExclude(EventIndexType.Alias.OperatingSystem);
            AddDefaultExclude("error");

            AddPropertyRequiredForRemove(e => e.Date);
        }
        public OrganizationSnapshotJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory) : base(configuration.Client, lockProvider, loggerFactory)
        {
            _configuration = configuration;
            Repository     = configuration.Options.ScopePrefix + "organizations";
            foreach (var index in configuration.Indexes)
            {
                if (index == configuration.Events || index == configuration.Stacks)
                {
                    continue;
                }

                IncludedIndexes.Add(index.Name + "*");
            }
        }
Пример #20
0
        public EventRepository(ExceptionlessElasticConfiguration configuration, AppOptions options, IValidator <PersistentEvent> validator)
            : base(configuration.Events, validator, options)
        {
            DisableCache(); // NOTE: If cache is ever enabled, then fast paths for patching/deleting with scripts will be super slow!
            BatchNotifications = true;
            DefaultPipeline    = "events-pipeline";

            AddDefaultExclude(e => e.Idx);
            // copy to fields
            AddDefaultExclude(EventIndex.Alias.IpAddress);
            AddDefaultExclude(EventIndex.Alias.OperatingSystem);
            AddDefaultExclude("error");

            AddPropertyRequiredForRemove(e => e.Date);
        }
Пример #21
0
    public EventIndex(ExceptionlessElasticConfiguration configuration, IServiceProvider serviceProvider, AppOptions appOptions) : base(configuration, configuration.Options.ScopePrefix + "events", 1, doc => ((PersistentEvent)doc).Date.UtcDateTime)
    {
        _configuration   = configuration;
        _serviceProvider = serviceProvider;

        if (appOptions.MaximumRetentionDays > 0)
        {
            MaxIndexAge = TimeSpan.FromDays(appOptions.MaximumRetentionDays);
        }

        AddAlias($"{Name}-today", TimeSpan.FromDays(1));
        AddAlias($"{Name}-last3days", TimeSpan.FromDays(7));
        AddAlias($"{Name}-last7days", TimeSpan.FromDays(7));
        AddAlias($"{Name}-last30days", TimeSpan.FromDays(30));
        AddAlias($"{Name}-last90days", TimeSpan.FromDays(90));
    }
Пример #22
0
 public AdminController(
     ExceptionlessElasticConfiguration configuration,
     IFileStorage fileStorage,
     IMessagePublisher messagePublisher,
     IOrganizationRepository organizationRepository,
     IQueue <EventPost> eventPostQueue,
     IQueue <WorkItemData> workItemQueue,
     IOptions <AppOptions> appOptions,
     IOptions <AuthOptions> authOptions,
     IOptions <CacheOptions> cacheOptions,
     IOptions <ElasticsearchOptions> elasticsearchOptions,
     IOptions <EmailOptions> emailOptions,
     IOptions <IntercomOptions> intercomOptions,
     IOptions <MessageBusOptions> messageBusOptions,
     IOptions <MetricOptions> metricOptions,
     IOptions <QueueOptions> queueOptions,
     IOptions <SlackOptions> slackOptions,
     IOptions <StorageOptions> storageOptions,
     IOptions <StripeOptions> stripeOptions,
     BillingManager billingManager,
     BillingPlans plans)
 {
     _configuration          = configuration;
     _fileStorage            = fileStorage;
     _messagePublisher       = messagePublisher;
     _organizationRepository = organizationRepository;
     _eventPostQueue         = eventPostQueue;
     _workItemQueue          = workItemQueue;
     _appOptions             = appOptions;
     _authOptions            = authOptions;
     _cacheOptions           = cacheOptions;
     _elasticsearchOptions   = elasticsearchOptions;
     _emailOptions           = emailOptions;
     _intercomOptions        = intercomOptions;
     _messageBusOptions      = messageBusOptions;
     _metricOptions          = metricOptions;
     _queueOptions           = queueOptions;
     _slackOptions           = slackOptions;
     _storageOptions         = storageOptions;
     _stripeOptions          = stripeOptions;
     _billingManager         = billingManager;
     _plans = plans;
 }
Пример #23
0
 public AdminController(
     ExceptionlessElasticConfiguration configuration,
     IFileStorage fileStorage,
     IMessagePublisher messagePublisher,
     IOrganizationRepository organizationRepository,
     IQueue <EventPost> eventPostQueue,
     IQueue <WorkItemData> workItemQueue,
     AppOptions appOptions,
     BillingManager billingManager,
     BillingPlans plans)
 {
     _configuration          = configuration;
     _fileStorage            = fileStorage;
     _messagePublisher       = messagePublisher;
     _organizationRepository = organizationRepository;
     _eventPostQueue         = eventPostQueue;
     _workItemQueue          = workItemQueue;
     _appOptions             = appOptions;
     _billingManager         = billingManager;
     _plans = plans;
 }
Пример #24
0
 public ProjectRepository(ExceptionlessElasticConfiguration configuration, IValidator <Project> validator)
     : base(configuration.Organizations.Project, validator)
 {
 }
Пример #25
0
 public OrganizationRepository(ExceptionlessElasticConfiguration configuration, IValidator <Organization> validator, BillingPlans plans, IOptions <AppOptions> options)
     : base(configuration.Organizations, validator, options)
 {
     _plans = plans;
 }
Пример #26
0
 public UserIndex(ExceptionlessElasticConfiguration configuration) : base(configuration, configuration.Options.ScopePrefix + "users", 1)
 {
     _configuration = configuration;
 }
 public UserRepository(ExceptionlessElasticConfiguration configuration, IValidator<User> validator)
     : base(configuration.Organizations.User, validator) {
     FieldsRequiredForRemove.AddRange(new Field[] { ElasticType.GetPropertyName(u => u.EmailAddress), ElasticType.GetPropertyName(u => u.OrganizationIds) });
     DocumentsAdded.AddHandler(OnDocumentsAdded);
 }
 public PersistentEventQueryValidator(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(configuration.Events.Event.QueryParser, loggerFactory)
 {
 }
 public MaintainIndexesJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory) : base(configuration, lockProvider, loggerFactory)
 {
 }
Пример #30
0
 public StackQueryValidator(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(configuration.Stacks.Stack.QueryParser, loggerFactory)
 {
 }