/// <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));
        }
Exemplo n.º 2
0
        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>());
        }
Exemplo n.º 3
0
        public static DurableCursor GetFront(Persistence.IStorageFactory storageFactory)
        {
            var storage = storageFactory.Create();

            return(new DurableCursor(storage.ResolveUri("cursor.json"), storage, MemoryCursor.MinValue));
        }