Home | History | Annotate | Line # | Download | only in dist
      1  1.1  christos /*
      2  1.1  christos  * metrics.h -- prometheus metrics endpoint
      3  1.1  christos  *
      4  1.1  christos  * Copyright (c) 2001-2025, NLnet Labs. All rights reserved.
      5  1.1  christos  *
      6  1.1  christos  * See LICENSE for the license.
      7  1.1  christos  *
      8  1.1  christos  */
      9  1.1  christos 
     10  1.1  christos #ifndef DAEMON_METRICS_H
     11  1.1  christos #define DAEMON_METRICS_H
     12  1.1  christos 
     13  1.1  christos struct xfrd_state;
     14  1.1  christos struct nsd_options;
     15  1.1  christos struct daemon_metrics;
     16  1.1  christos struct evbuffer;
     17  1.1  christos 
     18  1.1  christos #ifdef BIND8_STATS
     19  1.1  christos struct nsdst;
     20  1.1  christos #endif /* BIND8_STATS */
     21  1.1  christos 
     22  1.1  christos /* the metrics daemon needs little backlog */
     23  1.1  christos #define TCP_BACKLOG_METRICS 16 /* listen() tcp backlog */
     24  1.1  christos 
     25  1.1  christos /**
     26  1.1  christos  * Create new metrics endpoint for the daemon.
     27  1.1  christos  * @param cfg: config.
     28  1.1  christos  * @return new state, or NULL on failure.
     29  1.1  christos  */
     30  1.1  christos struct daemon_metrics* daemon_metrics_create(struct nsd_options* cfg);
     31  1.1  christos 
     32  1.1  christos /**
     33  1.1  christos  * Delete metrics daemon and close HTTP listeners.
     34  1.1  christos  * @param m: daemon to delete.
     35  1.1  christos  */
     36  1.1  christos void daemon_metrics_delete(struct daemon_metrics* m);
     37  1.1  christos 
     38  1.1  christos /**
     39  1.1  christos  * Close metrics HTTP listener ports.
     40  1.1  christos  * Does not delete the object itself.
     41  1.1  christos  * @param m: state to close.
     42  1.1  christos  */
     43  1.1  christos void daemon_metrics_close(struct daemon_metrics* m);
     44  1.1  christos 
     45  1.1  christos /**
     46  1.1  christos  * Open and create HTTP listeners for metrics daemon.
     47  1.1  christos  * @param m: metrics state that contains list of accept sockets.
     48  1.1  christos  * @param cfg: config options.
     49  1.1  christos  * @return false on failure.
     50  1.1  christos  */
     51  1.1  christos int daemon_metrics_open_ports(struct daemon_metrics* m,
     52  1.1  christos 	struct nsd_options* cfg);
     53  1.1  christos 
     54  1.1  christos /**
     55  1.1  christos  * Setup HTTP listener.
     56  1.1  christos  * @param m: state
     57  1.1  christos  * @param xfrd: the process that hosts the daemon.
     58  1.1  christos  *	m's HTTP listener is attached to its event base.
     59  1.1  christos  */
     60  1.1  christos void daemon_metrics_attach(struct daemon_metrics* m, struct xfrd_state* xfrd);
     61  1.1  christos 
     62  1.1  christos #ifdef BIND8_STATS
     63  1.1  christos /**
     64  1.1  christos  * Print stats as prometheus metrics to HTTP buffer
     65  1.1  christos  * @param buf: the HTTP buffer to write to
     66  1.1  christos  * @param xfrd: the process that hosts the daemon.
     67  1.1  christos  * @param now: current time
     68  1.1  christos  * @param clear: whether to reset the stats time
     69  1.1  christos  * @param st: the stats
     70  1.1  christos  * @param zonestats: the zonestats
     71  1.1  christos  * @param rc_stats_time: pointer to the remote-control stats_time member
     72  1.1  christos  *   to correctly print the elapsed time since last stats reset
     73  1.1  christos  */
     74  1.1  christos void metrics_print_stats(struct evbuffer *buf, struct xfrd_state *xfrd,
     75  1.1  christos                          struct timeval *now, int clear, struct nsdst *st,
     76  1.1  christos                          struct nsdst **zonestats,
     77  1.1  christos                          struct timeval *rc_stats_time);
     78  1.1  christos 
     79  1.1  christos #ifdef USE_ZONE_STATS
     80  1.1  christos /**
     81  1.1  christos  * Print zonestat metrics for a single zonestats object
     82  1.1  christos  * @param buf: the HTTP buffer to write to
     83  1.1  christos  * @param name: the zonestats name
     84  1.1  christos  * @param zst: the stats to print
     85  1.1  christos  */
     86  1.1  christos void metrics_zonestat_print_one(struct evbuffer *buf, char *name,
     87  1.1  christos                                 struct nsdst *zst);
     88  1.1  christos #endif /* USE_ZONE_STATS */
     89  1.1  christos 
     90  1.1  christos #endif /*BIND8_STATS*/
     91  1.1  christos 
     92  1.1  christos #endif /* DAEMON_METRICS_H */
     93