/** print stat block */ static void pr_stats(const char* nm, struct ub_stats_info* s) { struct timeval sumwait, avg; PR_UL_NM("num.queries", s->svr.num_queries); PR_UL_NM("num.queries_ip_ratelimited", s->svr.num_queries_ip_ratelimited); PR_UL_NM("num.cachehits", s->svr.num_queries - s->svr.num_queries_missed_cache); PR_UL_NM("num.cachemiss", s->svr.num_queries_missed_cache); 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 /* USE_DNSCRYPT */ 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/ (double)(s->svr.num_queries_missed_cache+ s->svr.num_queries_prefetch) : 0.0); PR_UL_NM("requestlist.max", s->svr.max_query_list_size); PR_UL_NM("requestlist.overwritten", s->mesh_jostled); PR_UL_NM("requestlist.exceeded", s->mesh_dropped); PR_UL_NM("requestlist.current.all", s->mesh_num_states); PR_UL_NM("requestlist.current.user", s->mesh_num_reply_states); #ifndef S_SPLINT_S sumwait.tv_sec = s->mesh_replies_sum_wait_sec; sumwait.tv_usec = s->mesh_replies_sum_wait_usec; #endif timeval_divide(&avg, &sumwait, s->mesh_replies_sent); printf("%s.", nm); PR_TIMEVAL("recursion.time.avg", avg); printf("%s.recursion.time.median"SQ"%g\n", nm, s->mesh_time_median); PR_UL_NM("tcpusage", s->svr.tcp_accept_usage); }
void mesh_stats(struct mesh_area* mesh, const char* str) { verbose(VERB_DETAIL, "%s %u recursion states (%u with reply, " "%u detached), %u waiting replies, %u recursion replies " "sent, %d replies dropped, %d states jostled out", str, (unsigned)mesh->all.count, (unsigned)mesh->num_reply_states, (unsigned)mesh->num_detached_states, (unsigned)mesh->num_reply_addrs, (unsigned)mesh->replies_sent, (unsigned)mesh->stats_dropped, (unsigned)mesh->stats_jostled); if(mesh->replies_sent > 0) { struct timeval avg; timeval_divide(&avg, &mesh->replies_sum_wait, mesh->replies_sent); log_info("average recursion processing time " "%d.%6.6d sec", (int)avg.tv_sec, (int)avg.tv_usec); log_info("histogram of recursion processing times"); timehist_log(mesh->histogram, "recursions"); } }
/** print stats from statinfo */ static int print_stats(SSL* ssl, const char* nm, struct stats_info* s) { struct timeval avg; if(!ssl_printf(ssl, "%s.num.queries"SQ"%u\n", nm, (unsigned)s->svr.num_queries)) return 0; if(!ssl_printf(ssl, "%s.num.cachehits"SQ"%u\n", nm, (unsigned)(s->svr.num_queries - s->svr.num_queries_missed_cache))) return 0; if(!ssl_printf(ssl, "%s.num.cachemiss"SQ"%u\n", nm, (unsigned)s->svr.num_queries_missed_cache)) return 0; if(!ssl_printf(ssl, "%s.num.prefetch"SQ"%u\n", nm, (unsigned)s->svr.num_queries_prefetch)) return 0; if(!ssl_printf(ssl, "%s.num.recursivereplies"SQ"%u\n", nm, (unsigned)s->mesh_replies_sent)) return 0; 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/ (s->svr.num_queries_missed_cache+ s->svr.num_queries_prefetch) : 0.0)) return 0; if(!ssl_printf(ssl, "%s.requestlist.max"SQ"%u\n", nm, (unsigned)s->svr.max_query_list_size)) return 0; if(!ssl_printf(ssl, "%s.requestlist.overwritten"SQ"%u\n", nm, (unsigned)s->mesh_jostled)) return 0; if(!ssl_printf(ssl, "%s.requestlist.exceeded"SQ"%u\n", nm, (unsigned)s->mesh_dropped)) return 0; if(!ssl_printf(ssl, "%s.requestlist.current.all"SQ"%u\n", nm, (unsigned)s->mesh_num_states)) return 0; if(!ssl_printf(ssl, "%s.requestlist.current.user"SQ"%u\n", nm, (unsigned)s->mesh_num_reply_states)) return 0; timeval_divide(&avg, &s->mesh_replies_sum_wait, s->mesh_replies_sent); if(!ssl_printf(ssl, "%s.recursion.time.avg"SQ"%d.%6.6d\n", nm, (int)avg.tv_sec, (int)avg.tv_usec)) return 0; if(!ssl_printf(ssl, "%s.recursion.time.median"SQ"%g\n", nm, s->mesh_time_median)) return 0; return 1; }