]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #1217: Add metrics to unbound-control interface showing
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 3 Apr 2017 09:03:32 +0000 (09:03 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 3 Apr 2017 09:03:32 +0000 (09:03 +0000)
  crypted, cert request, plaintext and malformed queries (from
  Manu Bretelle).

git-svn-id: file:///svn/unbound/trunk@4084 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/remote.c
daemon/stats.c
daemon/stats.h
daemon/worker.c
dnscrypt/dnscrypt.c
doc/Changelog
smallapp/unbound-control.c

index 47f99e82f67cd6e7f2ebdbd71e89cf8aee3a7c08..d9f5bcf3105093e710e0346a87821a0f59500b93 100644 (file)
@@ -798,6 +798,16 @@ print_stats(SSL* ssl, const char* nm, struct stats_info* s)
                (unsigned long)s->svr.zero_ttl_responses)) return 0;
        if(!ssl_printf(ssl, "%s.num.recursivereplies"SQ"%lu\n", nm, 
                (unsigned long)s->mesh_replies_sent)) return 0;
+#ifdef USE_DNSCRYPT
+    if(!ssl_printf(ssl, "%s.num.dnscrypt.crypted"SQ"%lu\n", nm,
+        (unsigned long)s->svr.num_query_dnscrypt_crypted)) return 0;
+    if(!ssl_printf(ssl, "%s.num.dnscrypt.cert"SQ"%lu\n", nm,
+        (unsigned long)s->svr.num_query_dnscrypt_cert)) return 0;
+    if(!ssl_printf(ssl, "%s.num.dnscrypt.cleartext"SQ"%lu\n", nm,
+        (unsigned long)s->svr.num_query_dnscrypt_cleartext)) return 0;
+    if(!ssl_printf(ssl, "%s.num.dnscrypt.malformed"SQ"%lu\n", nm,
+        (unsigned long)s->svr.num_query_dnscrypt_crypted_malformed)) return 0;
+#endif
        if(!ssl_printf(ssl, "%s.requestlist.avg"SQ"%g\n", nm,
                (s->svr.num_queries_missed_cache+s->svr.num_queries_prefetch)?
                        (double)s->svr.sum_query_list_size/
index a3c3d738976e2167df91412699bafba28ceb6365..3665616be8be5c1c5db4cbbe54d4ff2b2a967cf7 100644 (file)
@@ -232,6 +232,14 @@ void server_stats_add(struct stats_info* total, struct stats_info* a)
        total->svr.num_queries_missed_cache += a->svr.num_queries_missed_cache;
        total->svr.num_queries_prefetch += a->svr.num_queries_prefetch;
        total->svr.sum_query_list_size += a->svr.sum_query_list_size;
+#ifdef USE_DNSCRYPT
+    total->svr.num_query_dnscrypt_crypted += a->svr.num_query_dnscrypt_crypted;
+    total->svr.num_query_dnscrypt_cert += a->svr.num_query_dnscrypt_cert;
+    total->svr.num_query_dnscrypt_cleartext += \
+        a->svr.num_query_dnscrypt_cleartext;
+    total->svr.num_query_dnscrypt_crypted_malformed += \
+        a->svr.num_query_dnscrypt_crypted_malformed;
+#endif
        /* the max size reached is upped to higher of both */
        if(a->svr.max_query_list_size > total->svr.max_query_list_size)
                total->svr.max_query_list_size = a->svr.max_query_list_size;
index 0b9d77b427d0a034a4dc9b46928d70a9325a1fe9..39c4d21c5774d879c7fa0a15fe7503020d574981 100644 (file)
@@ -43,6 +43,7 @@
 #ifndef DAEMON_STATS_H
 #define DAEMON_STATS_H
 #include "util/timehist.h"
+#include "dnscrypt/dnscrypt_config.h"
 struct worker;
 struct config_file;
 struct comm_point;
@@ -149,6 +150,16 @@ struct server_stats {
        size_t infra_cache_count;
        /** number of key cache entries */
        size_t key_cache_count;
+#ifdef USE_DNSCRYPT
+    /** number of queries that used dnscrypt */
+    size_t num_query_dnscrypt_crypted;
+    /** number of queries that queried dnscrypt certificates */
+    size_t num_query_dnscrypt_cert;
+    /** number of queries in clear text and not asking for the certificates */
+    size_t num_query_dnscrypt_cleartext;
+    /** number of malformed encrypted queries */
+    size_t num_query_dnscrypt_crypted_malformed;
+#endif
 };
 
 /** 
index 580846d54998f18c81f939d4490beea5c1fc9d94..b8cc2a0cdea02caccecf4b0c4f931d1b0200162b 100644 (file)
@@ -977,6 +977,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
 #ifdef USE_DNSCRYPT
     repinfo->max_udp_size = worker->daemon->cfg->max_udp_size;
     if(!dnsc_handle_curved_request(worker->daemon->dnscenv, repinfo)) {
+        worker->stats.num_query_dnscrypt_crypted_malformed++;
         return 0;
     }
     if(c->dnscrypt && !repinfo->is_dnscrypted) {
@@ -1003,9 +1004,13 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
                     sldns_rr_descript(qinfo.qtype)->_name,
                     buf);
             comm_point_drop_reply(repinfo);
+            worker->stats.num_query_dnscrypt_cleartext++;
             return 0;
         }
+        worker->stats.num_query_dnscrypt_cert++;
         sldns_buffer_rewind(c->buffer);
+    } else if(c->dnscrypt && repinfo->is_dnscrypted) {
+        worker->stats.num_query_dnscrypt_crypted++;
     }
 #endif
 #ifdef USE_DNSTAP
index f672096ab7f314eba52d353831731eb678c5ea33..56903e6513f3b0855e5b87e9a32e53a79b721f01 100644 (file)
@@ -468,7 +468,6 @@ dnsc_handle_curved_request(struct dnsc_env* dnscenv,
                                    repinfo->client_nonce,
                                    repinfo->nmkey,
                                    c->buffer) != 0){
-            // TODO: Bump counter!
             verbose(VERB_ALGO, "dnscrypt: Failed to uncurve");
             comm_point_drop_reply(repinfo);
             return 0;
index a70ba8214a60b38cdf923383b413a80d3ff70d40..6ffc06901bb659888f4825213bea680471013b1b 100644 (file)
@@ -1,3 +1,8 @@
+3 April 2017: Wouter
+       - Fix #1217: Add metrics to unbound-control interface showing
+         crypted, cert request, plaintext and malformed queries (from
+         Manu Bretelle).
+
 27 March 2017: Wouter
        - Remove (now unused) event2 include from dnscrypt code.
 
index 741058b1bcbd262cd9070c44866baec6218e6944..3f00525b641b1ce222f55dcabb48b795e2bca703 100644 (file)
@@ -199,6 +199,13 @@ static void pr_stats(const char* nm, struct stats_info* s)
        PR_UL_NM("num.prefetch", s->svr.num_queries_prefetch);
        PR_UL_NM("num.zero_ttl", s->svr.zero_ttl_responses);
        PR_UL_NM("num.recursivereplies", s->mesh_replies_sent);
+#ifdef USE_DNSCRYPT
+    PR_UL_NM("num.dnscrypt.crypted", s->svr.num_query_dnscrypt_crypted);
+    PR_UL_NM("num.dnscrypt.cert", s->svr.num_query_dnscrypt_cert);
+    PR_UL_NM("num.dnscrypt.cleartext", s->svr.num_query_dnscrypt_cleartext);
+    PR_UL_NM("num.dnscrypt.malformed",
+             s->svr.num_query_dnscrypt_crypted_malformed);
+#endif
        printf("%s.requestlist.avg"SQ"%g\n", nm,
                (s->svr.num_queries_missed_cache+s->svr.num_queries_prefetch)?
                        (double)s->svr.sum_query_list_size/