Log retrycount and properly log request headers (#15390)

This commit is contained in:
Nikolaj Geisle
2023-12-07 12:10:19 +01:00
committed by GitHub
parent 1a93dae0c4
commit 0534c5f776

View File

@@ -1,6 +1,6 @@
using System.Net;
using System.Text;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Webhooks;
namespace Umbraco.Cms.Core.Services;
@@ -15,20 +15,38 @@ public class WebhookLogFactory : IWebhookLogFactory
Key = Guid.NewGuid(),
Url = webhook.Url,
WebhookKey = webhook.Key,
RetryCount = responseModel.RetryCount,
};
if (responseModel.HttpResponseMessage is not null)
{
log.RequestBody = await responseModel.HttpResponseMessage!.RequestMessage!.Content!.ReadAsStringAsync(cancellationToken);
if (responseModel.HttpResponseMessage.RequestMessage?.Content is not null)
{
log.RequestBody = await responseModel.HttpResponseMessage.RequestMessage.Content.ReadAsStringAsync(cancellationToken);
log.RequestHeaders = CalculateHeaders(responseModel.HttpResponseMessage);
}
log.ResponseBody = await responseModel.HttpResponseMessage.Content.ReadAsStringAsync(cancellationToken);
log.StatusCode = MapStatusCodeToMessage(responseModel.HttpResponseMessage.StatusCode);
log.RetryCount = responseModel.RetryCount;
log.ResponseHeaders = responseModel.HttpResponseMessage.Headers.ToString();
log.RequestHeaders = responseModel.HttpResponseMessage.RequestMessage.Headers.ToString();
log.StatusCode = MapStatusCodeToMessage(responseModel.HttpResponseMessage.StatusCode);
}
return log;
}
private string MapStatusCodeToMessage(HttpStatusCode statusCode) => $"{statusCode.ToString()} ({(int)statusCode})";
private string CalculateHeaders(HttpResponseMessage responseMessage)
{
IEnumerable<KeyValuePair<string, IEnumerable<string>>> headers = responseMessage.RequestMessage!.Headers.Concat(responseMessage.RequestMessage.Content!.Headers);
var result = new StringBuilder();
foreach (KeyValuePair<string, IEnumerable<string>> header in headers)
{
result.AppendLine($"{header.Key}: {string.Join(", ", header.Value)}\n");
}
return result.ToString();
}
}