Skip to content

Commit 9b5f477

Browse files
Adding exception handling in container metrics publisher (#5460)
1 parent a2a11fb commit 9b5f477

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/WebJobs.Script.WebHost/Metrics/LinuxContainerMetricsPublisher.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,17 @@ private async Task PublishActivity<T>(ConcurrentQueue<T> currentActivities, Bloc
229229

230230
internal async Task SendRequest<T>(ConcurrentQueue<T> activitiesToPublish, string publishPath)
231231
{
232-
var request = BuildRequest(HttpMethod.Post, publishPath, activitiesToPublish.ToArray());
233-
_logger.LogDebug($"Publishing {activitiesToPublish.Count()} activities to {publishPath}.");
234-
HttpResponseMessage response = await _httpClient.SendAsync(request);
235-
response.EnsureSuccessStatusCode();
232+
try
233+
{
234+
var request = BuildRequest(HttpMethod.Post, publishPath, activitiesToPublish.ToArray());
235+
236+
HttpResponseMessage response = await _httpClient.SendAsync(request);
237+
response.EnsureSuccessStatusCode();
238+
}
239+
catch (Exception ex)
240+
{
241+
_logger.LogError(ex, $"Failed to publish status to {publishPath}");
242+
}
236243
}
237244

238245
public void Initialize()

test/WebJobs.Script.Tests/Metrics/LinuxContainerMetricsPublisherTests.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public void PublishFunctionActivity_SendsRequestHeaders()
147147

148148
_metricsPublisher.OnFunctionMetricsPublishTimer(null);
149149
_metricsPublisher.OnFunctionMetricsPublishTimer(null);
150-
Assert.Matches("Publishing", _testLoggerProvider.GetAllLogMessages().Single().FormattedMessage);
150+
Assert.Empty(_testLoggerProvider.GetAllLogMessages());
151151
}
152152

153153
[Fact]
@@ -160,14 +160,17 @@ public void PublishMemoryActivity_SendsRequestHeaders()
160160

161161
_metricsPublisher.OnFunctionMetricsPublishTimer(null);
162162
_metricsPublisher.OnFunctionMetricsPublishTimer(null);
163-
Assert.Matches("Publishing", _testLoggerProvider.GetAllLogMessages().Single().FormattedMessage);
163+
Assert.Empty(_testLoggerProvider.GetAllLogMessages());
164164
}
165165

166166
[Fact]
167167
public void SendRequest_FailsWithNullQueue()
168168
{
169169
ConcurrentQueue<string> testQueue = null;
170-
Assert.Throws<NullReferenceException>(() => _metricsPublisher.SendRequest(testQueue, "testPath").GetAwaiter().GetResult());
170+
_metricsPublisher.SendRequest(testQueue, "testPath").GetAwaiter().GetResult();
171+
Assert.Matches("Failed to publish status to testPath", _testLoggerProvider.GetAllLogMessages().Single().FormattedMessage);
172+
Assert.Matches("NullReferenceException", _testLoggerProvider.GetAllLogMessages().Single().Exception.ToString());
173+
Assert.Equal(LogLevel.Error, _testLoggerProvider.GetAllLogMessages().Single().Level);
171174
}
172175

173176
[Fact]

0 commit comments

Comments
 (0)