Skip to content

Commit

Permalink
Adds reverse lookups to stats server
Browse files Browse the repository at this point in the history
  • Loading branch information
alanedwardes committed Aug 14, 2023
1 parent 5a8c63c commit 7fc5d04
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 15 deletions.
38 changes: 24 additions & 14 deletions misc/Ae.Dns.Console/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ async Task GroupToTable(IEnumerable<IGrouping<string, DnsQuery>> groups, params
if (context.Request.Path == "/")
{
var dnsClient = context.RequestServices.GetRequiredService<IDnsClient>();
context.Response.StatusCode = StatusCodes.Status200OK;
context.Response.ContentType = "text/html; charset=utf-8";
Expand Down Expand Up @@ -214,6 +216,12 @@ string CreateQueryStringWithout(string name)
var filteredQueries = query.ToArray();
var reverseLookups = (await Task.WhenAll(filteredQueries.Where(x => x.Sender != null).Select(x => x.Sender).Distinct().Select(async x =>
{
var answer = await dnsClient.Query(DnsQueryFactory.CreateReverseQuery(x));
return (x, answer.Answers.FirstOrDefault()?.Resource.ToString());
}))).ToDictionary(x => x.x, x => x.Item2);
await context.Response.WriteAsync($"<h1>Metrics Server</h1>");
await context.Response.WriteAsync($"<p>Earliest tracked query was {filteredQueries.Select(x => x.Created).LastOrDefault()} (current time is {DateTime.UtcNow}).</p>");
await context.Response.WriteAsync($"<p>There are {resolverCache.Count()} <a href=\"/cache\">cache entries</a>. {filteredQueries.Count(x => x.Answer == null)} queries were not answered.</p>");
Expand All @@ -231,7 +239,7 @@ string CreateQueryStringWithout(string name)
string SenderFilter(DnsQuery dnsQuery)
{
return $"<a href=\"{CreateQueryString("sender", dnsQuery.Sender)}\">{dnsQuery.Sender}</a>";
return $"<a href=\"{CreateQueryString("sender", dnsQuery.Sender)}\">{reverseLookups[dnsQuery.Sender] ?? dnsQuery.Sender.ToString()}</a>";
}
string ResponseFilter(DnsQuery dnsQuery)
Expand Down Expand Up @@ -356,20 +364,22 @@ static TObject GetObjectFromTags<TObject>(ReadOnlySpan<KeyValuePair<string, obje
var query = GetObjectFromTags<DnsMessage>(tags, "Query");
var answer = GetObjectFromTags<DnsMessage>(tags, "Answer");
var elapsed = GetObjectFromTags<TimeSpan?>(tags, "Elapsed");
var sender = query.Header.Tags.TryGetValue("Sender", out var rawEndpoint) && rawEndpoint is IPEndPoint endpoint ? endpoint : throw new Exception();

_queries.Enqueue(new DnsQuery
var sender = query.Header.Tags.TryGetValue("Sender", out var rawEndpoint) && rawEndpoint is not null && rawEndpoint is IPEndPoint endpoint ? endpoint.Address : null;
if (sender != null)
{
Query = new DnsHeaderLight(query.Header),
Answer = new DnsHeaderLight(answer?.Header),
Sender = sender.Address,
Elapsed = elapsed,
Created = DateTime.UtcNow
});

if (_queries.Count > 100_000)
{
_queries.TryDequeue(out DnsQuery _);
_queries.Enqueue(new DnsQuery
{
Query = new DnsHeaderLight(query.Header),
Answer = new DnsHeaderLight(answer?.Header),
Sender = sender,
Elapsed = elapsed,
Created = DateTime.UtcNow
});

if (_queries.Count > 100_000)
{
_queries.TryDequeue(out DnsQuery _);
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Client/Lookup/DnsStaticLookupClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ private DnsMessage ReturnPointer(DnsMessage query, IEnumerable<string> foundHost
{
Class = DnsQueryClass.IN,
Host = query.Header.Host,
Resource = new DnsTextResource { Entries = foundHost.Split('.') },
Resource = new DnsDomainResource { Entries = foundHost.Split('.') },
Type = DnsQueryType.PTR,
TimeToLive = 3600
}).ToList()
Expand Down

0 comments on commit 7fc5d04

Please sign in to comment.