From 9528e70f12a703a30bbf196c644a7fc85ef92a56 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Wed, 25 Mar 2020 09:11:22 +0000 Subject: [PATCH] Add one metrics field to record the cause of DNS query internal error The internal Error of DNS query have more than 100 reasons. Record each internal error reason for us to do further analysis. Bug: 150335075 Test: Manual test with statsd_testdrive Merged-In: I2214089ed7b350c2f4d9e86131c0568164192875 Change-Id: I861a9e137e2d0938191e36f1b2d85fe5d42a0520 (cherry picked from commit fc7f390cbf4f7b0330418ade8830aab145e5115c) --- .../stats/dnsresolver/dns_resolver.proto | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/core/proto/android/stats/dnsresolver/dns_resolver.proto b/core/proto/android/stats/dnsresolver/dns_resolver.proto index 9eaabfbca4636..76f8f0febf59e 100644 --- a/core/proto/android/stats/dnsresolver/dns_resolver.proto +++ b/core/proto/android/stats/dnsresolver/dns_resolver.proto @@ -43,6 +43,7 @@ enum ReturnCode { RC_EAI_BADHINTS = 12; RC_EAI_PROTOCOL = 13; RC_EAI_OVERFLOW = 14; + RC_RESOLV_INTERNAL_ERROR = 254; RC_RESOLV_TIMEOUT = 255; RC_EAI_MAX = 256; } @@ -189,6 +190,144 @@ enum CacheStatus{ CS_SKIP = 3; } +// The enum LinuxErrno is defined in the following 2 files. +// 1. bionic/libc/kernel/uapi/asm-generic/errno-base.h +// 2. bionic/libc/kernel/uapi/asm-generic/errno.h +enum LinuxErrno { + SYS_UNKNOWN = 0; + SYS_EPERM = 1; // Not super-user + SYS_ENOENT = 2; // No such file or directory + SYS_ESRCH = 3; // No such process + SYS_EINTR = 4; // Interrupted system call + SYS_EIO = 5; // I/O error + SYS_ENXIO = 6; // No such device or address + SYS_E2BIG = 7; // Arg list too long + SYS_ENOEXEC = 8; // Exec format error + SYS_EBADF = 9; // Bad file number + SYS_ECHILD = 10; // No children + SYS_EAGAIN = 11; // No more processes + SYS_ENOMEM = 12; // Not enough core + SYS_EACCES = 13; // Permission denied + SYS_EFAULT = 14; // Bad address + SYS_ENOTBLK = 15; // Block device required + SYS_EBUSY = 16; // Mount device busy + SYS_EEXIST = 17; // File exists + SYS_EXDEV = 18; // Cross-device link + SYS_ENODEV = 19; // No such device + SYS_ENOTDIR = 20; // Not a directory + SYS_EISDIR = 21; // Is a directory + SYS_EINVAL = 22; // Invalid argument + SYS_ENFILE = 23; // Too many open files in system + SYS_EMFILE = 24; // Too many open files + SYS_ENOTTY = 25; // Not a typewriter + SYS_ETXTBSY = 26; // Text file busy + SYS_EFBIG = 27; // File too large + SYS_ENOSPC = 28; // No space left on device + SYS_ESPIPE = 29; // Illegal seek + SYS_EROFS = 30; // Read only file system + SYS_EMLINK = 31; // Too many links + SYS_EPIPE = 32; // Broken pipe + SYS_EDOM = 33; // Math arg out of domain of func + SYS_ERANGE = 34; // Math result not representable + SYS_EDEADLOCK = 35; // File locking deadlock error + SYS_ENAMETOOLONG = 36; // File or path name too long + SYS_ENOLCK = 37; // No record locks available + SYS_ENOSYS = 38; // Function not implemented + SYS_ENOTEMPTY = 39; // Directory not empty + SYS_ELOOP = 40; // Too many symbolic links + SYS_ENOMSG = 42; // No message of desired type + SYS_EIDRM = 43; // Identifier removed + SYS_ECHRNG = 44; // Channel number out of range + SYS_EL2NSYNC = 45; // Level 2 not synchronized + SYS_EL3HLT = 46; // Level 3 halted + SYS_EL3RST = 47; // Level 3 reset + SYS_ELNRNG = 48; // Link number out of range + SYS_EUNATCH = 49; // rotocol driver not attached + SYS_ENOCSI = 50; // No CSI structure available + SYS_EL2HLT = 51; // Level 2 halted + SYS_EBADE = 52; // Invalid exchange + SYS_EBADR = 53; // Invalid request descriptor + SYS_EXFULL = 54; // Exchange full + SYS_ENOANO = 55; // No anode + SYS_EBADRQC = 56; // Invalid request code + SYS_EBADSLT = 57; // Invalid slot + SYS_EBFONT = 59; // Bad font file fmt + SYS_ENOSTR = 60; // Device not a stream + SYS_ENODATA = 61; // No data (for no delay io) + SYS_ETIME = 62; // Timer expired + SYS_ENOSR = 63; // Out of streams resources + SYS_ENONET = 64; // Machine is not on the network + SYS_ENOPKG = 65; // Package not installed + SYS_EREMOTE = 66; // The object is remote + SYS_ENOLINK = 67; // The link has been severed + SYS_EADV = 68; // Advertise error + SYS_ESRMNT = 69; // Srmount error + SYS_ECOMM = 70; // Communication error on send + SYS_EPROTO = 71; // Protocol error + SYS_EMULTIHOP = 72; // Multihop attempted + SYS_EDOTDOT = 73; // Cross mount point (not really error) + SYS_EBADMSG = 74; // Trying to read unreadable message + SYS_EOVERFLOW = 75; // Value too large for defined data type + SYS_ENOTUNIQ = 76; // Given log. name not unique + SYS_EBADFD = 77; // f.d. invalid for this operation + SYS_EREMCHG = 78; // Remote address changed + SYS_ELIBACC = 79; // Can't access a needed shared lib + SYS_ELIBBAD = 80; // Accessing a corrupted shared lib + SYS_ELIBSCN = 81; // .lib section in a.out corrupted + SYS_ELIBMAX = 82; // Attempting to link in too many libs + SYS_ELIBEXEC = 83; // Attempting to exec a shared library + SYS_EILSEQ = 84; + SYS_ERESTART = 85; + SYS_ESTRPIPE = 86; + SYS_EUSERS = 87; + SYS_ENOTSOCK = 88; // Socket operation on non-socket + SYS_EDESTADDRREQ = 89; // Destination address required + SYS_EMSGSIZE = 90; // Message too long + SYS_EPROTOTYPE = 91; // Protocol wrong type for socket + SYS_ENOPROTOOPT = 92; // Protocol not available + SYS_EPROTONOSUPPORT = 93; // Unknown protocol + SYS_ESOCKTNOSUPPORT = 94; // Socket type not supported + SYS_EOPNOTSUPP = 95; // Operation not supported on transport endpoint + SYS_EPFNOSUPPORT = 96; // Protocol family not supported + SYS_EAFNOSUPPORT = 97; // Address family not supported by protocol family + SYS_EADDRINUSE = 98; // Address already in use + SYS_EADDRNOTAVAIL = 99; // Address not available + SYS_ENETDOWN = 100; // Network interface is not configured + SYS_ENETUNREACH = 101; // Network is unreachable + SYS_ENETRESET = 102; + SYS_ECONNABORTED = 103; // Connection aborted + SYS_ECONNRESET = 104; // Connection reset by peer + SYS_ENOBUFS = 105; // No buffer space available + SYS_EISCONN = 106; // Socket is already connected + SYS_ENOTCONN = 107; // Socket is not connected + SYS_ESHUTDOWN = 108; // Can't send after socket shutdown + SYS_ETOOMANYREFS = 109; + SYS_ETIMEDOUT = 110; // Connection timed out + SYS_ECONNREFUSED = 111; // Connection refused + SYS_EHOSTDOWN = 112; // Host is down + SYS_EHOSTUNREACH = 113; // Host is unreachable + SYS_EALREADY = 114; // Socket already connected + SYS_EINPROGRESS = 115; // Connection already in progress + SYS_ESTALE = 116; + SYS_EUCLEAN = 117; + SYS_ENOTNAM = 118; + SYS_ENAVAIL = 119; + SYS_EISNAM = 120; + SYS_EREMOTEIO = 121; + SYS_EDQUOT = 122; + SYS_ENOMEDIUM = 123; // No medium (in tape drive) + SYS_EMEDIUMTYPE = 124; + SYS_ECANCELED = 125; + SYS_ENOKEY = 126; + SYS_EKEYEXPIRED = 127; + SYS_EKEYREVOKED = 128; + SYS_EKEYREJECTED = 129; + SYS_EOWNERDEAD = 130; + SYS_ENOTRECOVERABLE = 131; + SYS_ERFKILL = 132; + SYS_EHWPOISON = 133; +} + message DnsQueryEvent { optional android.stats.dnsresolver.NsRcode rcode = 1; @@ -210,6 +349,8 @@ message DnsQueryEvent { optional bool connected = 8; optional int32 latency_micros = 9; + + optional android.stats.dnsresolver.LinuxErrno linux_errno = 10; } message DnsQueryEvents {