X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fwrite_prometheus.c;h=7c4e59e79472014b63ce862f7ec175e9287f05e4;hp=a005ffb28cf20e6add071c60697721d5c00d852e;hb=1159cb5d383c55a80a0db100b8f7aadcf44740a5;hpb=71fb7a5299f307a9261ae69819318f1eda1dd3c7 diff --git a/src/write_prometheus.c b/src/write_prometheus.c index a005ffb2..7c4e59e7 100644 --- a/src/write_prometheus.c +++ b/src/write_prometheus.c @@ -731,6 +731,15 @@ metric_family_get(data_set_t const *ds, value_list_t const *vl, size_t ds_index, } /* }}} */ +static void prom_logger(__attribute__((unused)) void *arg, char const *fmt, + va_list ap) { + /* {{{ */ + char errbuf[1024]; + vsnprintf(errbuf, sizeof(errbuf), fmt, ap); + + ERROR("write_prometheus plugin: %s", errbuf); +} /* }}} prom_logger */ + #if MHD_VERSION >= 0x00090000 static int prom_open_socket(int addrfamily) { /* {{{ */ @@ -755,6 +764,16 @@ static int prom_open_socket(int addrfamily) { if (fd == -1) continue; + int tmp = 1; + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &tmp, sizeof(tmp)) != 0) { + char errbuf[1024]; + WARNING("write_prometheus: setsockopt(SO_REUSEADDR) failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + close(fd); + fd = -1; + continue; + } + if (bind(fd, ai->ai_addr, ai->ai_addrlen) != 0) { close(fd); fd = -1; @@ -785,11 +804,12 @@ static struct MHD_Daemon *prom_start_daemon() { return NULL; } - struct MHD_Daemon *d = - MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION, 0, - /* MHD_AcceptPolicyCallback = */ NULL, - /* MHD_AcceptPolicyCallback arg = */ NULL, http_handler, - NULL, MHD_OPTION_LISTEN_SOCKET, fd, MHD_OPTION_END); + struct MHD_Daemon *d = MHD_start_daemon( + MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG, httpd_port, + /* MHD_AcceptPolicyCallback = */ NULL, + /* MHD_AcceptPolicyCallback arg = */ NULL, http_handler, NULL, + MHD_OPTION_LISTEN_SOCKET, fd, MHD_OPTION_EXTERNAL_LOGGER, prom_logger, + NULL, MHD_OPTION_END); if (d == NULL) { ERROR("write_prometheus plugin: MHD_start_daemon() failed."); close(fd); @@ -801,11 +821,11 @@ static struct MHD_Daemon *prom_start_daemon() { #else /* if MHD_VERSION < 0x00090000 */ static struct MHD_Daemon *prom_start_daemon() { /* {{{ */ - struct MHD_Daemon *d = - MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION, 0, - /* MHD_AcceptPolicyCallback = */ NULL, - /* MHD_AcceptPolicyCallback arg = */ NULL, http_handler, - NULL, MHD_OPTION_END); + struct MHD_Daemon *d = MHD_start_daemon( + MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG, httpd_port, + /* MHD_AcceptPolicyCallback = */ NULL, + /* MHD_AcceptPolicyCallback arg = */ NULL, http_handler, NULL, + MHD_OPTION_EXTERNAL_LOGGER, prom_logger, NULL, MHD_OPTION_END); if (d == NULL) { ERROR("write_prometheus plugin: MHD_start_daemon() failed."); return NULL;