QueryLogsSqlite: updated queue timer interval to 10 sec to reduce the frequency of bulk insert. Updated bulk insert code to fix null ref errors. Fixed issue with loading last query page.

This commit is contained in:
Shreyas Zare
2021-09-25 13:39:06 +05:30
parent 4aead7e97e
commit b33a761ef4

View File

@@ -43,7 +43,7 @@ namespace QueryLogsSqlite
readonly ConcurrentQueue<LogEntry> _queuedLogs = new ConcurrentQueue<LogEntry>();
Timer _queueTimer;
const int QUEUE_TIMER_INTERVAL = 5000;
const int QUEUE_TIMER_INTERVAL = 10000;
const int BULK_INSERT_COUNT = 1000;
Timer _cleanupTimer;
@@ -56,7 +56,7 @@ namespace QueryLogsSqlite
public void Dispose()
{
_enableLogging = false;
_enableLogging = false; //turn off logging
if (_queueTimer is not null)
{
@@ -114,36 +114,43 @@ namespace QueryLogsSqlite
foreach (LogEntry log in logs)
{
DnsServerResponseType responseType;
paramClientIp.Value = log.RemoteEP.Address.ToString();
paramProtocol.Value = (int)log.Protocol;
if (log.Response.Tag == null)
responseType = DnsServerResponseType.Recursive;
paramResponseType.Value = (int)DnsServerResponseType.Recursive;
else
responseType = (DnsServerResponseType)log.Response.Tag;
paramResponseType.Value = (int)(DnsServerResponseType)log.Response.Tag;
DnsQuestionRecord query;
paramRcode.Value = (int)log.Response.RCODE;
if (log.Request.Question.Count > 0)
query = log.Request.Question[0];
else
query = null;
string answer = null;
if (log.Response is null)
{
answer = null;
DnsQuestionRecord query = log.Request.Question[0];
paramQname.Value = query.Name.ToLower();
paramQtype.Value = (int)query.Type;
paramQclass.Value = (int)query.Class;
}
else if (log.Response.Answer.Count == 0)
else
{
answer = "";
paramQname.Value = DBNull.Value;
paramQtype.Value = DBNull.Value;
paramQclass.Value = DBNull.Value;
}
if (log.Response.Answer.Count == 0)
{
paramAnswer.Value = DBNull.Value;
}
else if ((log.Response.Answer.Count > 2) && log.Response.IsZoneTransfer)
{
answer = "[ZONE TRANSFER]";
paramAnswer.Value = "[ZONE TRANSFER]";
}
else
{
string answer = null;
for (int i = 0; i < log.Response.Answer.Count; i++)
{
if (answer is null)
@@ -151,30 +158,9 @@ namespace QueryLogsSqlite
else
answer += ", " + log.Response.Answer[i].RDATA.ToString();
}
}
paramClientIp.Value = log.RemoteEP.Address.ToString();
paramProtocol.Value = (int)log.Protocol;
paramResponseType.Value = (int)responseType;
paramRcode.Value = (int)log.Response.RCODE;
if (query is null)
{
paramQname.Value = DBNull.Value;
paramQtype.Value = DBNull.Value;
paramQclass.Value = DBNull.Value;
}
else
{
paramQname.Value = query.Name.ToLower();
paramQtype.Value = (int)query.Type;
paramQclass.Value = (int)query.Class;
}
if (answer is null)
paramAnswer.Value = DBNull.Value;
else
paramAnswer.Value = answer;
}
command.ExecuteNonQuery();
}
@@ -403,6 +389,11 @@ CREATE TABLE IF NOT EXISTS dns_logs
public Task<DnsLogPage> QueryLogsAsync(long pageNumber, int entriesPerPage, bool descendingOrder, DateTime? start, DateTime? end, IPAddress clientIpAddress, DnsTransportProtocol? protocol, DnsServerResponseType? responseType, DnsResponseCode? rcode, string qname, DnsResourceRecordType? qtype, DnsClass? qclass)
{
if (pageNumber < 0)
pageNumber = long.MaxValue;
else if (pageNumber == 0)
pageNumber = 1;
if (qname is not null)
qname = qname.ToLower();