Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,16 +16,19 @@ namespace Microsoft.Azure.WebJobs.Extensions.Storage.Common.Listeners
/// </summary>
internal class QueueMetricsProvider
{
private readonly string _functionId;
private readonly QueueClient _queue;
private readonly ILogger _logger;

/// <summary>
/// Instantiates a QueueMetricsProvider.
/// </summary>
/// <param name="functionId">The function id to make scale decisions for.</param>
/// <param name="queue">The QueueClient to use for metrics polling.</param>
/// <param name="loggerFactory">Used to create an ILogger instance.</param>
public QueueMetricsProvider(QueueClient queue, ILoggerFactory loggerFactory)
public QueueMetricsProvider(string functionId, QueueClient queue, ILoggerFactory loggerFactory)
{
_functionId = functionId;
_queue = queue;
_logger = loggerFactory.CreateLogger<QueueMetricsProvider>();
}
Expand All @@ -49,12 +53,12 @@ public async Task<int> 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;
Expand Down Expand Up @@ -101,12 +105,12 @@ public async Task<QueueTriggerMetrics> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public QueueScaleMonitor(string functionId, QueueClient queue, ILoggerFactory lo
_queue = queue;
_logger = loggerFactory.CreateLogger<QueueListener>();
_scaleMonitorDescriptor = new ScaleMonitorDescriptor($"{functionId}-QueueTrigger-{_queue.Name}".ToLower(CultureInfo.InvariantCulture), functionId);
_queueMetricsProvider = new QueueMetricsProvider(queue, loggerFactory);
_queueMetricsProvider = new QueueMetricsProvider(functionId, queue, loggerFactory);
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<QueueTargetScaler>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

### Other Changes

- Replaced scaling warning/error log calls with standardized `LogFunctionScaleWarning` extension method to enable Scale Controller App Insights diagnostics.

## 5.3.8 (2026-03-19)

### Bugs Fixed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public void SetUp()
_loggerFactory.AddProvider(_loggerProvider);
_mockQueue = new Mock<QueueClient>(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("testFunctionId", _mockQueue.Object, _loggerFactory);
}

[OneTimeSetUp]
Expand All @@ -54,7 +54,7 @@ public void OneTimeTearDown()
[Test]
public async Task GetMetrics_ReturnsExpectedResult()
{
QueueMetricsProvider _provider = new QueueMetricsProvider(Fixture.Queue, _loggerFactory);
QueueMetricsProvider _provider = new QueueMetricsProvider("testFunctionId", Fixture.Queue, _loggerFactory);
var metrics = await _provider.GetMetricsAsync();

Assert.AreEqual(0, metrics.QueueLength);
Expand Down