struct dns_counters {
char *id;
+ char *pid;
long long sent; /* - queries sent */
long long snd_error; /* - sending errors */
long long valid; /* - valid response */
enum obj_type *owner; /* pointer to the owner (server or dns_srvrq) */
struct dns_resolution *resolution; /* pointer to the owned DNS resolution */
- int (*requester_cb)(struct dns_requester *, struct dns_nameserver *); /* requester callback for valid response */
+ int (*requester_cb)(struct dns_requester *, struct dns_counters *); /* requester callback for valid response */
int (*requester_error_cb)(struct dns_requester *, int); /* requester callback, for error management */
struct list list; /* requester list */
/* functions related to server name resolution */
int snr_update_srv_status(struct server *s, int has_no_ip);
const char *update_server_fqdn(struct server *server, const char *fqdn, const char *updater, int dns_locked);
-int snr_resolution_cb(struct dns_requester *requester, struct dns_nameserver *nameserver);
+int snr_resolution_cb(struct dns_requester *requester, struct dns_counters *counters);
int snr_resolution_error_cb(struct dns_requester *requester, int error_code);
struct server *snr_check_ip_callback(struct server *srv, void *ip, unsigned char *ip_family);
struct task *srv_cleanup_idle_connections(struct task *task, void *ctx, unsigned short state);
enum {
DNS_STAT_ID,
+ DNS_STAT_PID,
+ DNS_STAT_SENT,
DNS_STAT_SND_ERROR,
DNS_STAT_VALID,
DNS_STAT_UPDATE,
static struct name_desc dns_stats[] = {
[DNS_STAT_ID] = { .name = "id", .desc = "ID" },
+ [DNS_STAT_PID] = { .name = "pid", .desc = "Parent ID" },
+ [DNS_STAT_SENT] = { .name = "sent", .desc = "Sent" },
[DNS_STAT_SND_ERROR] = { .name = "send_error", .desc = "Send error" },
[DNS_STAT_VALID] = { .name = "valid", .desc = "Valid" },
[DNS_STAT_UPDATE] = { .name = "update", .desc = "Update" },
{
struct dns_counters *counters = d;
stats[DNS_STAT_ID] = mkf_str(FO_CONFIG, counters->id);
+ stats[DNS_STAT_PID] = mkf_str(FO_CONFIG, counters->pid);
+ stats[DNS_STAT_SENT] = mkf_u64(FN_GAUGE, counters->sent);
stats[DNS_STAT_SND_ERROR] = mkf_u64(FN_GAUGE, counters->snd_error);
stats[DNS_STAT_VALID] = mkf_u64(FN_GAUGE, counters->valid);
stats[DNS_STAT_UPDATE] = mkf_u64(FN_GAUGE, counters->update);
*/
static void dns_resolve_recv(struct dgram_conn *dgram)
{
- struct dns_nameserver *ns, *tmpns;
+ struct dns_nameserver *ns;
+ struct dns_counters *tmpcounters;
struct dns_resolvers *resolvers;
struct dns_resolution *res;
struct dns_query_item *query;
report_res_success:
/* Only the 1rst requester s managed by the server, others are
* from the cache */
- tmpns = ns;
+ tmpcounters = ns->counters;
list_for_each_entry(req, &res->requesters, list) {
struct server *s = objt_server(req->owner);
if (s)
HA_SPIN_LOCK(SERVER_LOCK, &s->lock);
- req->requester_cb(req, tmpns);
+ req->requester_cb(req, tmpcounters);
if (s)
HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
- tmpns = NULL;
+ tmpcounters = NULL;
}
dns_reset_resolution(res);
if (ns->extra_counters) {
ns->counters = EXTRA_COUNTERS_GET(ns->extra_counters, &dns_stats_module);
ns->counters->id = ns->id;
+ ns->counters->pid = ns->resolvers->id;
}
}
if (strcmp(mod->name, "dns") == 0) {
ns->counters = (struct dns_counters *)ns->extra_counters->data + mod->counters_off[COUNTERS_DNS];
ns->counters->id = ns->id;
+ ns->counters->pid = ns->resolvers->id;
}
}
}
*
* Must be called with server lock held
*/
-int snr_resolution_cb(struct dns_requester *requester, struct dns_nameserver *nameserver)
+int snr_resolution_cb(struct dns_requester *requester, struct dns_counters *counters)
{
struct server *s = NULL;
struct dns_resolution *resolution = NULL;
}
save_ip:
- if (nameserver) {
- nameserver->counters->update++;
+ if (counters) {
+ counters->update++;
/* save the first ip we found */
- chunk_printf(chk, "%s/%s", nameserver->resolvers->id, nameserver->id);
+ chunk_printf(chk, "%s/%s", counters->pid, counters->id);
}
else
chunk_printf(chk, "DNS cache");
return 1;
invalid:
- if (nameserver) {
- nameserver->counters->invalid++;
+ if (counters) {
+ counters->invalid++;
goto update_status;
}
snr_update_srv_status(s, has_no_ip);