Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions plugins/out_prometheus_exporter/prom.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,4 +313,5 @@ struct flb_output_plugin out_prometheus_exporter_plugin = {
.flags = FLB_OUTPUT_NET | FLB_OUTPUT_HTTP_SERVER,
.event_type = FLB_OUTPUT_METRICS,
.config_map = config_map,
.workers = 1,
};
2 changes: 2 additions & 0 deletions plugins/out_prometheus_exporter/prom_http.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,9 @@ struct prom_http *prom_http_server_create(struct prom_exporter *ctx,
if (ins->http_server_config != NULL) {
options.idle_timeout = ins->http_server_config->idle_timeout;
options.buffer_max_size = ins->http_server_config->buffer_max_size;
options.buffer_chunk_size = ins->http_server_config->buffer_chunk_size;
options.max_connections = ins->http_server_config->max_connections;
options.workers = ins->http_server_config->workers;
}

ret = flb_http_server_init_with_options(&ph->server, &options);
Expand Down
3 changes: 3 additions & 0 deletions tests/runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,9 @@ if(FLB_IN_LIB)
FLB_RT_TEST(FLB_OUT_LOKI "out_loki.c")
FLB_RT_TEST(FLB_OUT_NULL "out_null.c")
FLB_RT_TEST(FLB_OUT_PLOT "out_plot.c")
if(NOT FLB_SYSTEM_WINDOWS)
FLB_RT_TEST(FLB_OUT_PROMETHEUS_EXPORTER "out_prometheus_exporter.c")
endif()
FLB_RT_TEST(FLB_OUT_RETRY "out_retry.c")
FLB_RT_TEST(FLB_OUT_SPLUNK "out_splunk.c")
FLB_RT_TEST(FLB_OUT_STDOUT "out_stdout.c")
Expand Down
120 changes: 120 additions & 0 deletions tests/runtime/out_prometheus_exporter.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

#include <fluent-bit.h>
#include <fluent-bit/flb_output.h>

#include "../../plugins/out_prometheus_exporter/prom.h"
#include "../../plugins/out_prometheus_exporter/prom_http.h"

#include "flb_tests_runtime.h"

static int get_free_port(void)
{
int ret;
int port;
flb_sockfd_t sock;
socklen_t len;
struct sockaddr_in addr;

len = sizeof(addr);
memset(&addr, 0, sizeof(addr));

sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
return -1;
}

addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
addr.sin_port = htons(0);

ret = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
if (ret != 0) {
flb_socket_close(sock);
return -1;
}

ret = getsockname(sock, (struct sockaddr *) &addr, &len);
if (ret != 0) {
flb_socket_close(sock);
return -1;
}

port = ntohs(addr.sin_port);
flb_socket_close(sock);

return port;
}

static void test_http_server_options(void)
{
int ret;
int port;
int in_ffd;
int out_ffd;
char port_string[16];
flb_ctx_t *ctx;
struct prom_exporter *prom_ctx;
struct prom_http *prom_http;
struct flb_output_instance *out;

port = get_free_port();
TEST_CHECK(port > 0);
snprintf(port_string, sizeof(port_string), "%d", port);

ctx = flb_create();
TEST_CHECK(ctx != NULL);

ret = flb_service_set(ctx,
"Flush", "1",
"Grace", "1",
"Log_Level", "error",
NULL);
TEST_CHECK(ret == 0);

in_ffd = flb_input(ctx, "fluentbit_metrics", NULL);
TEST_CHECK(in_ffd >= 0);
ret = flb_input_set(ctx, in_ffd,
"tag", "metrics",
"scrape_interval", "1",
NULL);
TEST_CHECK(ret == 0);

out_ffd = flb_output(ctx, "prometheus_exporter", NULL);
TEST_CHECK(out_ffd >= 0);
ret = flb_output_set(ctx, out_ffd,
"match", "*",
"host", "127.0.0.1",
"port", port_string,
"http_server.buffer_chunk_size", "64K",
"http_server.workers", "2",
NULL);
TEST_CHECK(ret == 0);

ret = flb_start(ctx);
TEST_CHECK(ret == 0);

out = flb_output_get_instance(ctx->config, out_ffd);
TEST_CHECK(out != NULL);
TEST_CHECK(out->tp_workers == 1);
TEST_CHECK(out->is_threaded == FLB_TRUE);
TEST_CHECK(out->tp != NULL);

prom_ctx = out->context;
TEST_CHECK(prom_ctx != NULL);
TEST_CHECK(prom_ctx->http != NULL);

prom_http = prom_ctx->http;
TEST_CHECK(prom_http->server.buffer_chunk_size ==
out->http_server_config->buffer_chunk_size);
TEST_CHECK(prom_http->server.workers == 2);
TEST_CHECK(prom_http->server.runtime != NULL);

flb_stop(ctx);
flb_destroy(ctx);
}

TEST_LIST = {
{"http_server_options", test_http_server_options},
{NULL, NULL}
};