diff options
| author | Mike Yu <yumike@google.com> | 2022-08-09 11:00:22 +0000 |
|---|---|---|
| committer | Mike Yu <yumike@google.com> | 2022-08-29 02:45:55 +0000 |
| commit | 68951af264730fb1df5fab708893c7e298609edd (patch) | |
| tree | 1719669fca3d0d68641676bd19f658d8c59c1312 /ResolverController.cpp | |
| parent | 4eb7890167134ed1f33d188d3691a4289cd28df7 (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.cpp | 14 |
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) { |
