void server_stats_compile(struct worker* worker, struct stats_info* s, int reset) { int i; s->svr = worker->stats; s->mesh_num_states = worker->env.mesh->all.count; s->mesh_num_reply_states = worker->env.mesh->num_reply_states; s->mesh_jostled = worker->env.mesh->stats_jostled; s->mesh_dropped = worker->env.mesh->stats_dropped; s->mesh_replies_sent = worker->env.mesh->replies_sent; s->mesh_replies_sum_wait = worker->env.mesh->replies_sum_wait; s->mesh_time_median = timehist_quartile(worker->env.mesh->histogram, 0.50); /* add in the values from the mesh */ s->svr.ans_secure += worker->env.mesh->ans_secure; s->svr.ans_bogus += worker->env.mesh->ans_bogus; s->svr.ans_rcode_nodata += worker->env.mesh->ans_nodata; for(i=0; i<16; i++) s->svr.ans_rcode[i] += worker->env.mesh->ans_rcode[i]; timehist_export(worker->env.mesh->histogram, s->svr.hist, NUM_BUCKETS_HIST); /* values from outside network */ s->svr.unwanted_replies = worker->back->unwanted_replies; /* get and reset validator rrset bogus number */ s->svr.rrset_bogus = get_rrset_bogus(worker); if(reset && !worker->env.cfg->stat_cumulative) { worker_stats_clear(worker); } }
void timehist_log(struct timehist* hist, const char* name) { #ifndef S_SPLINT_S size_t i; log_info("[25%%]=%g median[50%%]=%g [75%%]=%g", timehist_quartile(hist, 0.25), timehist_quartile(hist, 0.50), timehist_quartile(hist, 0.75)); /* 0000.000000 0000.000000 0 */ log_info("lower(secs) upper(secs) %s", name); for(i=0; i<hist->num; i++) { if(hist->buckets[i].count != 0) { log_info("%4d.%6.6d %4d.%6.6d %u", (int)hist->buckets[i].lower.tv_sec, (int)hist->buckets[i].lower.tv_usec, (int)hist->buckets[i].upper.tv_sec, (int)hist->buckets[i].upper.tv_usec, (unsigned)hist->buckets[i].count); } } #endif }
void server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) { int i; struct listen_list* lp; s->svr = worker->stats; s->mesh_num_states = (long long)worker->env.mesh->all.count; s->mesh_num_reply_states = (long long)worker->env.mesh->num_reply_states; s->mesh_jostled = (long long)worker->env.mesh->stats_jostled; s->mesh_dropped = (long long)worker->env.mesh->stats_dropped; s->mesh_replies_sent = (long long)worker->env.mesh->replies_sent; s->mesh_replies_sum_wait_sec = (long long)worker->env.mesh->replies_sum_wait.tv_sec; s->mesh_replies_sum_wait_usec = (long long)worker->env.mesh->replies_sum_wait.tv_usec; s->mesh_time_median = timehist_quartile(worker->env.mesh->histogram, 0.50); /* add in the values from the mesh */ s->svr.ans_secure += (long long)worker->env.mesh->ans_secure; s->svr.ans_bogus += (long long)worker->env.mesh->ans_bogus; s->svr.ans_rcode_nodata += (long long)worker->env.mesh->ans_nodata; for(i=0; i<16; i++) s->svr.ans_rcode[i] += (long long)worker->env.mesh->ans_rcode[i]; timehist_export(worker->env.mesh->histogram, s->svr.hist, NUM_BUCKETS_HIST); /* values from outside network */ s->svr.unwanted_replies = (long long)worker->back->unwanted_replies; s->svr.qtcp_outgoing = (long long)worker->back->num_tcp_outgoing; /* get and reset validator rrset bogus number */ s->svr.rrset_bogus = (long long)get_rrset_bogus(worker, reset); /* get and reset iterator query ratelimit number */ s->svr.queries_ratelimited = (long long)get_queries_ratelimit(worker, reset); /* get cache sizes */ s->svr.msg_cache_count = (long long)count_slabhash_entries(worker->env.msg_cache); s->svr.rrset_cache_count = (long long)count_slabhash_entries(&worker->env.rrset_cache->table); s->svr.infra_cache_count = (long long)count_slabhash_entries(worker->env.infra_cache->hosts); if(worker->env.key_cache) s->svr.key_cache_count = (long long)count_slabhash_entries(worker->env.key_cache->slab); else s->svr.key_cache_count = 0; #ifdef USE_DNSCRYPT if(worker->daemon->dnscenv) { s->svr.num_query_dnscrypt_secret_missed_cache = (long long)get_dnscrypt_cache_miss(worker, reset); s->svr.shared_secret_cache_count = (long long)count_slabhash_entries( worker->daemon->dnscenv->shared_secrets_cache); s->svr.nonce_cache_count = (long long)count_slabhash_entries( worker->daemon->dnscenv->nonces_cache); s->svr.num_query_dnscrypt_replay = (long long)get_dnscrypt_replay(worker, reset); } else { s->svr.num_query_dnscrypt_secret_missed_cache = 0; s->svr.shared_secret_cache_count = 0; s->svr.nonce_cache_count = 0; s->svr.num_query_dnscrypt_replay = 0; } #else s->svr.num_query_dnscrypt_secret_missed_cache = 0; s->svr.shared_secret_cache_count = 0; s->svr.nonce_cache_count = 0; s->svr.num_query_dnscrypt_replay = 0; #endif /* USE_DNSCRYPT */ /* get tcp accept usage */ s->svr.tcp_accept_usage = 0; for(lp = worker->front->cps; lp; lp = lp->next) { if(lp->com->type == comm_tcp_accept) s->svr.tcp_accept_usage += (long long)lp->com->cur_tcp_count; } if(reset && !worker->env.cfg->stat_cumulative) { worker_stats_clear(worker); } }