Skip to content

Commit 2004e78

Browse files
Added telemetry to indicate when ParameterBindingData is being used (#9028)
* Telemetry for parameter binding data
1 parent afafa87 commit 2004e78

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

src/WebJobs.Script.Grpc/Channel/GrpcWorkerChannel.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using Microsoft.Azure.WebJobs.Script.Description;
2222
using Microsoft.Azure.WebJobs.Script.Diagnostics;
2323
using Microsoft.Azure.WebJobs.Script.Eventing;
24+
using Microsoft.Azure.WebJobs.Script.Extensions;
2425
using Microsoft.Azure.WebJobs.Script.Grpc.Eventing;
2526
using Microsoft.Azure.WebJobs.Script.Grpc.Extensions;
2627
using Microsoft.Azure.WebJobs.Script.Grpc.Messages;
@@ -590,6 +591,11 @@ internal FunctionLoadRequest GetFunctionLoadRequest(FunctionMetadata metadata, M
590591
BindingInfo bindingInfo = binding.ToBindingInfo();
591592

592593
request.Metadata.Bindings.Add(binding.Name, bindingInfo);
594+
595+
if (binding.SupportsDeferredBinding() && !binding.SkipDeferredBinding())
596+
{
597+
_metricsLogger.LogEvent(MetricEventNames.FunctionBindingDeferred, functionName: metadata.Name);
598+
}
593599
}
594600

595601
foreach (var property in metadata.Properties)

src/WebJobs.Script/Diagnostics/MetricEventNames.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public static class MetricEventNames
5252
// function level events
5353
public const string FunctionInvokeLatency = "function.invoke.latency";
5454
public const string FunctionBindingTypeFormat = "function.binding.{0}";
55+
public const string FunctionBindingDeferred = "function.binding.deferred";
5556
public const string FunctionCompileLatencyByLanguageFormat = "function.compile.{0}.latency";
5657
public const string FunctionInvokeThrottled = "function.invoke.throttled";
5758
public const string FunctionUserLog = "function.userlog";

test/WebJobs.Script.Tests/Workers/Rpc/GrpcWorkerChannelTests.cs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,63 @@ public async Task SendLoadRequests_PublishesOutboundEvents()
555555
Assert.Equal(3, functionLoadLogs.Count()); // one WorkInitRequest, two FunctionLoadRequest
556556
}
557557

558+
[Fact]
559+
public async Task SendLoadRequests_SkipParameterBindingData()
560+
{
561+
await CreateDefaultWorkerChannel();
562+
_metricsLogger.ClearCollections();
563+
564+
var binding = new BindingMetadata()
565+
{
566+
Name = "abc",
567+
Type = "BlobTrigger"
568+
};
569+
570+
binding.Properties.Add(ScriptConstants.SkipDeferredBindingKey, true);
571+
binding.Properties.Add(ScriptConstants.SupportsDeferredBindingKey, true);
572+
573+
IEnumerable<FunctionMetadata> functionMetadata = GetTestFunctionsList("node");
574+
foreach (var function in functionMetadata)
575+
{
576+
function.Bindings.Add(binding);
577+
}
578+
579+
_workerChannel.SetupFunctionInvocationBuffers(functionMetadata);
580+
_workerChannel.SendFunctionLoadRequests(null, TimeSpan.FromMinutes(5));
581+
await Task.Delay(500);
582+
AreExpectedMetricsGenerated();
583+
Assert.Equal(0, _metricsLogger.LoggedEvents.Count(e => e.Contains(MetricEventNames.FunctionBindingDeferred)));
584+
}
585+
586+
[Fact]
587+
public async Task SendLoadRequests_SupportParameterBindingData()
588+
{
589+
await CreateDefaultWorkerChannel();
590+
_metricsLogger.ClearCollections();
591+
592+
var binding = new BindingMetadata()
593+
{
594+
Name = "abc",
595+
Type = "BlobTrigger"
596+
};
597+
598+
binding.Properties.Add(ScriptConstants.SupportsDeferredBindingKey, true);
599+
600+
IEnumerable<FunctionMetadata> functionMetadata = GetTestFunctionsList("node");
601+
foreach (var function in functionMetadata)
602+
{
603+
function.Bindings.Add(binding);
604+
}
605+
606+
_workerChannel.SetupFunctionInvocationBuffers(functionMetadata);
607+
_workerChannel.SendFunctionLoadRequests(null, TimeSpan.FromMinutes(5));
608+
await Task.Delay(500);
609+
AreExpectedMetricsGenerated();
610+
Assert.Equal(2, _metricsLogger.LoggedEvents.Count(e => e.Contains(MetricEventNames.FunctionBindingDeferred)));
611+
Assert.Equal(1, _metricsLogger.LoggedEvents.Count(e => e.Contains($"{MetricEventNames.FunctionBindingDeferred}_js1")));
612+
Assert.Equal(1, _metricsLogger.LoggedEvents.Count(e => e.Contains($"{MetricEventNames.FunctionBindingDeferred}_js2")));
613+
}
614+
558615
[Fact]
559616
public async Task SendLoadRequestCollection_PublishesOutboundEvents()
560617
{

0 commit comments

Comments
 (0)