/// <summary> /// Constructs a <see cref="ValidationCollector"/> from inputs and returns a <see cref="Result"/>. /// </summary> /// <param name="queue">Queue that the <see cref="ValidationCollector"/> queues packages to.</param> /// <param name="catalogIndexUrl">Url of the catalog that the <see cref="ValidationCollector"/> should run on.</param> /// <param name="monitoringStorageFactory">Storage where the cursors used by the <see cref="ValidationCollector"/> are stored.</param> /// <param name="endpointInputs">Endpoints that validations will be run on for queued packages.</param> /// <param name="messageHandlerFactory">Used by <see cref="ValidationCollector"/> to construct a <see cref="CollectorHttpClient"/>.</param> public Result Create( IStorageQueue <PackageValidatorContext> queue, string catalogIndexUrl, Persistence.IStorageFactory monitoringStorageFactory, IEnumerable <EndpointFactory.Input> endpointInputs, ITelemetryService telemetryService, Func <HttpMessageHandler> messageHandlerFactory) { var collector = new ValidationCollector( queue, new Uri(catalogIndexUrl), telemetryService, _loggerFactory.CreateLogger <ValidationCollector>(), messageHandlerFactory); var front = GetFront(monitoringStorageFactory); var back = new AggregateCursor(endpointInputs.Select(input => new HttpReadCursor(input.CursorUri, messageHandlerFactory))); return(new Result(collector, front, back)); }
public static PackageValidatorContextEnqueuer CreatePackageValidatorContextEnqueuer( IStorageQueue <PackageValidatorContext> queue, string catalogIndexUrl, Persistence.IStorageFactory monitoringStorageFactory, EndpointConfiguration endpointConfig, ITelemetryService telemetryService, Func <HttpMessageHandler> messageHandlerFactory, ILoggerFactory loggerFactory) { if (queue == null) { throw new ArgumentNullException(nameof(queue)); } if (string.IsNullOrEmpty(catalogIndexUrl)) { throw new ArgumentException(nameof(catalogIndexUrl)); } if (monitoringStorageFactory == null) { throw new ArgumentNullException(nameof(monitoringStorageFactory)); } if (telemetryService == null) { throw new ArgumentNullException(nameof(telemetryService)); } var collection = new ServiceCollection(); collection.AddSingleton(loggerFactory); collection.AddSingleton(typeof(ILogger <>), typeof(Logger <>)); var builder = new ContainerBuilder(); builder.Populate(collection); builder.RegisterEndpointConfiguration(endpointConfig); builder.RegisterEndpoints(endpointConfig); builder.RegisterMessageHandlerFactory(messageHandlerFactory); builder .RegisterInstance(queue) .As <IStorageQueue <PackageValidatorContext> >(); builder .RegisterInstance(new Uri(catalogIndexUrl)) .As <Uri>(); builder .RegisterInstance(telemetryService) .As <ITelemetryService>(); builder .RegisterType <ValidationCollector>() .As <ValidationCollector>(); builder .RegisterInstance(GetFront(monitoringStorageFactory)) .As <ReadWriteCursor>(); builder .RegisterType <AggregateEndpointCursor>() .As <ReadCursor>(); builder .RegisterType <PackageValidatorContextEnqueuer>() .As <PackageValidatorContextEnqueuer>(); var container = builder.Build(); return(container.Resolve <PackageValidatorContextEnqueuer>()); }
public static DurableCursor GetFront(Persistence.IStorageFactory storageFactory) { var storage = storageFactory.Create(); return(new DurableCursor(storage.ResolveUri("cursor.json"), storage, MemoryCursor.MinValue)); }