public AuditIngestionComponent( Settings settings, IDocumentStore documentStore, RawEndpointFactory rawEndpointFactory, LoggingSettings loggingSettings, BodyStorageFeature.BodyStorageEnricher bodyStorageEnricher, IEnrichImportedAuditMessages[] enrichers, AuditIngestionCustomCheck.State ingestionState ) { var errorHandlingPolicy = new AuditIngestionFaultPolicy(documentStore, loggingSettings, FailedMessageFactory, OnCriticalError); auditPersister = new AuditPersister(documentStore, bodyStorageEnricher, enrichers); var ingestor = new AuditIngestor(auditPersister, settings); var ingestion = new AuditIngestion( (messageContext, dispatcher) => ingestor.Ingest(messageContext), dispatcher => ingestor.Initialize(dispatcher), settings.AuditQueue, rawEndpointFactory, errorHandlingPolicy, OnCriticalError); failedImporter = new ImportFailedAudits(documentStore, ingestor, rawEndpointFactory); watchdog = new Watchdog(ingestion.EnsureStarted, ingestion.EnsureStopped, ingestionState.ReportError, ingestionState.Clear, settings.TimeToRestartAuditIngestionAfterFailure, log, "failed message ingestion"); }
public ErrorIngestion(ErrorIngestor errorIngestor, string errorQueue, RawEndpointFactory rawEndpointFactory, IDocumentStore documentStore, LoggingSettings loggingSettings, Func <string, Exception, Task> onCriticalError) { this.errorIngestor = errorIngestor; this.errorQueue = errorQueue; this.rawEndpointFactory = rawEndpointFactory; this.onCriticalError = onCriticalError; importFailuresHandler = new SatelliteImportFailuresHandler(documentStore, loggingSettings, onCriticalError); }
private void Initialize() { RecordStartup(loggingSettings, configuration); // .NET default limit is 10. RavenDB in conjunction with transports that use HTTP exceeds that limit. ServicePointManager.DefaultConnectionLimit = settings.HttpDefaultConnectionLimit; timeKeeper = new TimeKeeper(); transportCustomization = settings.LoadTransportCustomization(); var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(type => type.Assembly == typeof(Bootstrapper).Assembly && type.GetInterfaces().Any() == false)); var domainEvents = new DomainEvents(); containerBuilder.RegisterInstance(domainEvents).As <IDomainEvents>(); transportSettings = new TransportSettings(); containerBuilder.RegisterInstance(transportSettings).SingleInstance(); var rawEndpointFactory = new RawEndpointFactory(settings, transportSettings, transportCustomization); containerBuilder.RegisterInstance(rawEndpointFactory).AsSelf(); containerBuilder.RegisterType <MessageStreamerConnection>().SingleInstance(); containerBuilder.RegisterInstance(loggingSettings); containerBuilder.RegisterInstance(settings); containerBuilder.RegisterInstance(notifier).ExternallyOwned(); containerBuilder.RegisterInstance(timeKeeper).ExternallyOwned(); containerBuilder.RegisterInstance(documentStore).As <IDocumentStore>().ExternallyOwned(); containerBuilder.Register(c => HttpClientFactory); containerBuilder.RegisterModule <ApisModule>(); containerBuilder.RegisterType <MessageForwarder>().AsImplementedInterfaces().SingleInstance(); containerBuilder.Register(c => bus.Bus); containerBuilder.RegisterType <DomainEventBusPublisher>().AsImplementedInterfaces().AsSelf().SingleInstance(); containerBuilder.RegisterType <EndpointInstanceMonitoring>().SingleInstance(); containerBuilder.RegisterType <MonitoringDataPersister>().SingleInstance(); containerBuilder.RegisterType <ServiceBus.Management.Infrastructure.Nancy.JsonNetSerializer>().As <ISerializer>(); containerBuilder.RegisterType <ServiceBus.Management.Infrastructure.Nancy.JsonNetBodyDeserializer>().As <IBodyDeserializer>(); containerBuilder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t => t.IsAssignableTo <INancyModule>()).As <INancyModule>(); additionalRegistrationActions?.Invoke(containerBuilder); container = containerBuilder.Build(); Startup = new Startup(container); domainEvents.SetContainer(container); }
public AuditIngestion( Func <MessageContext, IDispatchMessages, Task> onMessage, Func <IDispatchMessages, Task> initialize, string inputEndpoint, RawEndpointFactory rawEndpointFactory, IErrorHandlingPolicy errorHandlingPolicy, Func <string, Exception, Task> onCriticalError) { this.onMessage = onMessage; this.initialize = initialize; this.inputEndpoint = inputEndpoint; this.rawEndpointFactory = rawEndpointFactory; this.errorHandlingPolicy = errorHandlingPolicy; this.onCriticalError = onCriticalError; }
private void Initialize() { RecordStartup(loggingSettings, configuration); // .NET default limit is 10. RavenDB in conjunction with transports that use HTTP exceeds that limit. ServicePointManager.DefaultConnectionLimit = settings.HttpDefaultConnectionLimit; transportCustomization = settings.LoadTransportCustomization(); var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(type => type.Assembly == typeof(Bootstrapper).Assembly && type.GetInterfaces().Any() == false)); var domainEvents = new DomainEvents(); containerBuilder.RegisterInstance(domainEvents).As <IDomainEvents>(); transportSettings = new TransportSettings { RunCustomChecks = true }; containerBuilder.RegisterInstance(transportSettings).SingleInstance(); var rawEndpointFactory = new RawEndpointFactory(settings, transportSettings, transportCustomization); containerBuilder.RegisterInstance(rawEndpointFactory).AsSelf(); containerBuilder.RegisterType <MessageStreamerConnection>().SingleInstance(); containerBuilder.RegisterInstance(loggingSettings); containerBuilder.RegisterInstance(settings); containerBuilder.RegisterInstance(notifier).ExternallyOwned(); containerBuilder.RegisterInstance(documentStore).As <IDocumentStore>().ExternallyOwned(); containerBuilder.Register(c => HttpClientFactory); containerBuilder.RegisterModule <ApisModule>(); containerBuilder.Register(c => bus.Bus); containerBuilder.RegisterType <EndpointInstanceMonitoring>().SingleInstance(); containerBuilder.RegisterType <MonitoringDataPersister>().AsImplementedInterfaces().AsSelf().SingleInstance(); RegisterInternalWebApiControllers(containerBuilder); additionalRegistrationActions?.Invoke(containerBuilder); container = containerBuilder.Build(); Startup = new Startup(container); domainEvents.SetContainer(container); }
public AuditIngestionComponent( Settings settings, IDocumentStore documentStore, RawEndpointFactory rawEndpointFactory, LoggingSettings loggingSettings, BodyStorageFeature.BodyStorageEnricher bodyStorageEnricher, IEnrichImportedAuditMessages[] enrichers, AuditIngestionCustomCheck.State ingestionState ) { this.settings = settings; var errorHandlingPolicy = new AuditIngestionFaultPolicy(documentStore, loggingSettings, FailedMessageFactory, OnCriticalError); auditPersister = new AuditPersister(documentStore, bodyStorageEnricher, enrichers); ingestor = new AuditIngestor(auditPersister, settings); var ingestion = new AuditIngestion( async(messageContext, dispatcher) => { var taskCompletionSource = new TaskCompletionSource <bool>(TaskCreationOptions.RunContinuationsAsynchronously); messageContext.SetTaskCompletionSource(taskCompletionSource); await channel.Writer.WriteAsync(messageContext).ConfigureAwait(false); await taskCompletionSource.Task.ConfigureAwait(false); }, dispatcher => ingestor.Initialize(dispatcher), settings.AuditQueue, rawEndpointFactory, errorHandlingPolicy, OnCriticalError); failedImporter = new ImportFailedAudits(documentStore, ingestor, rawEndpointFactory); watchdog = new Watchdog(ingestion.EnsureStarted, ingestion.EnsureStopped, ingestionState.ReportError, ingestionState.Clear, settings.TimeToRestartAuditIngestionAfterFailure, log, "failed message ingestion"); channel = Channel.CreateBounded <MessageContext>(new BoundedChannelOptions(settings.MaximumConcurrencyLevel) { SingleReader = true, SingleWriter = false, AllowSynchronousContinuations = false, FullMode = BoundedChannelFullMode.Wait }); ingestionWorker = Task.Run(() => Loop(), CancellationToken.None); }
public ErrorIngestionComponent( Settings settings, IDocumentStore documentStore, IDomainEvents domainEvents, RawEndpointFactory rawEndpointFactory, LoggingSettings loggingSettings, BodyStorageFeature.BodyStorageEnricher bodyStorageEnricher, IEnrichImportedErrorMessages[] enrichers, IFailedMessageEnricher[] failedMessageEnrichers, ErrorIngestionCustomCheck.State ingestionState ) { var announcer = new FailedMessageAnnouncer(domainEvents); var persister = new ErrorPersister(documentStore, bodyStorageEnricher, enrichers, failedMessageEnrichers); var ingestor = new ErrorIngestor(persister, announcer, settings.ForwardErrorMessages, settings.ErrorLogQueue); var ingestion = new ErrorIngestion(ingestor, settings.ErrorQueue, rawEndpointFactory, documentStore, loggingSettings, OnCriticalError); failedImporter = new ImportFailedErrors(documentStore, ingestor, rawEndpointFactory); watchdog = new Watchdog(ingestion.EnsureStarted, ingestion.EnsureStopped, ingestionState.ReportError, ingestionState.Clear, settings.TimeToRestartErrorIngestionAfterFailure, log, "failed message ingestion"); }
public ImportFailedErrors(IDocumentStore store, ErrorIngestor errorIngestor, RawEndpointFactory rawEndpointFactory) { this.store = store; this.errorIngestor = errorIngestor; this.rawEndpointFactory = rawEndpointFactory; }
public ImportFailedAudits(IDocumentStore store, AuditIngestor auditIngestor, RawEndpointFactory rawEndpointFactory) { this.store = store; this.auditIngestor = auditIngestor; this.rawEndpointFactory = rawEndpointFactory; }