public GremlinClientFactory(ICosmosGraphDbSettings settings) { Guard.ArgumentNotNull(settings, nameof(settings)); Guard.IsNullOrWhiteSpace(settings.EndPointUrl, nameof(settings.EndPointUrl)); Guard.IsNullOrWhiteSpace(settings.ApiKey, nameof(settings.ApiKey)); Guard.IsNullOrWhiteSpace(settings.ContainerPath, nameof(settings.ContainerPath)); _server = new GremlinServer(settings.EndPointUrl, settings.Port, true, settings.ContainerPath, settings.ApiKey); _connectionPoolSettings = new ConnectionPoolSettings() { MaxInProcessPerConnection = settings.MaxInProcessPerConnection ?? 32, PoolSize = settings.PoolSize ?? 4, ReconnectionAttempts = settings.ReconnectionAttempts ?? 4, ReconnectionBaseDelay = TimeSpan.FromMilliseconds(settings.ReconnectionBaseDelay ?? 500) }; _webSocketConfiguration = new Action <ClientWebSocketOptions>(options => { options.KeepAliveInterval = TimeSpan.FromSeconds(settings.KeepAliveInterval ?? 10); }); }
public void RegisterComponents(IServiceCollection builder) { builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder .AddScoped <IHealthChecker, ControllerResolverHealthCheck>(); builder .AddScoped <IGremlinClientFactory, GremlinClientFactory>(); builder .AddScoped <IPathResultsTransform, PathResultsTransform>(); builder .AddScoped <ICosmosGraphDbSettings>(ctx => { CosmosGraphDbSettings settings = new CosmosGraphDbSettings(); Configuration.Bind("CosmosGraphSettings", settings); return(settings); }); builder .AddScoped <IGraphRepository>(ctx => { IGremlinClientFactory gremlinClientFactory = ctx.GetService <IGremlinClientFactory>(); IPathResultsTransform pathResultsTransform = ctx.GetService <IPathResultsTransform>(); ICosmosGraphDbSettings settings = ctx.GetService <ICosmosGraphDbSettings>(); return(new GraphRepository(gremlinClientFactory, pathResultsTransform, settings.DegreeOfParallelism == 0 ? 15 : settings.DegreeOfParallelism)); }); builder .AddScoped <ISpecificationRepository, SpecificationRepository>(); builder .AddScoped <ICalculationRepository, CalculationRepository>(); builder .AddScoped <IGraphService, GraphService>(); builder .AddScoped <IDatasetRepository, DatasetRepository>(); builder .AddScoped <IFundingLineRepository, FundingLineRepository>(); builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder.AddHttpContextAccessor(); builder.AddHealthCheckMiddleware(); builder.AddApplicationInsightsTelemetry(); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.Graph"); builder.AddApplicationInsightsServiceName(Configuration, "CalculateFunding.Api.Graph"); builder.AddLogging("CalculateFunding.Api.Graph"); if (Configuration.IsSwaggerEnabled()) { builder.ConfigureSwaggerServices(title: "Graph Microservice API"); } }