From fb722e6872d454a66687041bb2563e70f093e65b Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Mon, 8 Sep 2025 10:54:08 -0600 Subject: [PATCH 1/2] build: refactor ability to include prometheus text decoder Signed-off-by: Eduardo Silva --- CMakeLists.txt | 26 +++++++++++++++++------- include/CMakeLists.txt | 25 +++++++++++++++++++---- include/cmetrics/cmt_decode_prometheus.h | 6 ++++++ src/CMakeLists.txt | 17 +++++++++------- tests/CMakeLists.txt | 2 +- tests/issues.c | 6 ++++++ 6 files changed, 63 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 580fd34c..6506d39d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,18 @@ if (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") OUTPUT_STRIP_TRAILING_WHITESPACE ) if (BREW_BISON EQUAL 0 AND EXISTS "${BREW_BISON_PREFIX}") - message(STATUS "Found Bison keg installed by Homebrew at ${BREW_BISON_PREFIX}") + message(STATUS "include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include Found Bison keg installed by Homebrew at ${BREW_BISON_PREFIX}") set(BISON_EXECUTABLE "${BREW_BISON_PREFIX}/bin/bison") endif() @@ -68,11 +79,11 @@ else() endif() # Configuration options -option(CMT_DEV "Enable development mode" No) -option(CMT_DEBUG "Enable debug mode" No) -option(CMT_TESTS "Enable unit testing" No) +option(CMT_DEV "Enable development mode" No) +option(CMT_DEBUG "Enable debug mode" No) +option(CMT_TESTS "Enable unit testing" No) option(CMT_INSTALL_TARGETS "Enable subdirectory library installations" Yes) -option(CMT_ENABLE_PROMETHEUS_DECODER "Enable prometheus decoder" Yes) +option(CMT_PROMETHEUS_TEXT_DECODER "Enable prometheus text format decoder (requires Flex/Bison)" Yes) if(CMT_DEV) set(CMT_TESTS Yes) @@ -155,7 +166,7 @@ check_c_source_compiles(" return 0; }" CMT_HAVE_MSGPACK) -if(CMT_ENABLE_PROMETHEUS_DECODER) +if(CMT_PROMETHEUS_TEXT_DECODER) # Flex and Bison: check if the variables has not been defined before by # a parent project to avoid conflicts. if(NOT FLEX_FOUND) @@ -167,7 +178,8 @@ if(CMT_ENABLE_PROMETHEUS_DECODER) endif() if(FLEX_FOUND AND BISON_FOUND) - set(CMT_BUILD_PROMETHEUS_DECODER 1) + set(CMT_BUILD_PROMETHEUS_TEXT_DECODER 1) + CMT_DEFINITION(CMT_HAVE_PROMETHEUS_TEXT_DECODER) endif() endif() diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 060ec03e..5d12dff2 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,8 +1,25 @@ +# Install headers conditionally based on Prometheus text decoder availability file(GLOB cmetricsHeaders "cmetrics/*.h") -install(FILES ${cmetricsHeaders} - DESTINATION ${CMT_INSTALL_INCLUDEDIR}/cmetrics - COMPONENT headers - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) + +if(CMT_BUILD_PROMETHEUS_TEXT_DECODER) + # Install all headers when Prometheus text decoder is enabled + install(FILES ${cmetricsHeaders} + DESTINATION ${CMT_INSTALL_INCLUDEDIR}/cmetrics + COMPONENT headers + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +else() + # Install headers except Prometheus text decoder header when disabled + # (remote write decoder header is always installed) + foreach(header ${cmetricsHeaders}) + get_filename_component(header_name ${header} NAME) + if(NOT header_name STREQUAL "cmt_decode_prometheus.h") + install(FILES ${header} + DESTINATION ${CMT_INSTALL_INCLUDEDIR}/cmetrics + COMPONENT headers + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) + endif() + endforeach() +endif() file(GLOB promHeaders "prometheus_remote_write/*.h") install(FILES ${promHeaders} diff --git a/include/cmetrics/cmt_decode_prometheus.h b/include/cmetrics/cmt_decode_prometheus.h index 5087981e..a565a471 100644 --- a/include/cmetrics/cmt_decode_prometheus.h +++ b/include/cmetrics/cmt_decode_prometheus.h @@ -20,6 +20,10 @@ #ifndef CMT_DECODE_PROMETHEUS_H #define CMT_DECODE_PROMETHEUS_H +#include + +#ifdef CMT_HAVE_PROMETHEUS_TEXT_DECODER + #include #include @@ -110,4 +114,6 @@ int cmt_decode_prometheus_create( struct cmt_decode_prometheus_parse_opts *opts); void cmt_decode_prometheus_destroy(struct cmt *cmt); +#endif /* CMT_HAVE_PROMETHEUS_TEXT_DECODER */ + #endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 064325ac..4f46ccfd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -if (CMT_BUILD_PROMETHEUS_DECODER) +if (CMT_BUILD_PROMETHEUS_TEXT_DECODER) flex_target(cmt_decode_prometheus_lexer cmt_decode_prometheus.l "${FLEX_BISON_GENERATED_DIR}/cmt_decode_prometheus_lexer.c" DEFINES_FILE "${FLEX_BISON_GENERATED_DIR}/cmt_decode_prometheus_lexer.h" @@ -28,7 +28,6 @@ set(src cmt_decode_opentelemetry.c cmt_encode_prometheus.c cmt_encode_prometheus_remote_write.c - cmt_decode_prometheus_remote_write.c cmt_encode_splunk_hec.c cmt_encode_cloudwatch_emf.c cmt_encode_text.c @@ -37,12 +36,16 @@ set(src cmt_decode_msgpack.c cmt_decode_statsd.c cmt_mpack_utils.c - - # Prometheus related protobuf files - external/remote.pb-c.c - external/types.pb-c.c ) +# Add Prometheus remote write decoder (always available, only needs protobuf) +set(src ${src} + cmt_decode_prometheus_remote_write.c + # Prometheus related protobuf files + external/remote.pb-c.c + external/types.pb-c.c + ) + if (MSVC) set(PLATFORM_SPECIFIC_ATOMIC_MODULE cmt_atomic_msvc.c) @@ -63,7 +66,7 @@ set(src ${PLATFORM_SPECIFIC_ATOMIC_MODULE} ) -if (CMT_BUILD_PROMETHEUS_DECODER) +if (CMT_BUILD_PROMETHEUS_TEXT_DECODER) set(src ${src} ${FLEX_cmt_decode_prometheus_lexer_OUTPUTS} ${BISON_cmt_decode_prometheus_parser_OUTPUTS} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 669b30ba..c71f8a80 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -14,7 +14,7 @@ set(UNIT_TESTS_FILES filter.c ) -if (CMT_BUILD_PROMETHEUS_DECODER) +if (CMT_BUILD_PROMETHEUS_TEXT_DECODER) set(UNIT_TESTS_FILES ${UNIT_TESTS_FILES} prometheus_lexer.c diff --git a/tests/issues.c b/tests/issues.c index a104ca5e..651a8c40 100644 --- a/tests/issues.c +++ b/tests/issues.c @@ -91,6 +91,8 @@ void test_issue_54() cmt_destroy(cmt1); } +#ifdef CMT_HAVE_PROMETHEUS_TEXT_DECODER + /* issue: https://github.com/fluent/fluent-bit/issues/10761 */ void test_prometheus_metric_no_subsystem() { @@ -117,8 +119,12 @@ void test_prometheus_metric_no_subsystem() } } +#endif + TEST_LIST = { {"issue_54", test_issue_54}, +#ifdef CMT_HAVE_PROMETHEUS_TEXT_DECODER {"prometheus_metric_no_subsystem", test_prometheus_metric_no_subsystem}, +#endif { 0 } }; From ae2004baaa4b7649fd9be723834866f3607f405a Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Mon, 8 Sep 2025 11:34:50 -0600 Subject: [PATCH 2/2] workflows: move from Debian Buster to Bullseye Signed-off-by: Eduardo Silva --- .github/workflows/build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 305a0133..5cf3dd1a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -84,9 +84,9 @@ jobs: working-directory: cmetrics build-debian: - name: Debian Buster build to confirm no issues once used downstream + name: Debian Bullseye build to confirm no issues once used downstream runs-on: ubuntu-latest - container: debian:buster + container: debian:bullseye steps: - name: Set up base image dependencies run: |