QueryLogsSqlite: updated app to log response rtt value.

This commit is contained in:
Shreyas Zare
2024-12-21 15:25:21 +05:30
parent c873a5c4a9
commit 9f880ce4fb

View File

@@ -186,12 +186,13 @@ namespace QueryLogsSqlite
{
await using (SqliteCommand command = connection.CreateCommand())
{
command.CommandText = "INSERT INTO dns_logs (timestamp, client_ip, protocol, response_type, rcode, qname, qtype, qclass, answer) VALUES (@timestamp, @client_ip, @protocol, @response_type, @rcode, @qname, @qtype, @qclass, @answer);";
command.CommandText = "INSERT INTO dns_logs (timestamp, client_ip, protocol, response_type, response_rtt, rcode, qname, qtype, qclass, answer) VALUES (@timestamp, @client_ip, @protocol, @response_type, @response_rtt, @rcode, @qname, @qtype, @qclass, @answer);";
SqliteParameter paramTimestamp = command.Parameters.Add("@timestamp", SqliteType.Text);
SqliteParameter paramClientIp = command.Parameters.Add("@client_ip", SqliteType.Text);
SqliteParameter paramProtocol = command.Parameters.Add("@protocol", SqliteType.Integer);
SqliteParameter paramResponseType = command.Parameters.Add("@response_type", SqliteType.Integer);
SqliteParameter paramResponseRtt = command.Parameters.Add("@response_rtt", SqliteType.Real);
SqliteParameter paramRcode = command.Parameters.Add("@rcode", SqliteType.Integer);
SqliteParameter paramQname = command.Parameters.Add("@qname", SqliteType.Text);
SqliteParameter paramQtype = command.Parameters.Add("@qtype", SqliteType.Integer);
@@ -204,10 +205,19 @@ namespace QueryLogsSqlite
paramClientIp.Value = log.RemoteEP.Address.ToString();
paramProtocol.Value = (int)log.Protocol;
DnsServerResponseType responseType;
if (log.Response.Tag == null)
paramResponseType.Value = (int)DnsServerResponseType.Recursive;
responseType = DnsServerResponseType.Recursive;
else
paramResponseType.Value = (int)(DnsServerResponseType)log.Response.Tag;
responseType = (DnsServerResponseType)log.Response.Tag;
paramResponseType.Value = (int)responseType;
if ((responseType == DnsServerResponseType.Recursive) && (log.Response.Metadata is not null))
paramResponseRtt.Value = log.Response.Metadata.RoundTripTime;
else
paramResponseRtt.Value = DBNull.Value;
paramRcode.Value = (int)log.Response.RCODE;
@@ -238,12 +248,12 @@ namespace QueryLogsSqlite
{
string answer = null;
for (int i = 0; i < log.Response.Answer.Count; i++)
foreach (DnsResourceRecord record in log.Response.Answer)
{
if (answer is null)
answer = log.Response.Answer[i].RDATA.ToString();
answer = record.Type.ToString() + " " + record.RDATA.ToString();
else
answer += ", " + log.Response.Answer[i].RDATA.ToString();
answer += ", " + record.Type.ToString() + " " + record.RDATA.ToString();
}
paramAnswer.Value = answer;
@@ -331,6 +341,7 @@ CREATE TABLE IF NOT EXISTS dns_logs
client_ip VARCHAR(39) NOT NULL,
protocol TINYINT NOT NULL,
response_type TINYINT NOT NULL,
response_rtt REAL,
rcode TINYINT NOT NULL,
qname VARCHAR(255),
qtype SMALLINT,
@@ -341,6 +352,17 @@ CREATE TABLE IF NOT EXISTS dns_logs
await command.ExecuteNonQueryAsync();
}
try
{
await using (SqliteCommand command = connection.CreateCommand())
{
command.CommandText = "ALTER TABLE dns_logs ADD COLUMN response_rtt REAL;";
await command.ExecuteNonQueryAsync();
}
}
catch
{ }
await using (SqliteCommand command = connection.CreateCommand())
{
command.CommandText = "CREATE INDEX IF NOT EXISTS index_timestamp ON dns_logs (timestamp);";
@@ -570,6 +592,7 @@ SELECT * FROM (
client_ip,
protocol,
response_type,
response_rtt,
rcode,
qname,
qtype,
@@ -617,21 +640,28 @@ ORDER BY row_num" + (descendingOrder ? " DESC" : "");
{
while (await reader.ReadAsync())
{
double? responseRtt;
if (reader.IsDBNull(5))
responseRtt = null;
else
responseRtt = reader.GetDouble(5);
DnsQuestionRecord question;
if (reader.IsDBNull(6))
if (reader.IsDBNull(7))
question = null;
else
question = new DnsQuestionRecord(reader.GetString(6), (DnsResourceRecordType)reader.GetInt32(7), (DnsClass)reader.GetInt32(8), false);
question = new DnsQuestionRecord(reader.GetString(7), (DnsResourceRecordType)reader.GetInt32(8), (DnsClass)reader.GetInt32(9), false);
string answer;
if (reader.IsDBNull(9))
if (reader.IsDBNull(10))
answer = null;
else
answer = reader.GetString(9);
answer = reader.GetString(10);
entries.Add(new DnsLogEntry(reader.GetInt64(0), reader.GetDateTime(1), IPAddress.Parse(reader.GetString(2)), (DnsTransportProtocol)reader.GetByte(3), (DnsServerResponseType)reader.GetByte(4), (DnsResponseCode)reader.GetByte(5), question, answer));
entries.Add(new DnsLogEntry(reader.GetInt64(0), reader.GetDateTime(1), IPAddress.Parse(reader.GetString(2)), (DnsTransportProtocol)reader.GetByte(3), (DnsServerResponseType)reader.GetByte(4), responseRtt, (DnsResponseCode)reader.GetByte(6), question, answer));
}
}
}