in src/WebJobs.Extensions.CosmosDB/Trigger/CosmosDbScalerProvider.cs [23:48]
public CosmosDbScalerProvider(IServiceProvider serviceProvider, TriggerMetadata triggerMetadata)
{
AzureComponentFactory azureComponentFactory = null;
if (triggerMetadata.Properties != null && triggerMetadata.Properties.TryGetValue(nameof(AzureComponentFactory), out object value))
{
azureComponentFactory = value as AzureComponentFactory;
}
else
{
azureComponentFactory = serviceProvider.GetService<AzureComponentFactory>();
}
IConfiguration config = serviceProvider.GetService<IConfiguration>();
ILoggerFactory loggerFactory = serviceProvider.GetService<ILoggerFactory>();
CosmosDbMetadata cosmosDbMetadata = JsonConvert.DeserializeObject<CosmosDbMetadata>(triggerMetadata.Metadata.ToString());
cosmosDbMetadata.ResolveProperties(serviceProvider.GetService<INameResolver>());
ICosmosDBServiceFactory serviceFactory = new DefaultCosmosDBServiceFactory(config, azureComponentFactory);
CosmosClient cosmosClient = serviceFactory.CreateService(cosmosDbMetadata.Connection, new CosmosClientOptions
{
ConnectionMode = ConnectionMode.Gateway
});
var monitoredContainer = cosmosClient.GetContainer(cosmosDbMetadata.DatabaseName, cosmosDbMetadata.ContainerName);
var leaseContainer = cosmosClient.GetContainer(string.IsNullOrEmpty(cosmosDbMetadata.LeaseDatabaseName) ? cosmosDbMetadata.DatabaseName : cosmosDbMetadata.LeaseDatabaseName, string.IsNullOrEmpty(cosmosDbMetadata.LeaseContainerName) ? CosmosDBTriggerConstants.DefaultLeaseCollectionName : cosmosDbMetadata.LeaseContainerName);
_scaleMonitor = new CosmosDBScaleMonitor(triggerMetadata.FunctionName, loggerFactory.CreateLogger<CosmosDBScaleMonitor>(), monitoredContainer, leaseContainer, cosmosDbMetadata.LeaseContainerPrefix);
_targetScaler = new CosmosDBTargetScaler(triggerMetadata.FunctionName, cosmosDbMetadata.MaxItemsPerInvocation, monitoredContainer, leaseContainer, cosmosDbMetadata.LeaseContainerPrefix, loggerFactory.CreateLogger<CosmosDBTargetScaler>());
}