diff --git a/NuGet.Config b/NuGet.Config
index c679a5601f0e..556c1989896a 100644
--- a/NuGet.Config
+++ b/NuGet.Config
@@ -4,6 +4,7 @@
+
diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props
index cd799d626eec..d22caf329547 100644
--- a/eng/Packages.Data.props
+++ b/eng/Packages.Data.props
@@ -249,8 +249,8 @@
-
-
+
+
diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs
index bd0b4ead1136..4ef1d5b07664 100644
--- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs
+++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs
@@ -6,6 +6,7 @@
using Azure;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
+using Microsoft.Azure.WebJobs.Host.Scale;
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.WebJobs.Extensions.Storage.Common.Listeners
@@ -15,16 +16,19 @@ namespace Microsoft.Azure.WebJobs.Extensions.Storage.Common.Listeners
///
internal class QueueMetricsProvider
{
+ private readonly string _functionId;
private readonly QueueClient _queue;
private readonly ILogger _logger;
///
/// Instantiates a QueueMetricsProvider.
///
+ /// The function id to make scale decisions for.
/// The QueueClient to use for metrics polling.
/// Used to create an ILogger instance.
- public QueueMetricsProvider(QueueClient queue, ILoggerFactory loggerFactory)
+ public QueueMetricsProvider(string functionId, QueueClient queue, ILoggerFactory loggerFactory)
{
+ _functionId = functionId;
_queue = queue;
_logger = loggerFactory.CreateLogger();
}
@@ -49,12 +53,12 @@ public async Task GetQueueLengthAsync()
// ignore transient errors, and return default metrics
// E.g. if the queue doesn't exist, we'll return a zero queue length
// and scale in
- _logger.LogWarning($"Error querying for queue scale status: {ex.ToString()}");
+ _logger.LogFunctionScaleWarning("Error querying for queue scale status", _functionId, ex);
}
}
catch (Exception ex)
{
- _logger.LogWarning($"Fatal error querying for queue scale status: {ex.ToString()}");
+ _logger.LogFunctionScaleWarning("Fatal error querying for queue scale status", _functionId, ex);
}
return 0;
@@ -101,12 +105,13 @@ public async Task GetMetricsAsync()
// ignore transient errors, and return default metrics
// E.g. if the queue doesn't exist, we'll return a zero queue length
// and scale in
- _logger.LogWarning($"Error querying for queue scale status: {ex.ToString()}");
+
+ _logger.LogFunctionScaleWarning("Error querying for queue scale status", _functionId, ex);
}
}
catch (Exception ex)
{
- _logger.LogWarning($"Fatal error querying for queue scale status: {ex.ToString()}");
+ _logger.LogFunctionScaleWarning("Fatal error querying for queue scale status", _functionId, ex);
}
return new QueueTriggerMetrics
diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs
index 813256a1d78b..fcf64becd091 100644
--- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs
+++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs
@@ -41,7 +41,7 @@ public QueueScaleMonitor(string functionId, QueueClient queue, ILoggerFactory lo
_queue = queue;
_logger = loggerFactory.CreateLogger();
_scaleMonitorDescriptor = new ScaleMonitorDescriptor($"{functionId}-QueueTrigger-{_queue.Name}".ToLower(CultureInfo.InvariantCulture), functionId);
- _queueMetricsProvider = new QueueMetricsProvider(queue, loggerFactory);
+ _queueMetricsProvider = new QueueMetricsProvider(functionId, queue, loggerFactory);
}
///
diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs
index d89c8fab535a..df86db2b614b 100644
--- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs
+++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs
@@ -36,7 +36,7 @@ internal QueueTargetScaler(string functionId, QueueClient queueClient, QueuesOpt
{
_functionId = functionId;
_queueName = queueClient.Name;
- _queueMetricsProvider = new QueueMetricsProvider(queueClient, loggerFactory);
+ _queueMetricsProvider = new QueueMetricsProvider(_functionId, queueClient, loggerFactory);
_targetScalerDescriptor = new TargetScalerDescriptor(functionId);
_options = options;
_logger = loggerFactory.CreateLogger();
@@ -64,7 +64,8 @@ internal TargetScalerResult GetScaleResultInternal(TargetScalerContext context,
int targetWorkerCount = (int)Math.Ceiling(queueLength / (decimal)concurrency);
- _logger.LogInformation($"Target worker count for function '{_functionId}' is '{targetWorkerCount}' (QueueName='{_queueName}', QueueLength ='{queueLength}', Concurrency='{concurrency}').");
+ string details = $"Target worker count for function '{_functionId}' is '{targetWorkerCount}' (QueueName='{_queueName}', QueueLength ='{queueLength}', Concurrency='{concurrency}').";
+ _logger.LogFunctionScaleVote(_functionId, targetWorkerCount, queueLength, concurrency, details);
return new TargetScalerResult
{
TargetWorkerCount = targetWorkerCount
diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs
index 1dfbf0aa1c17..1cc80f596d68 100644
--- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs
+++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs
@@ -34,7 +34,7 @@ public void SetUp()
_loggerFactory.AddProvider(_loggerProvider);
_mockQueue = new Mock(new Uri("https://test.queue.core.windows.net/testqueue"), new QueueClientOptions());
_mockQueue.Setup(x => x.Name).Returns("testqueue");
- _metricsProvider = new QueueMetricsProvider(_mockQueue.Object, _loggerFactory);
+ _metricsProvider = new QueueMetricsProvider("testfunction", _mockQueue.Object, _loggerFactory);
}
[OneTimeSetUp]
@@ -54,7 +54,7 @@ public void OneTimeTearDown()
[Test]
public async Task GetMetrics_ReturnsExpectedResult()
{
- QueueMetricsProvider _provider = new QueueMetricsProvider(Fixture.Queue, _loggerFactory);
+ QueueMetricsProvider _provider = new QueueMetricsProvider("testfunction", Fixture.Queue, _loggerFactory);
var metrics = await _provider.GetMetricsAsync();
Assert.AreEqual(0, metrics.QueueLength);