aboutsummaryrefslogtreecommitdiff
path: root/ResolverController.cpp
diff options
context:
space:
mode:
authorMike Yu <yumike@google.com>2022-08-09 11:00:22 +0000
committerMike Yu <yumike@google.com>2022-08-29 02:45:55 +0000
commit68951af264730fb1df5fab708893c7e298609edd (patch)
tree1719669fca3d0d68641676bd19f658d8c59c1312 /ResolverController.cpp
parent4eb7890167134ed1f33d188d3691a4289cd28df7 (diff)
Send metrics NetworkDnsServerSupportReported to statsd
The metrics are used to show the validation status of each private DNS, which can tell us a rough success validation rate and we might make more improvements based off that. The metrics are per-network and are filled when destroyNetworkCache() is called. To avoid adding the dependency stats_proto in resolv_integration_test, there are also some code changes in resolv_private_dns_test.cpp Bug: 241788170 Test: atest Test: m statsd_testdrive; run "statsd_testdrive 504" Change-Id: I5d79d6280e937ee298485cd85ae71e692fd7a0b8
Diffstat (limited to 'ResolverController.cpp')
-rw-r--r--ResolverController.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/ResolverController.cpp b/ResolverController.cpp
index 23dcc71c..694f68a1 100644
--- a/ResolverController.cpp
+++ b/ResolverController.cpp
@@ -25,6 +25,7 @@
#include <aidl/android/net/IDnsResolver.h>
#include <android-base/logging.h>
#include <android-base/strings.h>
+#include <statslog_resolv.h>
#include "Dns64Configuration.h"
#include "DnsResolver.h"
@@ -166,9 +167,17 @@ ResolverController::ResolverController()
void ResolverController::destroyNetworkCache(unsigned netId) {
LOG(VERBOSE) << __func__ << ": netId = " << netId;
+ // Report NetworkDnsServerSupportReported metrics before the cleanup.
+ auto& privateDnsConfiguration = PrivateDnsConfiguration::getInstance();
+ NetworkDnsServerSupportReported event = privateDnsConfiguration.getStatusForMetrics(netId);
+ const std::string str = event.servers().SerializeAsString();
+ stats::BytesField bytesField{str.c_str(), str.size()};
+ android::net::stats::stats_write(android::net::stats::NETWORK_DNS_SERVER_SUPPORT_REPORTED,
+ event.network_type(), event.private_dns_modes(), bytesField);
+
resolv_delete_cache_for_net(netId);
mDns64Configuration.stopPrefixDiscovery(netId);
- PrivateDnsConfiguration::getInstance().clear(netId);
+ privateDnsConfiguration.clear(netId);
// Don't get this instance in PrivateDnsConfiguration. It's probe to deadlock.
DnsTlsDispatcher::getInstance().forceCleanup(netId);
@@ -207,7 +216,8 @@ int ResolverController::setResolverConfiguration(const ResolverParamsParcel& res
// applies to UID 0, dns_mark is assigned for default network rathan the VPN. (note that it's
// possible that a VPN doesn't have any DNS servers but DoT servers in DNS strict mode)
auto& privateDnsConfiguration = PrivateDnsConfiguration::getInstance();
- int err = privateDnsConfiguration.set(resolverParams.netId, netcontext.app_mark, tlsServers,
+ int err = privateDnsConfiguration.set(resolverParams.netId, netcontext.app_mark,
+ resolverParams.servers, tlsServers,
resolverParams.tlsName, resolverParams.caCertificate);
if (err != 0) {