Review logging
This commit is contained in:
parent
6a334352be
commit
76ebb55ab7
7 changed files with 71 additions and 39 deletions
|
|
@ -206,7 +206,7 @@ public sealed class KeaDhcpLeaseWatcher : IHostedService
|
|||
}
|
||||
else
|
||||
{
|
||||
await waitHandle.WaitOneAsync(stoppingToken).ConfigureAwait(continueOnCapturedContext: false);
|
||||
await waitHandle.WaitOneAsync(stoppingToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -72,39 +72,44 @@ public class PowerDnsHandler : ConnectionHandler
|
|||
continue;
|
||||
}
|
||||
|
||||
MethodBase method;
|
||||
try
|
||||
{
|
||||
using var jsonDocument = JsonDocument.Parse(json.WrittenMemory);
|
||||
var root = jsonDocument.RootElement;
|
||||
if (!root.TryGetProperty("method", out var methodElement))
|
||||
{
|
||||
_logger.LogWarning("Json Document missing required property method: {document}", jsonDocument);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Parse(methodElement, root.GetProperty("parameters")) is not { } methodLocal)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
method = methodLocal;
|
||||
}
|
||||
finally
|
||||
{
|
||||
json.Clear();
|
||||
state = default;
|
||||
}
|
||||
|
||||
Reply reply = BoolReply.False;
|
||||
try
|
||||
{
|
||||
MethodBase method;
|
||||
try
|
||||
{
|
||||
using var jsonDocument = JsonDocument.Parse(json.WrittenMemory);
|
||||
var root = jsonDocument.RootElement;
|
||||
if (!root.TryGetProperty("method", out var methodElement))
|
||||
{
|
||||
_logger.LogWarning("Json Document missing required property method: {document}", jsonDocument);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Parse(methodElement, root.GetProperty("parameters")) is not { } methodLocal)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
method = methodLocal;
|
||||
}
|
||||
finally
|
||||
{
|
||||
json.Clear();
|
||||
state = default;
|
||||
}
|
||||
|
||||
reply = await Handle(method, connection.ConnectionClosed).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception e) { }
|
||||
|
||||
await JsonSerializer.SerializeAsync(writer, reply, PowerDnsSerializerContext.Default.Reply, connection.ConnectionClosed)
|
||||
.ConfigureAwait(continueOnCapturedContext: false);
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Error");
|
||||
}
|
||||
finally
|
||||
{
|
||||
await JsonSerializer.SerializeAsync(writer, reply, PowerDnsSerializerContext.Default.Reply, connection.ConnectionClosed)
|
||||
.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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue