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(); }
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(); }
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); }
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)); }
public ElasticTestBase(ITestOutputHelper output) : base(output) { Log.MinimumLevel = LogLevel.Information; Log.SetLogLevel <ScheduledTimer>(LogLevel.Warning); _container = CreateContainer(); _configuration = GetService <ExceptionlessElasticConfiguration>(); }
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)); }
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; }
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)); }
public SetStackStatus(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(loggerFactory) { _config = configuration; _client = configuration.Client; MigrationType = MigrationType.VersionedAndResumable; Version = 2; }
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); }
public UpdateIndexMappings(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(loggerFactory) { _config = configuration; _client = configuration.Client; MigrationType = MigrationType.VersionedAndResumable; Version = 1; }
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; }
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; }
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)); }
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 + "*"); } }
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); }
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)); }
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; }
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; }
public ProjectRepository(ExceptionlessElasticConfiguration configuration, IValidator <Project> validator) : base(configuration.Organizations.Project, validator) { }
public OrganizationRepository(ExceptionlessElasticConfiguration configuration, IValidator <Organization> validator, BillingPlans plans, IOptions <AppOptions> options) : base(configuration.Organizations, validator, options) { _plans = plans; }
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) { }
public StackQueryValidator(ExceptionlessElasticConfiguration configuration, ILoggerFactory loggerFactory) : base(configuration.Stacks.Stack.QueryParser, loggerFactory) { }