1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty5.resolver.dns;
17
18 import io.netty5.handler.codec.dns.DnsQuestion;
19 import io.netty5.handler.codec.dns.DnsResponseCode;
20 import io.netty5.util.concurrent.Future;
21 import io.netty5.util.internal.logging.InternalLogLevel;
22 import io.netty5.util.internal.logging.InternalLogger;
23
24 import java.net.InetSocketAddress;
25 import java.util.List;
26
27 import static java.util.Objects.requireNonNull;
28
29 final class LoggingDnsQueryLifecycleObserver implements DnsQueryLifecycleObserver {
30 private final InternalLogger logger;
31 private final InternalLogLevel level;
32 private final DnsQuestion question;
33 private InetSocketAddress dnsServerAddress;
34
35 LoggingDnsQueryLifecycleObserver(DnsQuestion question, InternalLogger logger, InternalLogLevel level) {
36 this.question = requireNonNull(question, "question");
37 this.logger = requireNonNull(logger, "logger");
38 this.level = requireNonNull(level, "level");
39 }
40
41 @Override
42 public void queryWritten(InetSocketAddress dnsServerAddress, Future<Void> future) {
43 this.dnsServerAddress = dnsServerAddress;
44 }
45
46 @Override
47 public void queryCancelled(int queriesRemaining) {
48 if (dnsServerAddress != null) {
49 logger.log(level, "from {} : {} cancelled with {} queries remaining", dnsServerAddress, question,
50 queriesRemaining);
51 } else {
52 logger.log(level, "{} query never written and cancelled with {} queries remaining", question,
53 queriesRemaining);
54 }
55 }
56
57 @Override
58 public DnsQueryLifecycleObserver queryRedirected(List<InetSocketAddress> nameServers) {
59 logger.log(level, "from {} : {} redirected", dnsServerAddress, question);
60 return this;
61 }
62
63 @Override
64 public DnsQueryLifecycleObserver queryCNAMEd(DnsQuestion cnameQuestion) {
65 logger.log(level, "from {} : {} CNAME question {}", dnsServerAddress, question, cnameQuestion);
66 return this;
67 }
68
69 @Override
70 public DnsQueryLifecycleObserver queryNoAnswer(DnsResponseCode code) {
71 logger.log(level, "from {} : {} no answer {}", dnsServerAddress, question, code);
72 return this;
73 }
74
75 @Override
76 public void queryFailed(Throwable cause) {
77 if (dnsServerAddress != null) {
78 logger.log(level, "from {} : {} failure", dnsServerAddress, question, cause);
79 } else {
80 logger.log(level, "{} query never written and failed", question, cause);
81 }
82 }
83
84 @Override
85 public void querySucceed() {
86 }
87 }