Fixed request timing miscalculation & format. Only sends request through
UDP socket when cache warming is active. Only logs request timings when
DNS timing log is active.
Change-Id: Ie41c209c1b82c7539e0f5cda625de3951bc24153
diff --git a/src/forward.c b/src/forward.c
index e19b513..8004340 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -540,7 +540,7 @@
if (time64 >= 0)
{
- int64_t milliseconds = time64/1000000;
+ double milliseconds = ((double)time64)/1000000;
int bucket = TIMING_BUCKET_ZEROES;
if (milliseconds < 2) bucket = TIMING_BUCKET_1_MILLIS;
else if (milliseconds < 5) bucket = TIMING_BUCKET_2_MILLIS;
@@ -551,8 +551,18 @@
else bucket = TIMING_BUCKET_500_MILLIS;
daemon->forward_timings[bucket]++;
- prettyprint_addr(&server->addr, daemon->namebuff);
- my_syslog(LOG_INFO, _("upstream server %s handled request in %" PRId64 " ms"), daemon->namebuff, milliseconds);
+ int DNS_timing_log_active = 0;
+ FILE *fp = fopen("/config/experiments/DNSTimingLog.active", "r");
+ if (fp != NULL)
+ {
+ DNS_timing_log_active = 1;
+ fclose(fp);
+ }
+ if (DNS_timing_log_active)
+ {
+ prettyprint_addr(&server->addr, daemon->namebuff);
+ my_syslog(LOG_INFO, _("upstream server %s handled request in %.2f ms"), daemon->namebuff, milliseconds);
+ }
}
#ifdef HAVE_IPSET
@@ -1308,7 +1318,14 @@
log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&source_addr.in6.sin6_addr, types);
#endif
- if (strcmp("127.0.0.1", daemon->addrbuff) != 0)
+ int cache_warming_active = 0;
+ FILE *fp = fopen("/config/experiments/CacheWarming.active", "r");
+ if (fp != NULL)
+ {
+ cache_warming_active = 1;
+ fclose(fp);
+ }
+ if (strcmp("127.0.0.1", daemon->addrbuff) != 0 && cache_warming_active)
{
int sock;
if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
@@ -1319,7 +1336,7 @@
char msg[128];
sprintf(msg, "%lu %s", now, daemon->namebuff);
if (sendto(sock, msg, strlen(msg), 0, (struct sockaddr *)&server_address,
- sizeof(server_address)) < 0)
+ sizeof(server_address)) < 0)
{
my_syslog(LOG_ERR, "failed to send message on socket: %s", strerror(errno));
}
@@ -1371,8 +1388,18 @@
(char *)header, m, &source_addr, &dst_addr, if_index);
daemon->local_answer++;
- float milliseconds = ((float)(dnsmasq_time64() - now64))/100000;
- my_syslog(LOG_INFO, _("handled request by cache response in %.2f ms"), milliseconds);
+ int DNS_timing_log_active = 0;
+ FILE *fp = fopen("/config/experiments/DNSTimingLog.active", "r");
+ if (fp != NULL)
+ {
+ DNS_timing_log_active = 1;
+ fclose(fp);
+ }
+ if (DNS_timing_log_active)
+ {
+ double milliseconds = ((double)(dnsmasq_time64() - now64))/1000000;
+ my_syslog(LOG_INFO, _("cache response handled request in %.2f ms"), milliseconds);
+ }
}
else if (forward_query(listen->fd, &source_addr, &dst_addr, if_index,
header, (size_t)n, now, NULL, ad_reqd, do_bit))