Review logging

This commit is contained in:
Jöran Malek 2024-01-14 01:11:41 +01:00
parent 6a334352be
commit 76ebb55ab7
7 changed files with 71 additions and 39 deletions

View file

@ -206,7 +206,7 @@ public sealed class KeaDhcpLeaseWatcher : IHostedService
}
else
{
await waitHandle.WaitOneAsync(stoppingToken).ConfigureAwait(continueOnCapturedContext: false);
await waitHandle.WaitOneAsync(stoppingToken).ConfigureAwait(false);
}
}
}

View file

@ -49,6 +49,6 @@ public class KeaService : IHostedService
var waitTask = Task.WhenAll(tasks);
TaskCompletionSource taskCompletionSource = new();
using var registration = cancellationToken.Register(s => ((TaskCompletionSource)s!).SetCanceled(), taskCompletionSource);
await Task.WhenAny(waitTask, taskCompletionSource.Task).ConfigureAwait(continueOnCapturedContext: false);
await Task.WhenAny(waitTask, taskCompletionSource.Task).ConfigureAwait(false);
}
}

View file

@ -4,7 +4,7 @@ public interface IMethod;
public record MethodBase(string Method);
public abstract record Method<TParam>(string Method, TParam Parameters) : MethodBase(Method)
public record Method<TParam>(string Method, TParam Parameters) : MethodBase(Method)
where TParam : MethodParameters;
public record InitializeMethod(InitializeParameters Parameters) : Method<InitializeParameters>("initialize", Parameters), IMethod;

View file

@ -1,16 +1,43 @@
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace pdns_dhcp.PowerDns;
[JsonDerivedType(typeof(InitializeParameters))]
[JsonDerivedType(typeof(LookupParameters))]
public record class Parameters;
[JsonDerivedType(typeof(InitializeParameters))]
[JsonDerivedType(typeof(LookupParameters))]
public record class MethodParameters : Parameters
{
[JsonExtensionData]
public Dictionary<string, JsonElement> AdditionalProperties { get; set; } = [];
protected override bool PrintMembers(StringBuilder builder)
{
if (base.PrintMembers(builder))
{
builder.Append(", ");
}
builder.Append("AdditionalProperties = [");
bool append = false;
foreach (var kv in AdditionalProperties)
{
if (append)
{
builder.Append(", ");
}
append = true;
builder.Append(kv.Key);
builder.Append(" = ");
builder.Append(kv.Value);
}
builder.Append(']');
return true;
}
}
public record class InitializeParameters(

View file

@ -72,6 +72,9 @@ public class PowerDnsHandler : ConnectionHandler
continue;
}
Reply reply = BoolReply.False;
try
{
MethodBase method;
try
{
@ -96,15 +99,17 @@ public class PowerDnsHandler : ConnectionHandler
state = default;
}
Reply reply = BoolReply.False;
try
{
reply = await Handle(method, connection.ConnectionClosed).ConfigureAwait(false);
}
catch (Exception e) { }
catch (Exception e)
{
_logger.LogError(e, "Error");
}
finally
{
await JsonSerializer.SerializeAsync(writer, reply, PowerDnsSerializerContext.Default.Reply, connection.ConnectionClosed)
.ConfigureAwait(continueOnCapturedContext: false);
.ConfigureAwait(false);
}
}
input.AdvanceTo(read.Buffer.End);
@ -166,7 +171,7 @@ public class PowerDnsHandler : ConnectionHandler
return element.GetString() switch
{
null => null,
{ } methodName when !Converters.TryGetValue(methodName, out converter) => new MethodBase(methodName),
{ } methodName when !Converters.TryGetValue(methodName, out converter) => new Method<MethodParameters>(methodName, parameters.Deserialize(PowerDnsSerializerContext.Default.MethodParameters)!),
_ => converter(parameters)
};
}
@ -184,7 +189,7 @@ public class PowerDnsHandler : ConnectionHandler
static ValueTask<Reply> LogUnhandled(ILogger logger, MethodBase method)
{
logger.LogWarning("Unhandled Method {Method}", method);
logger.LogWarning("Unhandled {Method}", method);
return ValueTask.FromResult<Reply>(BoolReply.False);
}
}
@ -193,7 +198,7 @@ public class PowerDnsHandler : ConnectionHandler
{
if (_logger.IsEnabled(LogLevel.Information))
{
_logger.LogInformation("Handling Initialize {parameters}", parameters);
_logger.LogInformation("Handling {parameters}", parameters);
}
return ValueTask.FromResult<Reply>(BoolReply.True);
@ -217,7 +222,7 @@ public class PowerDnsHandler : ConnectionHandler
if (_logger.IsEnabled(LogLevel.Information))
{
_logger.LogInformation("Searching for {key} in {family}", parameters.Qname, parameters.Qtype);
_logger.LogInformation("Lookup {key} in {family}", parameters.Qname, parameters.Qtype);
}
return FindByName(((AddressFamily)qtype, parameters.Qname.AsMemory()), _repository, _logger);

View file

@ -3,7 +3,7 @@ using System.Text.Json.Serialization;
namespace pdns_dhcp.PowerDns;
[JsonSerializable(typeof(Reply))]
[JsonSerializable(typeof(Parameters))]
[JsonSerializable(typeof(MethodParameters))]
[JsonSourceGenerationOptions(
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
NumberHandling = JsonNumberHandling.AllowReadingFromString,

View file

@ -45,6 +45,6 @@ public class DhcpWatcher : IHostedService
var waitTask = Task.WhenAll(tasks);
TaskCompletionSource taskCompletionSource = new();
using var registration = cancellationToken.Register(s => ((TaskCompletionSource)s!).SetCanceled(), taskCompletionSource);
await Task.WhenAny(waitTask, taskCompletionSource.Task).ConfigureAwait(continueOnCapturedContext: false);
await Task.WhenAny(waitTask, taskCompletionSource.Task).ConfigureAwait(false);
}
}