Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo/Trigger/CosmosDBMongoScalerProvider.cs (52 lines of code) (raw):

// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. using Microsoft.Azure.WebJobs.Host.Scale; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; namespace Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo { internal class CosmosDBMongoScalerProvider : IScaleMonitorProvider, ITargetScalerProvider { private readonly CosmosDBMongoScaleMonitor _scaleMonitor; private readonly CosmosDBMongoTargetScaler _targetScaler; public CosmosDBMongoScalerProvider(IServiceProvider serviceProvider, TriggerMetadata triggerMetadata) { CosmosDBMongoTriggerMetadata cosmosDBMongoTriggerMetadata = JsonConvert.DeserializeObject<CosmosDBMongoTriggerMetadata>(triggerMetadata.Metadata.ToString()); ILoggerFactory loggerFactory = serviceProvider.GetService<ILoggerFactory>(); _scaleMonitor = new CosmosDBMongoScaleMonitor( cosmosDBMongoTriggerMetadata.FunctionName, cosmosDBMongoTriggerMetadata.DatabaseName, cosmosDBMongoTriggerMetadata.CollectionName, loggerFactory, maxWorkPerInstance: cosmosDBMongoTriggerMetadata.MaxWorkPerInstance, minSampleCount: cosmosDBMongoTriggerMetadata.MinSampleCount); _targetScaler = new CosmosDBMongoTargetScaler( cosmosDBMongoTriggerMetadata.FunctionName, cosmosDBMongoTriggerMetadata.DatabaseName, cosmosDBMongoTriggerMetadata.CollectionName, loggerFactory, maxWorkPerInstance: cosmosDBMongoTriggerMetadata.MaxWorkPerInstance, maxWorkInstance: cosmosDBMongoTriggerMetadata.MaxInstanceCount); } public IScaleMonitor GetMonitor() { return _scaleMonitor; } public ITargetScaler GetTargetScaler() { return _targetScaler; } internal class CosmosDBMongoTriggerMetadata { [JsonProperty] public string FunctionName { get; set; } = string.Empty; [JsonProperty] public string DatabaseName { get; set; } = string.Empty; [JsonProperty] public string CollectionName { get; set; } = string.Empty; public int MaxWorkPerInstance { get; set; } = 1000; public int MaxInstanceCount { get; set; } = 3; public int MinSampleCount { get; set; } = 5; } } }