{ "udp-noport-errors", MetricDefinition(PrometheusMetricType::counter, "From /proc/net/snmp NoPorts") },
{ "udp-recvbuf-errors", MetricDefinition(PrometheusMetricType::counter, "From /proc/net/snmp RcvbufErrors") },
{ "udp-sndbuf-errors", MetricDefinition(PrometheusMetricType::counter, "From /proc/net/snmp SndbufErrors") },
+ { "udp-csum-errors", MetricDefinition(PrometheusMetricType::counter, "From /proc/net/snmp InCsumErrors") },
{ "tcp-listen-overflows", MetricDefinition(PrometheusMetricType::counter, "From /proc/net/netstat ListenOverflows") },
{ "proxy-protocol-invalid", MetricDefinition(PrometheusMetricType::counter, "Number of queries dropped because of an invalid Proxy Protocol header") },
};
{"real-memory-usage", getRealMemoryUsage},
{"special-memory-usage", getSpecialMemoryUsage},
{"udp-in-errors", boost::bind(udpErrorStats, "udp-in-errors")},
- {"udp-noport-errors", boost::bind(udpErrorStats, "udp-noport-errors")},
- {"udp-recvbuf-errors", boost::bind(udpErrorStats, "udp-recvbuf-errors")},
- {"udp-sndbuf-errors", boost::bind(udpErrorStats, "udp-sndbuf-errors")},
+ {"udp-noport-errors", std::bind(udpErrorStats, "udp-noport-errors")},
+ {"udp-recvbuf-errors", std::bind(udpErrorStats, "udp-recvbuf-errors")},
+ {"udp-sndbuf-errors", std::bind(udpErrorStats, "udp-sndbuf-errors")},
+ {"udp-in-csum-errors", std::bind(udpErrorStats, "udp-in-csum-errors")},
{"tcp-listen-overflows", std::bind(tcpErrorStats, "ListenOverflows")},
{"noncompliant-queries", &nonCompliantQueries},
{"noncompliant-responses", &nonCompliantResponses},
{
#ifdef __linux__
ifstream ifs("/proc/net/snmp");
- if(!ifs)
+ if (!ifs) {
return 0;
+ }
+
string line;
vector<string> parts;
- while(getline(ifs,line)) {
- if(boost::starts_with(line, "Udp: ") && isdigit(line[5])) {
+ while (getline(ifs, line)) {
+ if (boost::starts_with(line, "Udp: ") && isdigit(line.at(5))) {
stringtok(parts, line, " \n\t\r");
- if(parts.size() < 7)
+
+ if (parts.size() < 7) {
break;
- if(str=="udp-rcvbuf-errors")
- return std::stoull(parts[5]);
- else if(str=="udp-sndbuf-errors")
- return std::stoull(parts[6]);
- else if(str=="udp-noport-errors")
- return std::stoull(parts[2]);
- else if(str=="udp-in-errors")
- return std::stoull(parts[3]);
- else
+ }
+
+ if (str == "udp-rcvbuf-errors") {
+ return std::stoull(parts.at(5));
+ }
+ else if (str == "udp-sndbuf-errors") {
+ return std::stoull(parts.at(6));
+ }
+ else if (str == "udp-noport-errors") {
+ return std::stoull(parts.at(2));
+ }
+ else if (str == "udp-in-errors") {
+ return std::stoull(parts.at(3));
+ }
+ else if (parts.size() >= 8 && str == "udp-in-csum-errors") {
+ return std::stoull(parts.at(7));
+ }
+ else {
return 0;
+ }
}
}
#endif
'noncompliant-responses', 'rdqueries', 'empty-queries', 'cache-hits',
'cache-misses', 'cpu-iowait', 'cpu-steal', 'cpu-sys-msec', 'cpu-user-msec', 'fd-usage', 'dyn-blocked',
'dyn-block-nmg-size', 'rule-servfail', 'rule-truncated', 'security-status',
- 'udp-in-errors', 'udp-noport-errors', 'udp-recvbuf-errors', 'udp-sndbuf-errors',
+ 'udp-in-csum-errors', 'udp-in-errors', 'udp-noport-errors', 'udp-recvbuf-errors', 'udp-sndbuf-errors',
'doh-query-pipe-full', 'doh-response-pipe-full', 'proxy-protocol-invalid', 'tcp-listen-overflows',
'outgoing-doh-query-pipe-full', 'tcp-query-pipe-full', 'tcp-cross-protocol-query-pipe-full',
'tcp-cross-protocol-response-pipe-full']