static c_avl_tree_t *metrics;
static pthread_mutex_t metrics_lock = PTHREAD_MUTEX_INITIALIZER;
+static char *httpd_host = NULL;
static unsigned short httpd_port = 9103;
static struct MHD_Daemon *httpd;
snprintf(service, sizeof(service), "%hu", httpd_port);
struct addrinfo *res;
- int status = getaddrinfo(NULL, service,
+ int status = getaddrinfo(httpd_host, service,
&(struct addrinfo){
.ai_flags = AI_PASSIVE | AI_ADDRCONFIG,
.ai_family = addrfamily,
continue;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) != 0) {
- WARNING("write_prometheus: setsockopt(SO_REUSEADDR) failed: %s",
+ WARNING("write_prometheus plugin: setsockopt(SO_REUSEADDR) failed: %s",
STRERRNO);
close(fd);
fd = -1;
continue;
}
+ char str_node[NI_MAXHOST];
+ char str_service[NI_MAXSERV];
+
+ getnameinfo(ai->ai_addr, ai->ai_addrlen, str_node, sizeof(str_node),
+ str_service, sizeof(str_service),
+ NI_NUMERICHOST | NI_NUMERICSERV);
+
+ INFO("write_prometheus plugin: Listening on [%s]:%s.", str_node,
+ str_service);
break;
}
if (fd == -1)
fd = prom_open_socket(PF_INET);
if (fd == -1) {
- ERROR("write_prometheus plugin: Opening a listening socket failed.");
+ ERROR("write_prometheus plugin: Opening a listening socket for [%s]:%hu "
+ "failed.",
+ (httpd_host != NULL) ? httpd_host : "::", httpd_port);
return NULL;
}
for (int i = 0; i < ci->children_num; i++) {
oconfig_item_t *child = ci->children + i;
- if (strcasecmp("Port", child->key) == 0) {
+ if (strcasecmp("Host", child->key) == 0) {
+#if MHD_VERSION >= 0x00090000
+ cf_util_get_string(child, &httpd_host);
+#else
+ ERROR("write_prometheus plugin: Option `Host' not supported. Please "
+ "upgrade libmicrohttpd to at least 0.9.0");
+ return -1;
+#endif
+ } else if (strcasecmp("Port", child->key) == 0) {
int status = cf_util_get_port_number(child);
if (status > 0)
httpd_port = (unsigned short)status;
if (httpd == NULL) {
httpd = prom_start_daemon();
if (httpd == NULL) {
- ERROR("write_prometheus plugin: MHD_start_daemon() failed.");
return -1;
}
DEBUG("write_prometheus plugin: Successfully started microhttpd %s",
}
pthread_mutex_unlock(&metrics_lock);
+ sfree(httpd_host);
+
return 0;
}