@ohos-ports/confluentinc-kafka-javascript 1.10.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +457 -0
- package/LICENSE.kafkajs +31 -0
- package/LICENSE.node-rdkafka +25 -0
- package/LICENSE.txt +20 -0
- package/README.md +133 -0
- package/binding.gyp +184 -0
- package/build/Release/confluent-kafka-javascript.node +0 -0
- package/build/deps/librdkafka++.so.1 +0 -0
- package/build/deps/librdkafka.Makefile +6 -0
- package/build/deps/librdkafka.so.1 +0 -0
- package/build/deps/librdkafka.target.mk +55 -0
- package/deps/librdkafka/.clang-format +136 -0
- package/deps/librdkafka/.clang-format-cpp +103 -0
- package/deps/librdkafka/.dir-locals.el +10 -0
- package/deps/librdkafka/.formatignore +35 -0
- package/deps/librdkafka/.gdbmacros +19 -0
- package/deps/librdkafka/CHANGELOG.md +2477 -0
- package/deps/librdkafka/CMakeLists.txt +291 -0
- package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
- package/deps/librdkafka/CONFIGURATION.md +212 -0
- package/deps/librdkafka/CONTRIBUTING.md +431 -0
- package/deps/librdkafka/Doxyfile +2375 -0
- package/deps/librdkafka/INTRODUCTION.md +2752 -0
- package/deps/librdkafka/LICENSE +26 -0
- package/deps/librdkafka/LICENSE.cjson +22 -0
- package/deps/librdkafka/LICENSE.crc32c +28 -0
- package/deps/librdkafka/LICENSE.fnv1a +18 -0
- package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
- package/deps/librdkafka/LICENSE.lz4 +26 -0
- package/deps/librdkafka/LICENSE.murmur2 +25 -0
- package/deps/librdkafka/LICENSE.nanopb +22 -0
- package/deps/librdkafka/LICENSE.opentelemetry +203 -0
- package/deps/librdkafka/LICENSE.pycrc +23 -0
- package/deps/librdkafka/LICENSE.queue +31 -0
- package/deps/librdkafka/LICENSE.regexp +5 -0
- package/deps/librdkafka/LICENSE.snappy +36 -0
- package/deps/librdkafka/LICENSE.tinycthread +26 -0
- package/deps/librdkafka/LICENSE.wingetopt +49 -0
- package/deps/librdkafka/LICENSES.txt +625 -0
- package/deps/librdkafka/Makefile +125 -0
- package/deps/librdkafka/README.md +201 -0
- package/deps/librdkafka/README.win32 +26 -0
- package/deps/librdkafka/STATISTICS.md +624 -0
- package/deps/librdkafka/configure +214 -0
- package/deps/librdkafka/configure.self +341 -0
- package/deps/librdkafka/dev-conf.sh +123 -0
- package/deps/librdkafka/lds-gen.py +73 -0
- package/deps/librdkafka/mainpage.doxy +40 -0
- package/deps/librdkafka/mklove/Makefile.base +329 -0
- package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
- package/deps/librdkafka/mklove/modules/configure.base +2484 -0
- package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
- package/deps/librdkafka/mklove/modules/configure.cc +186 -0
- package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
- package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
- package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
- package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
- package/deps/librdkafka/mklove/modules/configure.host +132 -0
- package/deps/librdkafka/mklove/modules/configure.lib +49 -0
- package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
- package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
- package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
- package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
- package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
- package/deps/librdkafka/mklove/modules/configure.pic +16 -0
- package/deps/librdkafka/mklove/modules/configure.socket +20 -0
- package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
- package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
- package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
- package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
- package/deps/librdkafka/service.yml +182 -0
- package/deps/librdkafka/src/CMakeLists.txt +379 -0
- package/deps/librdkafka/src/Makefile +105 -0
- package/deps/librdkafka/src/README.lz4.md +30 -0
- package/deps/librdkafka/src/cJSON.c +3191 -0
- package/deps/librdkafka/src/cJSON.h +306 -0
- package/deps/librdkafka/src/crc32c.c +430 -0
- package/deps/librdkafka/src/crc32c.h +38 -0
- package/deps/librdkafka/src/generate_proto.sh +66 -0
- package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
- package/deps/librdkafka/src/lz4.c +2727 -0
- package/deps/librdkafka/src/lz4.h +842 -0
- package/deps/librdkafka/src/lz4frame.c +2078 -0
- package/deps/librdkafka/src/lz4frame.h +692 -0
- package/deps/librdkafka/src/lz4frame_static.h +47 -0
- package/deps/librdkafka/src/lz4hc.c +1631 -0
- package/deps/librdkafka/src/lz4hc.h +413 -0
- package/deps/librdkafka/src/nanopb/pb.h +917 -0
- package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
- package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
- package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
- package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
- package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
- package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
- package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
- package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
- package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
- package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
- package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
- package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
- package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
- package/deps/librdkafka/src/queue.h +850 -0
- package/deps/librdkafka/src/rd.h +592 -0
- package/deps/librdkafka/src/rdaddr.c +255 -0
- package/deps/librdkafka/src/rdaddr.h +202 -0
- package/deps/librdkafka/src/rdatomic.h +262 -0
- package/deps/librdkafka/src/rdavg.h +260 -0
- package/deps/librdkafka/src/rdavl.c +210 -0
- package/deps/librdkafka/src/rdavl.h +250 -0
- package/deps/librdkafka/src/rdbase64.c +200 -0
- package/deps/librdkafka/src/rdbase64.h +43 -0
- package/deps/librdkafka/src/rdbuf.c +1884 -0
- package/deps/librdkafka/src/rdbuf.h +375 -0
- package/deps/librdkafka/src/rdcrc32.c +114 -0
- package/deps/librdkafka/src/rdcrc32.h +170 -0
- package/deps/librdkafka/src/rddl.c +179 -0
- package/deps/librdkafka/src/rddl.h +43 -0
- package/deps/librdkafka/src/rdendian.h +175 -0
- package/deps/librdkafka/src/rdfloat.h +67 -0
- package/deps/librdkafka/src/rdfnv1a.c +113 -0
- package/deps/librdkafka/src/rdfnv1a.h +35 -0
- package/deps/librdkafka/src/rdgz.c +120 -0
- package/deps/librdkafka/src/rdgz.h +46 -0
- package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
- package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
- package/deps/librdkafka/src/rdhttp.c +831 -0
- package/deps/librdkafka/src/rdhttp.h +101 -0
- package/deps/librdkafka/src/rdinterval.h +177 -0
- package/deps/librdkafka/src/rdkafka.c +7287 -0
- package/deps/librdkafka/src/rdkafka.h +11795 -0
- package/deps/librdkafka/src/rdkafka_admin.c +10165 -0
- package/deps/librdkafka/src/rdkafka_admin.h +658 -0
- package/deps/librdkafka/src/rdkafka_assignment.c +1282 -0
- package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
- package/deps/librdkafka/src/rdkafka_assignor.c +1800 -0
- package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
- package/deps/librdkafka/src/rdkafka_aux.c +409 -0
- package/deps/librdkafka/src/rdkafka_aux.h +174 -0
- package/deps/librdkafka/src/rdkafka_background.c +222 -0
- package/deps/librdkafka/src/rdkafka_broker.c +6736 -0
- package/deps/librdkafka/src/rdkafka_broker.h +851 -0
- package/deps/librdkafka/src/rdkafka_buf.c +543 -0
- package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
- package/deps/librdkafka/src/rdkafka_cert.c +576 -0
- package/deps/librdkafka/src/rdkafka_cert.h +62 -0
- package/deps/librdkafka/src/rdkafka_cgrp.c +8310 -0
- package/deps/librdkafka/src/rdkafka_cgrp.h +589 -0
- package/deps/librdkafka/src/rdkafka_conf.c +5177 -0
- package/deps/librdkafka/src/rdkafka_conf.h +746 -0
- package/deps/librdkafka/src/rdkafka_confval.h +97 -0
- package/deps/librdkafka/src/rdkafka_coord.c +623 -0
- package/deps/librdkafka/src/rdkafka_coord.h +132 -0
- package/deps/librdkafka/src/rdkafka_error.c +228 -0
- package/deps/librdkafka/src/rdkafka_error.h +80 -0
- package/deps/librdkafka/src/rdkafka_event.c +502 -0
- package/deps/librdkafka/src/rdkafka_event.h +126 -0
- package/deps/librdkafka/src/rdkafka_feature.c +898 -0
- package/deps/librdkafka/src/rdkafka_feature.h +104 -0
- package/deps/librdkafka/src/rdkafka_fetcher.c +3820 -0
- package/deps/librdkafka/src/rdkafka_fetcher.h +62 -0
- package/deps/librdkafka/src/rdkafka_header.c +220 -0
- package/deps/librdkafka/src/rdkafka_header.h +76 -0
- package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
- package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
- package/deps/librdkafka/src/rdkafka_int.h +1505 -0
- package/deps/librdkafka/src/rdkafka_interceptor.c +842 -0
- package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
- package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
- package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
- package/deps/librdkafka/src/rdkafka_metadata.c +2347 -0
- package/deps/librdkafka/src/rdkafka_metadata.h +350 -0
- package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
- package/deps/librdkafka/src/rdkafka_mock.c +4514 -0
- package/deps/librdkafka/src/rdkafka_mock.h +867 -0
- package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1877 -0
- package/deps/librdkafka/src/rdkafka_mock_handlers.c +5255 -0
- package/deps/librdkafka/src/rdkafka_mock_int.h +1005 -0
- package/deps/librdkafka/src/rdkafka_mock_sharegrp.c +1207 -0
- package/deps/librdkafka/src/rdkafka_msg.c +2619 -0
- package/deps/librdkafka/src/rdkafka_msg.h +629 -0
- package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
- package/deps/librdkafka/src/rdkafka_msgset.h +105 -0
- package/deps/librdkafka/src/rdkafka_msgset_reader.c +2099 -0
- package/deps/librdkafka/src/rdkafka_msgset_writer.c +1474 -0
- package/deps/librdkafka/src/rdkafka_offset.c +1565 -0
- package/deps/librdkafka/src/rdkafka_offset.h +150 -0
- package/deps/librdkafka/src/rdkafka_op.c +1219 -0
- package/deps/librdkafka/src/rdkafka_op.h +1065 -0
- package/deps/librdkafka/src/rdkafka_partition.c +5109 -0
- package/deps/librdkafka/src/rdkafka_partition.h +1215 -0
- package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
- package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
- package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
- package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
- package/deps/librdkafka/src/rdkafka_proto.h +739 -0
- package/deps/librdkafka/src/rdkafka_protocol.h +131 -0
- package/deps/librdkafka/src/rdkafka_queue.c +1351 -0
- package/deps/librdkafka/src/rdkafka_queue.h +1235 -0
- package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
- package/deps/librdkafka/src/rdkafka_request.c +7298 -0
- package/deps/librdkafka/src/rdkafka_request.h +761 -0
- package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
- package/deps/librdkafka/src/rdkafka_sasl.c +589 -0
- package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
- package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
- package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1833 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1827 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +52 -0
- package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
- package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
- package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
- package/deps/librdkafka/src/rdkafka_share_acknowledgement.c +1445 -0
- package/deps/librdkafka/src/rdkafka_share_acknowledgement.h +373 -0
- package/deps/librdkafka/src/rdkafka_ssl.c +2235 -0
- package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
- package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
- package/deps/librdkafka/src/rdkafka_subscription.c +411 -0
- package/deps/librdkafka/src/rdkafka_telemetry.c +761 -0
- package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1307 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.c +1309 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.h +459 -0
- package/deps/librdkafka/src/rdkafka_timer.c +407 -0
- package/deps/librdkafka/src/rdkafka_timer.h +117 -0
- package/deps/librdkafka/src/rdkafka_topic.c +2382 -0
- package/deps/librdkafka/src/rdkafka_topic.h +369 -0
- package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
- package/deps/librdkafka/src/rdkafka_transport.h +99 -0
- package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
- package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
- package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
- package/deps/librdkafka/src/rdlist.c +593 -0
- package/deps/librdkafka/src/rdlist.h +444 -0
- package/deps/librdkafka/src/rdlog.c +89 -0
- package/deps/librdkafka/src/rdlog.h +41 -0
- package/deps/librdkafka/src/rdmap.c +508 -0
- package/deps/librdkafka/src/rdmap.h +492 -0
- package/deps/librdkafka/src/rdmurmur2.c +167 -0
- package/deps/librdkafka/src/rdmurmur2.h +35 -0
- package/deps/librdkafka/src/rdports.c +61 -0
- package/deps/librdkafka/src/rdports.h +38 -0
- package/deps/librdkafka/src/rdposix.h +250 -0
- package/deps/librdkafka/src/rdrand.c +151 -0
- package/deps/librdkafka/src/rdrand.h +72 -0
- package/deps/librdkafka/src/rdregex.c +156 -0
- package/deps/librdkafka/src/rdregex.h +43 -0
- package/deps/librdkafka/src/rdsignal.h +57 -0
- package/deps/librdkafka/src/rdstring.c +645 -0
- package/deps/librdkafka/src/rdstring.h +98 -0
- package/deps/librdkafka/src/rdsysqueue.h +404 -0
- package/deps/librdkafka/src/rdtime.h +356 -0
- package/deps/librdkafka/src/rdtypes.h +86 -0
- package/deps/librdkafka/src/rdunittest.c +564 -0
- package/deps/librdkafka/src/rdunittest.h +232 -0
- package/deps/librdkafka/src/rdunittest_acknowledge.c +1177 -0
- package/deps/librdkafka/src/rdunittest_fetcher.c +1211 -0
- package/deps/librdkafka/src/rdunittest_msgset_errors.c +1521 -0
- package/deps/librdkafka/src/rdvarint.c +134 -0
- package/deps/librdkafka/src/rdvarint.h +165 -0
- package/deps/librdkafka/src/rdwin32.h +382 -0
- package/deps/librdkafka/src/rdxxhash.c +1030 -0
- package/deps/librdkafka/src/rdxxhash.h +328 -0
- package/deps/librdkafka/src/regexp.c +1352 -0
- package/deps/librdkafka/src/regexp.h +41 -0
- package/deps/librdkafka/src/snappy.c +1866 -0
- package/deps/librdkafka/src/snappy.h +62 -0
- package/deps/librdkafka/src/snappy_compat.h +138 -0
- package/deps/librdkafka/src/statistics_schema.json +444 -0
- package/deps/librdkafka/src/tinycthread.c +932 -0
- package/deps/librdkafka/src/tinycthread.h +503 -0
- package/deps/librdkafka/src/tinycthread_extra.c +210 -0
- package/deps/librdkafka/src/tinycthread_extra.h +218 -0
- package/deps/librdkafka/src/win32_config.h +58 -0
- package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
- package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
- package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
- package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
- package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
- package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
- package/deps/librdkafka/src-cpp/Makefile +55 -0
- package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
- package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
- package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
- package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
- package/deps/librdkafka/src-cpp/README.md +16 -0
- package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
- package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
- package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
- package/deps/librdkafka/src-cpp/rdkafkacpp.h +3797 -0
- package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
- package/deps/librdkafka/tests/0000-unittests.c +72 -0
- package/deps/librdkafka/tests/0001-multiobj.c +102 -0
- package/deps/librdkafka/tests/0002-unkpart.c +244 -0
- package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
- package/deps/librdkafka/tests/0004-conf.c +934 -0
- package/deps/librdkafka/tests/0005-order.c +133 -0
- package/deps/librdkafka/tests/0006-symbols.c +163 -0
- package/deps/librdkafka/tests/0007-autotopic.c +136 -0
- package/deps/librdkafka/tests/0008-reqacks.c +179 -0
- package/deps/librdkafka/tests/0009-mock_cluster.c +272 -0
- package/deps/librdkafka/tests/0011-produce_batch.c +753 -0
- package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
- package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
- package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
- package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
- package/deps/librdkafka/tests/0016-client_swname.c +181 -0
- package/deps/librdkafka/tests/0017-compression.c +140 -0
- package/deps/librdkafka/tests/0018-cgrp_term.c +444 -0
- package/deps/librdkafka/tests/0019-list_groups.c +289 -0
- package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
- package/deps/librdkafka/tests/0021-rkt_destroy.c +72 -0
- package/deps/librdkafka/tests/0022-consume_batch.c +331 -0
- package/deps/librdkafka/tests/0025-timers.c +147 -0
- package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
- package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
- package/deps/librdkafka/tests/0029-assign_offset.c +202 -0
- package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
- package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
- package/deps/librdkafka/tests/0033-regex_subscribe.c +536 -0
- package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
- package/deps/librdkafka/tests/0035-api_version.c +73 -0
- package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
- package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
- package/deps/librdkafka/tests/0038-performance.c +121 -0
- package/deps/librdkafka/tests/0039-event.c +284 -0
- package/deps/librdkafka/tests/0040-io_event.c +257 -0
- package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -0
- package/deps/librdkafka/tests/0042-many_topics.c +252 -0
- package/deps/librdkafka/tests/0043-no_connection.c +77 -0
- package/deps/librdkafka/tests/0044-partition_cnt.c +94 -0
- package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
- package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
- package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -0
- package/deps/librdkafka/tests/0048-partitioner.c +283 -0
- package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
- package/deps/librdkafka/tests/0050-subscribe_adds.c +145 -0
- package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
- package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
- package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
- package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
- package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
- package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -0
- package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
- package/deps/librdkafka/tests/0058-log.cpp +123 -0
- package/deps/librdkafka/tests/0059-bsearch.cpp +241 -0
- package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
- package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -0
- package/deps/librdkafka/tests/0062-stats_event.c +126 -0
- package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
- package/deps/librdkafka/tests/0064-interceptors.c +529 -0
- package/deps/librdkafka/tests/0065-yield.cpp +140 -0
- package/deps/librdkafka/tests/0066-plugins.cpp +143 -0
- package/deps/librdkafka/tests/0067-empty_topic.cpp +151 -0
- package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
- package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -0
- package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
- package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
- package/deps/librdkafka/tests/0073-headers.c +381 -0
- package/deps/librdkafka/tests/0074-producev.c +87 -0
- package/deps/librdkafka/tests/0075-retry.c +290 -0
- package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
- package/deps/librdkafka/tests/0077-compaction.c +366 -0
- package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
- package/deps/librdkafka/tests/0079-fork.c +93 -0
- package/deps/librdkafka/tests/0080-admin_ut.c +3095 -0
- package/deps/librdkafka/tests/0081-admin.c +5633 -0
- package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
- package/deps/librdkafka/tests/0083-cb_event.c +233 -0
- package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
- package/deps/librdkafka/tests/0085-headers.cpp +392 -0
- package/deps/librdkafka/tests/0086-purge.c +368 -0
- package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
- package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
- package/deps/librdkafka/tests/0090-idempotence.c +171 -0
- package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
- package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
- package/deps/librdkafka/tests/0093-holb.c +200 -0
- package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
- package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
- package/deps/librdkafka/tests/0097-ssl_verify.cpp +674 -0
- package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
- package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
- package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
- package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
- package/deps/librdkafka/tests/0102-static_group_rebalance.c +836 -0
- package/deps/librdkafka/tests/0103-transactions.c +1383 -0
- package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
- package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
- package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
- package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
- package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
- package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
- package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
- package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
- package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
- package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
- package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
- package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
- package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
- package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
- package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
- package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -0
- package/deps/librdkafka/tests/0121-clusterid.c +115 -0
- package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
- package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
- package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
- package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
- package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +1164 -0
- package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
- package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +217 -0
- package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +79 -0
- package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
- package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
- package/deps/librdkafka/tests/0132-strategy_ordering.c +179 -0
- package/deps/librdkafka/tests/0133-ssl_keys.c +150 -0
- package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
- package/deps/librdkafka/tests/0135-sasl_credentials.cpp +279 -0
- package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
- package/deps/librdkafka/tests/0137-barrier_batch_consume.c +752 -0
- package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
- package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
- package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
- package/deps/librdkafka/tests/0142-reauthentication.c +931 -0
- package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -0
- package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
- package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
- package/deps/librdkafka/tests/0146-metadata_mock.c +505 -0
- package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +1210 -0
- package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +569 -0
- package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
- package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
- package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
- package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
- package/deps/librdkafka/tests/0153-memberid.c +128 -0
- package/deps/librdkafka/tests/0155-share_group_heartbeat_mock.c +2695 -0
- package/deps/librdkafka/tests/0156-share_consumer_fetch_mock.c +1551 -0
- package/deps/librdkafka/tests/0157-share_consumer_ack_mock.c +1788 -0
- package/deps/librdkafka/tests/0158-share_consumer_transactions_mock.c +467 -0
- package/deps/librdkafka/tests/0170-share_consumer_subscription.c +2192 -0
- package/deps/librdkafka/tests/0171-share_consumer_consume.c +2150 -0
- package/deps/librdkafka/tests/0172-share_consumer_acknowledge.c +1919 -0
- package/deps/librdkafka/tests/0173-share_consumer_commit_async.c +2735 -0
- package/deps/librdkafka/tests/0174-share_consumer_concurrency.c +1434 -0
- package/deps/librdkafka/tests/0175-share_consumer_groups.c +574 -0
- package/deps/librdkafka/tests/0176-share_consumer_commit_sync.c +2986 -0
- package/deps/librdkafka/tests/0177-share_consumer_transactions.c +1815 -0
- package/deps/librdkafka/tests/0178-share_consumer_close.c +2102 -0
- package/deps/librdkafka/tests/0179-share_consumer_destroy.c +2482 -0
- package/deps/librdkafka/tests/0180-share_consumer_config.c +1677 -0
- package/deps/librdkafka/tests/0181-share_consumer_topic_delete.c +354 -0
- package/deps/librdkafka/tests/0182-share_consumer_error_handling_mock.c +3358 -0
- package/deps/librdkafka/tests/0183-share_consumer_leader_change_mock.c +1234 -0
- package/deps/librdkafka/tests/0184-share_consumer_topic_recreate.c +1356 -0
- package/deps/librdkafka/tests/0185-share_consumer_max_poll_interval.c +557 -0
- package/deps/librdkafka/tests/0186-share_consumer_fatal_error.c +360 -0
- package/deps/librdkafka/tests/0190-share_consumer_telemetry.c +387 -0
- package/deps/librdkafka/tests/1000-unktopic.c +164 -0
- package/deps/librdkafka/tests/8000-idle.cpp +60 -0
- package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
- package/deps/librdkafka/tests/CMakeLists.txt +193 -0
- package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
- package/deps/librdkafka/tests/Makefile +182 -0
- package/deps/librdkafka/tests/README.md +514 -0
- package/deps/librdkafka/tests/autotest.sh +33 -0
- package/deps/librdkafka/tests/backtrace.gdb +30 -0
- package/deps/librdkafka/tests/broker_version_tests.py +315 -0
- package/deps/librdkafka/tests/buildbox.sh +17 -0
- package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
- package/deps/librdkafka/tests/cluster_testing.py +203 -0
- package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
- package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
- package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
- package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -0
- package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
- package/deps/librdkafka/tests/fuzzers/README.md +31 -0
- package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
- package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
- package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
- package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
- package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
- package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
- package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
- package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
- package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
- package/deps/librdkafka/tests/java/Makefile +13 -0
- package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
- package/deps/librdkafka/tests/java/README.md +14 -0
- package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
- package/deps/librdkafka/tests/java/run-class.sh +11 -0
- package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
- package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
- package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
- package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
- package/deps/librdkafka/tests/performance_plot.py +115 -0
- package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
- package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
- package/deps/librdkafka/tests/requirements.txt +2 -0
- package/deps/librdkafka/tests/run-all-tests.sh +81 -0
- package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
- package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
- package/deps/librdkafka/tests/run-test-batches.py +157 -0
- package/deps/librdkafka/tests/run-test.sh +141 -0
- package/deps/librdkafka/tests/rusage.c +249 -0
- package/deps/librdkafka/tests/sasl_test.py +289 -0
- package/deps/librdkafka/tests/scenarios/README.md +6 -0
- package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
- package/deps/librdkafka/tests/scenarios/default.json +5 -0
- package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
- package/deps/librdkafka/tests/share_telemetry_verify/share-otel-collector-config.yaml +28 -0
- package/deps/librdkafka/tests/sockem.c +801 -0
- package/deps/librdkafka/tests/sockem.h +85 -0
- package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
- package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
- package/deps/librdkafka/tests/test.c +8376 -0
- package/deps/librdkafka/tests/test.conf.example +27 -0
- package/deps/librdkafka/tests/test.h +1150 -0
- package/deps/librdkafka/tests/testcpp.cpp +131 -0
- package/deps/librdkafka/tests/testcpp.h +388 -0
- package/deps/librdkafka/tests/testshared.h +416 -0
- package/deps/librdkafka/tests/tools/README.md +4 -0
- package/deps/librdkafka/tests/tools/stats/README.md +21 -0
- package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
- package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
- package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
- package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
- package/deps/librdkafka/tests/trivup/trivup-0.15.0.tar.gz +0 -0
- package/deps/librdkafka/tests/until-fail.sh +87 -0
- package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
- package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
- package/deps/librdkafka/vcpkg.json +23 -0
- package/deps/librdkafka/win32/README.md +5 -0
- package/deps/librdkafka/win32/build-package.bat +3 -0
- package/deps/librdkafka/win32/build.bat +19 -0
- package/deps/librdkafka/win32/common.vcxproj +84 -0
- package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
- package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
- package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
- package/deps/librdkafka/win32/librdkafka.sln +226 -0
- package/deps/librdkafka/win32/librdkafka.vcxproj +282 -0
- package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
- package/deps/librdkafka/win32/msbuild.ps1 +58 -0
- package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
- package/deps/librdkafka/win32/package-zip.ps1 +46 -0
- package/deps/librdkafka/win32/packages/repositories.config +4 -0
- package/deps/librdkafka/win32/push-package.bat +4 -0
- package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
- package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
- package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
- package/deps/librdkafka/win32/setup-msys2.ps1 +47 -0
- package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
- package/deps/librdkafka/win32/tests/test.conf.example +25 -0
- package/deps/librdkafka/win32/tests/tests.vcxproj +278 -0
- package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
- package/deps/librdkafka/win32/wingetopt.c +564 -0
- package/deps/librdkafka/win32/wingetopt.h +101 -0
- package/deps/librdkafka/win32/wintime.h +33 -0
- package/deps/librdkafka.gyp +83 -0
- package/deps/windows-install.py +80 -0
- package/index.d.ts +3 -0
- package/lib/admin.js +732 -0
- package/lib/client.js +679 -0
- package/lib/error.js +501 -0
- package/lib/index.js +8 -0
- package/lib/kafka-consumer-stream.js +399 -0
- package/lib/kafka-consumer.js +798 -0
- package/lib/kafkajs/_admin.js +1052 -0
- package/lib/kafkajs/_common.js +887 -0
- package/lib/kafkajs/_consumer.js +2156 -0
- package/lib/kafkajs/_consumer_cache.js +310 -0
- package/lib/kafkajs/_error.js +298 -0
- package/lib/kafkajs/_kafka.js +125 -0
- package/lib/kafkajs/_linked-list.js +220 -0
- package/lib/kafkajs/_producer.js +863 -0
- package/lib/kafkajs/index.js +5 -0
- package/lib/producer/high-level-producer.js +400 -0
- package/lib/producer-stream.js +337 -0
- package/lib/producer.js +405 -0
- package/lib/rdkafka.js +44 -0
- package/lib/tools/ref-counter.js +53 -0
- package/lib/topic-partition.js +91 -0
- package/lib/topic.js +43 -0
- package/lib/util.js +55 -0
- package/librdkafka.js +12 -0
- package/package.json +85 -0
- package/shim/source_location +54 -0
- package/src/admin.cc +1597 -0
- package/src/admin.h +112 -0
- package/src/binding.cc +76 -0
- package/src/binding.h +25 -0
- package/src/callbacks.cc +676 -0
- package/src/callbacks.h +302 -0
- package/src/common.cc +1628 -0
- package/src/common.h +192 -0
- package/src/config.cc +219 -0
- package/src/config.h +61 -0
- package/src/connection.cc +703 -0
- package/src/connection.h +117 -0
- package/src/errors.cc +119 -0
- package/src/errors.h +60 -0
- package/src/kafka-consumer.cc +1539 -0
- package/src/kafka-consumer.h +147 -0
- package/src/producer.cc +917 -0
- package/src/producer.h +124 -0
- package/src/topic.cc +173 -0
- package/src/topic.h +54 -0
- package/src/workers.cc +1714 -0
- package/src/workers.h +690 -0
- package/types/config.d.ts +1269 -0
- package/types/errors.d.ts +373 -0
- package/types/kafkajs.d.ts +568 -0
- package/types/rdkafka.d.ts +571 -0
- package/util/configure.js +32 -0
- package/util/generate-docs.sh +18 -0
- package/util/get-env.js +6 -0
- package/util/test-compile.js +11 -0
- package/util/test-producer-delivery.js +100 -0
|
@@ -0,0 +1,1309 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - Apache Kafka C library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2023, Confluent Inc.
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
|
9
|
+
*
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
11
|
+
* this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
* and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
19
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
20
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#include "rdkafka_telemetry_encode.h"
|
|
30
|
+
#include "nanopb/pb_encode.h"
|
|
31
|
+
#include "opentelemetry/metrics.pb.h"
|
|
32
|
+
|
|
33
|
+
#define THREE_ORDERS_MAGNITUDE 1000
|
|
34
|
+
|
|
35
|
+
typedef struct {
|
|
36
|
+
opentelemetry_proto_metrics_v1_Metric **metrics;
|
|
37
|
+
size_t count;
|
|
38
|
+
} rd_kafka_telemetry_metrics_repeated_t;
|
|
39
|
+
|
|
40
|
+
typedef struct {
|
|
41
|
+
opentelemetry_proto_common_v1_KeyValue **key_values;
|
|
42
|
+
size_t count;
|
|
43
|
+
} rd_kafka_telemetry_key_values_repeated_t;
|
|
44
|
+
|
|
45
|
+
#define calculate_avg(_avg_, _scale_factor_) \
|
|
46
|
+
((_avg_).ra_v.avg / (double)_scale_factor_)
|
|
47
|
+
|
|
48
|
+
#define calculate_max(_avg_, _scale_factor_) \
|
|
49
|
+
RD_CEIL_INTEGER_DIVISION((_avg_).ra_v.maxv, _scale_factor_)
|
|
50
|
+
|
|
51
|
+
#define brokers_avg(_rk_, _avg_name_, _scale_factor_, _metric_) \
|
|
52
|
+
do { \
|
|
53
|
+
rd_kafka_broker_t *_rkb_; \
|
|
54
|
+
double avg = 0; \
|
|
55
|
+
int count = 0; \
|
|
56
|
+
TAILQ_FOREACH(_rkb_, &(_rk_)->rk_brokers, rkb_link) { \
|
|
57
|
+
rd_avg_t *rd_avg_rollover = \
|
|
58
|
+
&_rkb_->rkb_telemetry.rd_avg_rollover._avg_name_; \
|
|
59
|
+
if (rd_avg_rollover->ra_v.cnt) { \
|
|
60
|
+
avg = (avg * count + \
|
|
61
|
+
rd_avg_rollover->ra_v.sum) / \
|
|
62
|
+
(double)(count + \
|
|
63
|
+
rd_avg_rollover->ra_v.cnt); \
|
|
64
|
+
count += rd_avg_rollover->ra_v.cnt; \
|
|
65
|
+
} \
|
|
66
|
+
} \
|
|
67
|
+
if (_scale_factor_ > 1) \
|
|
68
|
+
(_metric_).double_value = avg / _scale_factor_; \
|
|
69
|
+
else \
|
|
70
|
+
(_metric_).double_value = avg; \
|
|
71
|
+
} while (0)
|
|
72
|
+
|
|
73
|
+
#define brokers_max(_rk_, _avg_name_, _scale_factor_, _metric_) \
|
|
74
|
+
do { \
|
|
75
|
+
rd_kafka_broker_t *_rkb_; \
|
|
76
|
+
_metric_.int_value = 0; \
|
|
77
|
+
TAILQ_FOREACH(_rkb_, &(_rk_)->rk_brokers, rkb_link) { \
|
|
78
|
+
_metric_.int_value = \
|
|
79
|
+
RD_MAX(_metric_.int_value, \
|
|
80
|
+
_rkb_->rkb_telemetry.rd_avg_rollover \
|
|
81
|
+
._avg_name_.ra_v.maxv); \
|
|
82
|
+
} \
|
|
83
|
+
if (_scale_factor_ > 1) \
|
|
84
|
+
(_metric_).int_value = RD_CEIL_INTEGER_DIVISION( \
|
|
85
|
+
(_metric_).int_value, _scale_factor_); \
|
|
86
|
+
} while (0)
|
|
87
|
+
|
|
88
|
+
static rd_kafka_telemetry_metric_value_t
|
|
89
|
+
calculate_connection_creation_total(rd_kafka_t *rk,
|
|
90
|
+
rd_kafka_broker_t *rkb_selected,
|
|
91
|
+
rd_ts_t now_ns) {
|
|
92
|
+
rd_kafka_telemetry_metric_value_t total;
|
|
93
|
+
rd_kafka_broker_t *rkb;
|
|
94
|
+
|
|
95
|
+
total.int_value = 0;
|
|
96
|
+
TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
|
|
97
|
+
const int32_t connects = rd_atomic32_get(&rkb->rkb_c.connects);
|
|
98
|
+
if (!rk->rk_telemetry.delta_temporality)
|
|
99
|
+
total.int_value += connects;
|
|
100
|
+
else
|
|
101
|
+
total.int_value +=
|
|
102
|
+
connects -
|
|
103
|
+
rkb->rkb_telemetry.rkb_historic_c.connects;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return total;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
static rd_kafka_telemetry_metric_value_t
|
|
110
|
+
calculate_connection_creation_rate(rd_kafka_t *rk,
|
|
111
|
+
rd_kafka_broker_t *rkb_selected,
|
|
112
|
+
rd_ts_t now_ns) {
|
|
113
|
+
rd_kafka_telemetry_metric_value_t total;
|
|
114
|
+
rd_kafka_broker_t *rkb;
|
|
115
|
+
rd_ts_t ts_last = rk->rk_telemetry.rk_historic_c.ts_last;
|
|
116
|
+
|
|
117
|
+
total.double_value = 0;
|
|
118
|
+
TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
|
|
119
|
+
total.double_value +=
|
|
120
|
+
rd_atomic32_get(&rkb->rkb_c.connects) -
|
|
121
|
+
rkb->rkb_telemetry.rkb_historic_c.connects;
|
|
122
|
+
}
|
|
123
|
+
double seconds = (now_ns - ts_last) / 1e9;
|
|
124
|
+
if (seconds > 1.0)
|
|
125
|
+
total.double_value /= seconds;
|
|
126
|
+
return total;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static rd_kafka_telemetry_metric_value_t
|
|
130
|
+
calculate_broker_avg_rtt(rd_kafka_t *rk,
|
|
131
|
+
rd_kafka_broker_t *rkb_selected,
|
|
132
|
+
rd_ts_t now_ns) {
|
|
133
|
+
rd_kafka_telemetry_metric_value_t avg_rtt = RD_ZERO_INIT;
|
|
134
|
+
avg_rtt.double_value = calculate_avg(
|
|
135
|
+
rkb_selected->rkb_telemetry.rd_avg_rollover.rkb_avg_rtt,
|
|
136
|
+
THREE_ORDERS_MAGNITUDE);
|
|
137
|
+
return avg_rtt;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
static rd_kafka_telemetry_metric_value_t
|
|
141
|
+
calculate_broker_max_rtt(rd_kafka_t *rk,
|
|
142
|
+
rd_kafka_broker_t *rkb_selected,
|
|
143
|
+
rd_ts_t now_ns) {
|
|
144
|
+
rd_kafka_telemetry_metric_value_t max_rtt = RD_ZERO_INIT;
|
|
145
|
+
max_rtt.int_value = calculate_max(
|
|
146
|
+
rkb_selected->rkb_telemetry.rd_avg_rollover.rkb_avg_rtt,
|
|
147
|
+
THREE_ORDERS_MAGNITUDE);
|
|
148
|
+
return max_rtt;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
static rd_kafka_telemetry_metric_value_t
|
|
152
|
+
calculate_produce_latency_avg(rd_kafka_t *rk,
|
|
153
|
+
rd_kafka_broker_t *rkb_selected,
|
|
154
|
+
rd_ts_t now_ns) {
|
|
155
|
+
rd_kafka_telemetry_metric_value_t avg_rtt = RD_ZERO_INIT;
|
|
156
|
+
brokers_avg(rk, rkb_avg_produce_latency, THREE_ORDERS_MAGNITUDE,
|
|
157
|
+
avg_rtt);
|
|
158
|
+
return avg_rtt;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
static rd_kafka_telemetry_metric_value_t
|
|
162
|
+
calculate_produce_latency_max(rd_kafka_t *rk,
|
|
163
|
+
rd_kafka_broker_t *rkb_selected,
|
|
164
|
+
rd_ts_t now_ns) {
|
|
165
|
+
rd_kafka_telemetry_metric_value_t max_rtt = RD_ZERO_INIT;
|
|
166
|
+
brokers_max(rk, rkb_avg_produce_latency, THREE_ORDERS_MAGNITUDE,
|
|
167
|
+
max_rtt);
|
|
168
|
+
return max_rtt;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
static rd_kafka_telemetry_metric_value_t
|
|
172
|
+
calculate_throttle_avg(rd_kafka_t *rk,
|
|
173
|
+
rd_kafka_broker_t *rkb_selected,
|
|
174
|
+
rd_ts_t now_ns) {
|
|
175
|
+
rd_kafka_telemetry_metric_value_t avg_throttle;
|
|
176
|
+
brokers_avg(rk, rkb_avg_throttle, 1, avg_throttle);
|
|
177
|
+
return avg_throttle;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
static rd_kafka_telemetry_metric_value_t
|
|
182
|
+
calculate_throttle_max(rd_kafka_t *rk,
|
|
183
|
+
rd_kafka_broker_t *rkb_selected,
|
|
184
|
+
rd_ts_t now_ns) {
|
|
185
|
+
rd_kafka_telemetry_metric_value_t max_throttle;
|
|
186
|
+
brokers_max(rk, rkb_avg_throttle, 1, max_throttle);
|
|
187
|
+
return max_throttle;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
static rd_kafka_telemetry_metric_value_t
|
|
191
|
+
calculate_queue_time_avg(rd_kafka_t *rk,
|
|
192
|
+
rd_kafka_broker_t *rkb_selected,
|
|
193
|
+
rd_ts_t now_ns) {
|
|
194
|
+
rd_kafka_telemetry_metric_value_t avg_queue_time;
|
|
195
|
+
brokers_avg(rk, rkb_avg_outbuf_latency, THREE_ORDERS_MAGNITUDE,
|
|
196
|
+
avg_queue_time);
|
|
197
|
+
return avg_queue_time;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
static rd_kafka_telemetry_metric_value_t
|
|
201
|
+
calculate_queue_time_max(rd_kafka_t *rk,
|
|
202
|
+
rd_kafka_broker_t *rkb_selected,
|
|
203
|
+
rd_ts_t now_ns) {
|
|
204
|
+
rd_kafka_telemetry_metric_value_t max_queue_time;
|
|
205
|
+
brokers_max(rk, rkb_avg_outbuf_latency, THREE_ORDERS_MAGNITUDE,
|
|
206
|
+
max_queue_time);
|
|
207
|
+
return max_queue_time;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
static rd_kafka_telemetry_metric_value_t
|
|
211
|
+
calculate_consumer_assigned_partitions(rd_kafka_t *rk,
|
|
212
|
+
rd_kafka_broker_t *rkb_selected,
|
|
213
|
+
rd_ts_t now_ns) {
|
|
214
|
+
rd_kafka_telemetry_metric_value_t assigned_partitions;
|
|
215
|
+
|
|
216
|
+
assigned_partitions.int_value =
|
|
217
|
+
rk->rk_cgrp ? rk->rk_cgrp->rkcg_c.assignment_size : 0;
|
|
218
|
+
return assigned_partitions;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
static rd_kafka_telemetry_metric_value_t
|
|
222
|
+
calculate_consumer_rebalance_latency_avg(rd_kafka_t *rk,
|
|
223
|
+
rd_kafka_broker_t *rkb_selected,
|
|
224
|
+
rd_ts_t now_ns) {
|
|
225
|
+
rd_kafka_telemetry_metric_value_t avg_rebalance_time;
|
|
226
|
+
avg_rebalance_time.double_value = calculate_avg(
|
|
227
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_rebalance_latency,
|
|
228
|
+
THREE_ORDERS_MAGNITUDE);
|
|
229
|
+
return avg_rebalance_time;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
static rd_kafka_telemetry_metric_value_t
|
|
233
|
+
calculate_consumer_rebalance_latency_max(rd_kafka_t *rk,
|
|
234
|
+
rd_kafka_broker_t *rkb_selected,
|
|
235
|
+
rd_ts_t now_ns) {
|
|
236
|
+
rd_kafka_telemetry_metric_value_t max_rebalance_time;
|
|
237
|
+
max_rebalance_time.int_value = calculate_max(
|
|
238
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_rebalance_latency,
|
|
239
|
+
THREE_ORDERS_MAGNITUDE);
|
|
240
|
+
return max_rebalance_time;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
static rd_kafka_telemetry_metric_value_t
|
|
244
|
+
calculate_consumer_rebalance_latency_total(rd_kafka_t *rk,
|
|
245
|
+
rd_kafka_broker_t *rkb_selected,
|
|
246
|
+
rd_ts_t now_ns) {
|
|
247
|
+
rd_kafka_telemetry_metric_value_t total_rebalance_time;
|
|
248
|
+
total_rebalance_time.int_value = RD_CEIL_INTEGER_DIVISION(
|
|
249
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_rebalance_latency.ra_v.sum,
|
|
250
|
+
THREE_ORDERS_MAGNITUDE);
|
|
251
|
+
if (!rk->rk_telemetry.delta_temporality) {
|
|
252
|
+
total_rebalance_time.int_value +=
|
|
253
|
+
rk->rk_telemetry.rk_historic_c.rebalance_latency_total;
|
|
254
|
+
}
|
|
255
|
+
return total_rebalance_time;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
static rd_kafka_telemetry_metric_value_t
|
|
259
|
+
calculate_consumer_fetch_latency_avg(rd_kafka_t *rk,
|
|
260
|
+
rd_kafka_broker_t *rkb_selected,
|
|
261
|
+
rd_ts_t now_ns) {
|
|
262
|
+
rd_kafka_telemetry_metric_value_t avg_fetch_time;
|
|
263
|
+
brokers_avg(rk, rkb_avg_fetch_latency, THREE_ORDERS_MAGNITUDE,
|
|
264
|
+
avg_fetch_time);
|
|
265
|
+
return avg_fetch_time;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
static rd_kafka_telemetry_metric_value_t
|
|
269
|
+
calculate_consumer_fetch_latency_max(rd_kafka_t *rk,
|
|
270
|
+
rd_kafka_broker_t *rkb_selected,
|
|
271
|
+
rd_ts_t now_ns) {
|
|
272
|
+
rd_kafka_telemetry_metric_value_t max_fetch_time;
|
|
273
|
+
brokers_max(rk, rkb_avg_fetch_latency, THREE_ORDERS_MAGNITUDE,
|
|
274
|
+
max_fetch_time);
|
|
275
|
+
return max_fetch_time;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
static rd_kafka_telemetry_metric_value_t
|
|
279
|
+
calculate_consumer_poll_idle_ratio_avg(rd_kafka_t *rk,
|
|
280
|
+
rd_kafka_broker_t *rkb_selected,
|
|
281
|
+
rd_ts_t now_ns) {
|
|
282
|
+
rd_kafka_telemetry_metric_value_t avg_poll_idle_avg;
|
|
283
|
+
avg_poll_idle_avg.double_value = calculate_avg(
|
|
284
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_poll_idle_ratio, 1e6);
|
|
285
|
+
return avg_poll_idle_avg;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
static rd_kafka_telemetry_metric_value_t
|
|
289
|
+
calculate_consumer_commit_latency_avg(rd_kafka_t *rk,
|
|
290
|
+
rd_kafka_broker_t *rkb_selected,
|
|
291
|
+
rd_ts_t now_ns) {
|
|
292
|
+
rd_kafka_telemetry_metric_value_t avg_commit_time;
|
|
293
|
+
avg_commit_time.double_value = calculate_avg(
|
|
294
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_commit_latency,
|
|
295
|
+
THREE_ORDERS_MAGNITUDE);
|
|
296
|
+
return avg_commit_time;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
static rd_kafka_telemetry_metric_value_t
|
|
300
|
+
calculate_consumer_commit_latency_max(rd_kafka_t *rk,
|
|
301
|
+
rd_kafka_broker_t *rkb_selected,
|
|
302
|
+
rd_ts_t now_ns) {
|
|
303
|
+
rd_kafka_telemetry_metric_value_t max_commit_time;
|
|
304
|
+
max_commit_time.int_value = calculate_max(
|
|
305
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_commit_latency,
|
|
306
|
+
THREE_ORDERS_MAGNITUDE);
|
|
307
|
+
return max_commit_time;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
static rd_kafka_telemetry_metric_value_t
|
|
311
|
+
calculate_share_consumer_poll_idle_ratio_avg(rd_kafka_t *rk,
|
|
312
|
+
rd_kafka_broker_t *rkb_selected,
|
|
313
|
+
rd_ts_t now_ns) {
|
|
314
|
+
rd_kafka_telemetry_metric_value_t share_poll_idle_avg;
|
|
315
|
+
share_poll_idle_avg.double_value = calculate_avg(
|
|
316
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_share_poll_idle_ratio, 1e6);
|
|
317
|
+
return share_poll_idle_avg;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
static rd_kafka_telemetry_metric_value_t
|
|
321
|
+
calculate_share_time_between_poll_avg(rd_kafka_t *rk,
|
|
322
|
+
rd_kafka_broker_t *rkb_selected,
|
|
323
|
+
rd_ts_t now_ns) {
|
|
324
|
+
rd_kafka_telemetry_metric_value_t time_between_poll_avg;
|
|
325
|
+
time_between_poll_avg.double_value = calculate_avg(
|
|
326
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_share_time_between_poll,
|
|
327
|
+
THREE_ORDERS_MAGNITUDE);
|
|
328
|
+
return time_between_poll_avg;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
static rd_kafka_telemetry_metric_value_t
|
|
332
|
+
calculate_share_time_between_poll_max(rd_kafka_t *rk,
|
|
333
|
+
rd_kafka_broker_t *rkb_selected,
|
|
334
|
+
rd_ts_t now_ns) {
|
|
335
|
+
rd_kafka_telemetry_metric_value_t time_between_poll_max;
|
|
336
|
+
time_between_poll_max.int_value = calculate_max(
|
|
337
|
+
rk->rk_telemetry.rd_avg_rollover.rk_avg_share_time_between_poll,
|
|
338
|
+
THREE_ORDERS_MAGNITUDE);
|
|
339
|
+
return time_between_poll_max;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
static rd_kafka_telemetry_metric_value_t
|
|
343
|
+
calculate_share_fetch_latency_avg(rd_kafka_t *rk,
|
|
344
|
+
rd_kafka_broker_t *rkb_selected,
|
|
345
|
+
rd_ts_t now_ns) {
|
|
346
|
+
rd_kafka_telemetry_metric_value_t avg_share_fetch_latency;
|
|
347
|
+
brokers_avg(rk, rkb_avg_share_fetch_latency, THREE_ORDERS_MAGNITUDE,
|
|
348
|
+
avg_share_fetch_latency);
|
|
349
|
+
return avg_share_fetch_latency;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
static rd_kafka_telemetry_metric_value_t
|
|
353
|
+
calculate_share_fetch_latency_max(rd_kafka_t *rk,
|
|
354
|
+
rd_kafka_broker_t *rkb_selected,
|
|
355
|
+
rd_ts_t now_ns) {
|
|
356
|
+
rd_kafka_telemetry_metric_value_t max_share_fetch_latency;
|
|
357
|
+
brokers_max(rk, rkb_avg_share_fetch_latency, THREE_ORDERS_MAGNITUDE,
|
|
358
|
+
max_share_fetch_latency);
|
|
359
|
+
return max_share_fetch_latency;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
static rd_kafka_telemetry_metric_value_t
|
|
363
|
+
calculate_share_bytes_consumed_total(rd_kafka_t *rk,
|
|
364
|
+
rd_kafka_broker_t *rkb_selected,
|
|
365
|
+
rd_ts_t now_ns) {
|
|
366
|
+
rd_kafka_telemetry_metric_value_t bytes_consumed_total;
|
|
367
|
+
int64_t current =
|
|
368
|
+
rd_atomic64_get(&rk->rk_telemetry.share_bytes_consumed_total);
|
|
369
|
+
|
|
370
|
+
if (!rk->rk_telemetry.delta_temporality)
|
|
371
|
+
bytes_consumed_total.int_value = current;
|
|
372
|
+
else
|
|
373
|
+
bytes_consumed_total.int_value =
|
|
374
|
+
current -
|
|
375
|
+
rk->rk_telemetry.rk_historic_c.share_bytes_consumed_total;
|
|
376
|
+
|
|
377
|
+
return bytes_consumed_total;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
static rd_kafka_telemetry_metric_value_t
|
|
381
|
+
calculate_share_bytes_consumed_rate(rd_kafka_t *rk,
|
|
382
|
+
rd_kafka_broker_t *rkb_selected,
|
|
383
|
+
rd_ts_t now_ns) {
|
|
384
|
+
rd_kafka_telemetry_metric_value_t bytes_consumed_rate;
|
|
385
|
+
rd_ts_t ts_last = rk->rk_telemetry.rk_historic_c.ts_last;
|
|
386
|
+
int64_t delta =
|
|
387
|
+
rd_atomic64_get(&rk->rk_telemetry.share_bytes_consumed_total) -
|
|
388
|
+
rk->rk_telemetry.rk_historic_c.share_bytes_consumed_total;
|
|
389
|
+
double seconds = (now_ns - ts_last) / 1e9;
|
|
390
|
+
|
|
391
|
+
if (seconds > 1.0)
|
|
392
|
+
bytes_consumed_rate.double_value = (double)delta / seconds;
|
|
393
|
+
else
|
|
394
|
+
bytes_consumed_rate.double_value = (double)delta;
|
|
395
|
+
|
|
396
|
+
return bytes_consumed_rate;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
static rd_kafka_telemetry_metric_value_t
|
|
400
|
+
calculate_share_fetch_size_avg(rd_kafka_t *rk,
|
|
401
|
+
rd_kafka_broker_t *rkb_selected,
|
|
402
|
+
rd_ts_t now_ns) {
|
|
403
|
+
rd_kafka_telemetry_metric_value_t avg_share_fetch_size;
|
|
404
|
+
brokers_avg(rk, rkb_avg_share_fetch_size, 1, avg_share_fetch_size);
|
|
405
|
+
return avg_share_fetch_size;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
static rd_kafka_telemetry_metric_value_t
|
|
409
|
+
calculate_share_fetch_size_max(rd_kafka_t *rk,
|
|
410
|
+
rd_kafka_broker_t *rkb_selected,
|
|
411
|
+
rd_ts_t now_ns) {
|
|
412
|
+
rd_kafka_telemetry_metric_value_t max_share_fetch_size;
|
|
413
|
+
brokers_max(rk, rkb_avg_share_fetch_size, 1, max_share_fetch_size);
|
|
414
|
+
return max_share_fetch_size;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
static rd_kafka_telemetry_metric_value_t
|
|
418
|
+
calculate_share_fetch_total(rd_kafka_t *rk,
|
|
419
|
+
rd_kafka_broker_t *rkb_selected,
|
|
420
|
+
rd_ts_t now_ns) {
|
|
421
|
+
rd_kafka_telemetry_metric_value_t share_fetch_total;
|
|
422
|
+
int64_t current = rd_atomic64_get(&rk->rk_telemetry.share_fetch_total);
|
|
423
|
+
|
|
424
|
+
if (!rk->rk_telemetry.delta_temporality)
|
|
425
|
+
share_fetch_total.int_value = current;
|
|
426
|
+
else
|
|
427
|
+
share_fetch_total.int_value =
|
|
428
|
+
current - rk->rk_telemetry.rk_historic_c.share_fetch_total;
|
|
429
|
+
|
|
430
|
+
return share_fetch_total;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
static rd_kafka_telemetry_metric_value_t
|
|
434
|
+
calculate_share_fetch_rate(rd_kafka_t *rk,
|
|
435
|
+
rd_kafka_broker_t *rkb_selected,
|
|
436
|
+
rd_ts_t now_ns) {
|
|
437
|
+
rd_kafka_telemetry_metric_value_t share_fetch_rate;
|
|
438
|
+
rd_ts_t ts_last = rk->rk_telemetry.rk_historic_c.ts_last;
|
|
439
|
+
int64_t delta = rd_atomic64_get(&rk->rk_telemetry.share_fetch_total) -
|
|
440
|
+
rk->rk_telemetry.rk_historic_c.share_fetch_total;
|
|
441
|
+
double seconds = (now_ns - ts_last) / 1e9;
|
|
442
|
+
|
|
443
|
+
/* For sub-second intervals (e.g. the first reading) report the raw
|
|
444
|
+
* delta instead of dividing, to avoid a tiny denominator massively
|
|
445
|
+
* overstating the rate. Same logic as the other rate metrics. */
|
|
446
|
+
if (seconds > 1.0)
|
|
447
|
+
share_fetch_rate.double_value = (double)delta / seconds;
|
|
448
|
+
else
|
|
449
|
+
share_fetch_rate.double_value = (double)delta;
|
|
450
|
+
|
|
451
|
+
return share_fetch_rate;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
static rd_kafka_telemetry_metric_value_t
|
|
455
|
+
calculate_share_acknowledgements_send_total(rd_kafka_t *rk,
|
|
456
|
+
rd_kafka_broker_t *rkb_selected,
|
|
457
|
+
rd_ts_t now_ns) {
|
|
458
|
+
rd_kafka_telemetry_metric_value_t acknowledgements_send_total;
|
|
459
|
+
int64_t current =
|
|
460
|
+
rd_atomic64_get(&rk->rk_telemetry.acknowledgements_send_total);
|
|
461
|
+
|
|
462
|
+
if (!rk->rk_telemetry.delta_temporality)
|
|
463
|
+
acknowledgements_send_total.int_value = current;
|
|
464
|
+
else
|
|
465
|
+
acknowledgements_send_total.int_value =
|
|
466
|
+
current -
|
|
467
|
+
rk->rk_telemetry.rk_historic_c.acknowledgements_send_total;
|
|
468
|
+
|
|
469
|
+
return acknowledgements_send_total;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
static rd_kafka_telemetry_metric_value_t
|
|
473
|
+
calculate_share_acknowledgements_send_rate(rd_kafka_t *rk,
|
|
474
|
+
rd_kafka_broker_t *rkb_selected,
|
|
475
|
+
rd_ts_t now_ns) {
|
|
476
|
+
rd_kafka_telemetry_metric_value_t acknowledgements_send_rate;
|
|
477
|
+
rd_ts_t ts_last = rk->rk_telemetry.rk_historic_c.ts_last;
|
|
478
|
+
int64_t delta =
|
|
479
|
+
rd_atomic64_get(&rk->rk_telemetry.acknowledgements_send_total) -
|
|
480
|
+
rk->rk_telemetry.rk_historic_c.acknowledgements_send_total;
|
|
481
|
+
double seconds = (now_ns - ts_last) / 1e9;
|
|
482
|
+
|
|
483
|
+
/* For sub-second intervals (e.g. the first reading) report the raw
|
|
484
|
+
* delta instead of dividing, to avoid a tiny denominator massively
|
|
485
|
+
* overstating the rate. Same logic as the other rate metrics. */
|
|
486
|
+
if (seconds > 1.0)
|
|
487
|
+
acknowledgements_send_rate.double_value =
|
|
488
|
+
(double)delta / seconds;
|
|
489
|
+
else
|
|
490
|
+
acknowledgements_send_rate.double_value = (double)delta;
|
|
491
|
+
|
|
492
|
+
return acknowledgements_send_rate;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
static rd_kafka_telemetry_metric_value_t
|
|
496
|
+
calculate_share_heartbeat_total(rd_kafka_t *rk,
|
|
497
|
+
rd_kafka_broker_t *rkb_selected,
|
|
498
|
+
rd_ts_t now_ns) {
|
|
499
|
+
rd_kafka_telemetry_metric_value_t heartbeat_total;
|
|
500
|
+
int64_t current = rd_atomic64_get(&rk->rk_telemetry.heartbeat_total);
|
|
501
|
+
|
|
502
|
+
if (!rk->rk_telemetry.delta_temporality)
|
|
503
|
+
heartbeat_total.int_value = current;
|
|
504
|
+
else
|
|
505
|
+
heartbeat_total.int_value =
|
|
506
|
+
current - rk->rk_telemetry.rk_historic_c.heartbeat_total;
|
|
507
|
+
|
|
508
|
+
return heartbeat_total;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
static rd_kafka_telemetry_metric_value_t
|
|
512
|
+
calculate_share_heartbeat_rate(rd_kafka_t *rk,
|
|
513
|
+
rd_kafka_broker_t *rkb_selected,
|
|
514
|
+
rd_ts_t now_ns) {
|
|
515
|
+
rd_kafka_telemetry_metric_value_t heartbeat_rate;
|
|
516
|
+
rd_ts_t ts_last = rk->rk_telemetry.rk_historic_c.ts_last;
|
|
517
|
+
int64_t delta = rd_atomic64_get(&rk->rk_telemetry.heartbeat_total) -
|
|
518
|
+
rk->rk_telemetry.rk_historic_c.heartbeat_total;
|
|
519
|
+
double seconds = (now_ns - ts_last) / 1e9;
|
|
520
|
+
|
|
521
|
+
if (seconds > 1.0)
|
|
522
|
+
heartbeat_rate.double_value = (double)delta / seconds;
|
|
523
|
+
else
|
|
524
|
+
heartbeat_rate.double_value = (double)delta;
|
|
525
|
+
|
|
526
|
+
return heartbeat_rate;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
static void reset_historical_metrics(rd_kafka_t *rk, rd_ts_t now_ns) {
|
|
530
|
+
rd_kafka_broker_t *rkb;
|
|
531
|
+
|
|
532
|
+
rk->rk_telemetry.rk_historic_c.ts_last = now_ns;
|
|
533
|
+
rk->rk_telemetry.rk_historic_c.rebalance_latency_total +=
|
|
534
|
+
RD_CEIL_INTEGER_DIVISION(rk->rk_telemetry.rd_avg_rollover
|
|
535
|
+
.rk_avg_rebalance_latency.ra_v.sum,
|
|
536
|
+
THREE_ORDERS_MAGNITUDE);
|
|
537
|
+
|
|
538
|
+
TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
|
|
539
|
+
rkb->rkb_telemetry.rkb_historic_c.connects =
|
|
540
|
+
rd_atomic32_get(&rkb->rkb_c.connects);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (RD_KAFKA_IS_SHARE_CONSUMER(rk)) {
|
|
544
|
+
rk->rk_telemetry.rk_historic_c.share_fetch_total =
|
|
545
|
+
rd_atomic64_get(&rk->rk_telemetry.share_fetch_total);
|
|
546
|
+
rk->rk_telemetry.rk_historic_c.share_bytes_consumed_total =
|
|
547
|
+
rd_atomic64_get(
|
|
548
|
+
&rk->rk_telemetry.share_bytes_consumed_total);
|
|
549
|
+
rk->rk_telemetry.rk_historic_c.acknowledgements_send_total =
|
|
550
|
+
rd_atomic64_get(
|
|
551
|
+
&rk->rk_telemetry.acknowledgements_send_total);
|
|
552
|
+
rk->rk_telemetry.rk_historic_c.heartbeat_total =
|
|
553
|
+
rd_atomic64_get(&rk->rk_telemetry.heartbeat_total);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
static const rd_kafka_telemetry_metric_value_calculator_t
|
|
558
|
+
PRODUCER_METRIC_VALUE_CALCULATORS[RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT] =
|
|
559
|
+
{
|
|
560
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_CONNECTION_CREATION_RATE] =
|
|
561
|
+
&calculate_connection_creation_rate,
|
|
562
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_CONNECTION_CREATION_TOTAL] =
|
|
563
|
+
&calculate_connection_creation_total,
|
|
564
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_NODE_REQUEST_LATENCY_AVG] =
|
|
565
|
+
&calculate_broker_avg_rtt,
|
|
566
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_NODE_REQUEST_LATENCY_MAX] =
|
|
567
|
+
&calculate_broker_max_rtt,
|
|
568
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_THROTTLE_TIME_AVG] =
|
|
569
|
+
&calculate_throttle_avg,
|
|
570
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_THROTTLE_TIME_MAX] =
|
|
571
|
+
&calculate_throttle_max,
|
|
572
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_RECORD_QUEUE_TIME_AVG] =
|
|
573
|
+
&calculate_queue_time_avg,
|
|
574
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_RECORD_QUEUE_TIME_MAX] =
|
|
575
|
+
&calculate_queue_time_max,
|
|
576
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_LATENCY_AVG] =
|
|
577
|
+
&calculate_produce_latency_avg,
|
|
578
|
+
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_LATENCY_MAX] =
|
|
579
|
+
&calculate_produce_latency_max,
|
|
580
|
+
};
|
|
581
|
+
|
|
582
|
+
static const rd_kafka_telemetry_metric_value_calculator_t
|
|
583
|
+
CONSUMER_METRIC_VALUE_CALCULATORS[RD_KAFKA_TELEMETRY_CONSUMER_METRIC__CNT] = {
|
|
584
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_CONNECTION_CREATION_RATE] =
|
|
585
|
+
&calculate_connection_creation_rate,
|
|
586
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_CONNECTION_CREATION_TOTAL] =
|
|
587
|
+
&calculate_connection_creation_total,
|
|
588
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_NODE_REQUEST_LATENCY_AVG] =
|
|
589
|
+
&calculate_broker_avg_rtt,
|
|
590
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_NODE_REQUEST_LATENCY_MAX] =
|
|
591
|
+
&calculate_broker_max_rtt,
|
|
592
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_ASSIGNED_PARTITIONS] =
|
|
593
|
+
&calculate_consumer_assigned_partitions,
|
|
594
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_AVG] =
|
|
595
|
+
&calculate_consumer_rebalance_latency_avg,
|
|
596
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_MAX] =
|
|
597
|
+
&calculate_consumer_rebalance_latency_max,
|
|
598
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_TOTAL] =
|
|
599
|
+
&calculate_consumer_rebalance_latency_total,
|
|
600
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_FETCH_MANAGER_FETCH_LATENCY_AVG] =
|
|
601
|
+
&calculate_consumer_fetch_latency_avg,
|
|
602
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_FETCH_MANAGER_FETCH_LATENCY_MAX] =
|
|
603
|
+
&calculate_consumer_fetch_latency_max,
|
|
604
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_POLL_IDLE_RATIO_AVG] =
|
|
605
|
+
&calculate_consumer_poll_idle_ratio_avg,
|
|
606
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_COMMIT_LATENCY_AVG] =
|
|
607
|
+
&calculate_consumer_commit_latency_avg,
|
|
608
|
+
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_COMMIT_LATENCY_MAX] =
|
|
609
|
+
&calculate_consumer_commit_latency_max,
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
static const rd_kafka_telemetry_metric_value_calculator_t SHARE_CONSUMER_METRIC_VALUE_CALCULATORS
|
|
613
|
+
[RD_KAFKA_TELEMETRY_SHARE_CONSUMER_METRIC__CNT] = {
|
|
614
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_POLL_IDLE_RATIO_AVG] =
|
|
615
|
+
&calculate_share_consumer_poll_idle_ratio_avg,
|
|
616
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_TIME_BETWEEN_POLL_AVG] =
|
|
617
|
+
&calculate_share_time_between_poll_avg,
|
|
618
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_TIME_BETWEEN_POLL_MAX] =
|
|
619
|
+
&calculate_share_time_between_poll_max,
|
|
620
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_TOTAL] =
|
|
621
|
+
&calculate_share_fetch_total,
|
|
622
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_RATE] =
|
|
623
|
+
&calculate_share_fetch_rate,
|
|
624
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_LATENCY_AVG] =
|
|
625
|
+
&calculate_share_fetch_latency_avg,
|
|
626
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_LATENCY_MAX] =
|
|
627
|
+
&calculate_share_fetch_latency_max,
|
|
628
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_ACKNOWLEDGEMENTS_SEND_TOTAL] =
|
|
629
|
+
&calculate_share_acknowledgements_send_total,
|
|
630
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_ACKNOWLEDGEMENTS_SEND_RATE] =
|
|
631
|
+
&calculate_share_acknowledgements_send_rate,
|
|
632
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_THROTTLE_TIME_AVG] =
|
|
633
|
+
&calculate_throttle_avg,
|
|
634
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_THROTTLE_TIME_MAX] =
|
|
635
|
+
&calculate_throttle_max,
|
|
636
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_COORDINATOR_HEARTBEAT_TOTAL] =
|
|
637
|
+
&calculate_share_heartbeat_total,
|
|
638
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_COORDINATOR_HEARTBEAT_RATE] =
|
|
639
|
+
&calculate_share_heartbeat_rate,
|
|
640
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_SIZE_AVG] =
|
|
641
|
+
&calculate_share_fetch_size_avg,
|
|
642
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_FETCH_SIZE_MAX] =
|
|
643
|
+
&calculate_share_fetch_size_max,
|
|
644
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_BYTES_CONSUMED_TOTAL] =
|
|
645
|
+
&calculate_share_bytes_consumed_total,
|
|
646
|
+
[RD_KAFKA_TELEMETRY_METRIC_SHARE_CONSUMER_BYTES_CONSUMED_RATE] =
|
|
647
|
+
&calculate_share_bytes_consumed_rate,
|
|
648
|
+
};
|
|
649
|
+
|
|
650
|
+
static const char *get_client_rack(const rd_kafka_t *rk) {
|
|
651
|
+
return rk->rk_conf.client_rack &&
|
|
652
|
+
RD_KAFKAP_STR_LEN(rk->rk_conf.client_rack)
|
|
653
|
+
? (const char *)rk->rk_conf.client_rack->str
|
|
654
|
+
: NULL;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
static const char *get_group_id(const rd_kafka_t *rk) {
|
|
658
|
+
return rk->rk_conf.group_id_str ? (const char *)rk->rk_conf.group_id_str
|
|
659
|
+
: NULL;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
static const char *get_group_instance_id(const rd_kafka_t *rk) {
|
|
663
|
+
return rk->rk_conf.group_instance_id
|
|
664
|
+
? (const char *)rk->rk_conf.group_instance_id
|
|
665
|
+
: NULL;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
static const char *get_member_id(const rd_kafka_t *rk) {
|
|
669
|
+
return rk->rk_cgrp && rk->rk_cgrp->rkcg_member_id &&
|
|
670
|
+
rk->rk_cgrp->rkcg_member_id->len > 0
|
|
671
|
+
? (const char *)rk->rk_cgrp->rkcg_member_id->str
|
|
672
|
+
: NULL;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
static const char *get_transactional_id(const rd_kafka_t *rk) {
|
|
676
|
+
return rk->rk_conf.eos.transactional_id
|
|
677
|
+
? (const char *)rk->rk_conf.eos.transactional_id
|
|
678
|
+
: NULL;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
static const rd_kafka_telemetry_attribute_config_t producer_attributes[] = {
|
|
682
|
+
{"client_rack", get_client_rack},
|
|
683
|
+
{"transactional_id", get_transactional_id},
|
|
684
|
+
};
|
|
685
|
+
|
|
686
|
+
static const rd_kafka_telemetry_attribute_config_t consumer_attributes[] = {
|
|
687
|
+
{"client_rack", get_client_rack},
|
|
688
|
+
{"group_id", get_group_id},
|
|
689
|
+
{"group_instance_id", get_group_instance_id},
|
|
690
|
+
{"member_id", get_member_id},
|
|
691
|
+
};
|
|
692
|
+
|
|
693
|
+
static int
|
|
694
|
+
count_attributes(rd_kafka_t *rk,
|
|
695
|
+
const rd_kafka_telemetry_attribute_config_t *configs,
|
|
696
|
+
int config_count) {
|
|
697
|
+
int count = 0, i;
|
|
698
|
+
for (i = 0; i < config_count; ++i) {
|
|
699
|
+
if (configs[i].getValue(rk)) {
|
|
700
|
+
count++;
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
return count;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
static void set_attributes(rd_kafka_t *rk,
|
|
707
|
+
rd_kafka_telemetry_resource_attribute_t *attributes,
|
|
708
|
+
const rd_kafka_telemetry_attribute_config_t *configs,
|
|
709
|
+
int config_count) {
|
|
710
|
+
int attr_idx = 0, i;
|
|
711
|
+
for (i = 0; i < config_count; ++i) {
|
|
712
|
+
const char *value = configs[i].getValue(rk);
|
|
713
|
+
if (value) {
|
|
714
|
+
attributes[attr_idx].name = configs[i].name;
|
|
715
|
+
attributes[attr_idx].value = value;
|
|
716
|
+
attr_idx++;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
static int
|
|
722
|
+
resource_attributes(rd_kafka_t *rk,
|
|
723
|
+
rd_kafka_telemetry_resource_attribute_t **attributes) {
|
|
724
|
+
int count = 0;
|
|
725
|
+
const rd_kafka_telemetry_attribute_config_t *configs;
|
|
726
|
+
int config_count;
|
|
727
|
+
|
|
728
|
+
if (rk->rk_type == RD_KAFKA_PRODUCER) {
|
|
729
|
+
configs = producer_attributes;
|
|
730
|
+
config_count = RD_ARRAY_SIZE(producer_attributes);
|
|
731
|
+
} else if (rk->rk_type == RD_KAFKA_CONSUMER) {
|
|
732
|
+
configs = consumer_attributes;
|
|
733
|
+
config_count = RD_ARRAY_SIZE(consumer_attributes);
|
|
734
|
+
} else {
|
|
735
|
+
*attributes = NULL;
|
|
736
|
+
return 0;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
count = count_attributes(rk, configs, config_count);
|
|
740
|
+
|
|
741
|
+
if (count == 0) {
|
|
742
|
+
*attributes = NULL;
|
|
743
|
+
return 0;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
*attributes =
|
|
747
|
+
rd_malloc(sizeof(rd_kafka_telemetry_resource_attribute_t) * count);
|
|
748
|
+
|
|
749
|
+
set_attributes(rk, *attributes, configs, config_count);
|
|
750
|
+
|
|
751
|
+
return count;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
static bool
|
|
755
|
+
encode_string(pb_ostream_t *stream, const pb_field_t *field, void *const *arg) {
|
|
756
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
757
|
+
return false;
|
|
758
|
+
return pb_encode_string(stream, (uint8_t *)(*arg), strlen(*arg));
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
// TODO: Update to handle multiple data points.
|
|
762
|
+
static bool encode_number_data_point(pb_ostream_t *stream,
|
|
763
|
+
const pb_field_t *field,
|
|
764
|
+
void *const *arg) {
|
|
765
|
+
opentelemetry_proto_metrics_v1_NumberDataPoint *data_point =
|
|
766
|
+
(opentelemetry_proto_metrics_v1_NumberDataPoint *)*arg;
|
|
767
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
768
|
+
return false;
|
|
769
|
+
|
|
770
|
+
return pb_encode_submessage(
|
|
771
|
+
stream, opentelemetry_proto_metrics_v1_NumberDataPoint_fields,
|
|
772
|
+
data_point);
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
static bool
|
|
776
|
+
encode_metric(pb_ostream_t *stream, const pb_field_t *field, void *const *arg) {
|
|
777
|
+
rd_kafka_telemetry_metrics_repeated_t *metricArr =
|
|
778
|
+
(rd_kafka_telemetry_metrics_repeated_t *)*arg;
|
|
779
|
+
size_t i;
|
|
780
|
+
|
|
781
|
+
for (i = 0; i < metricArr->count; i++) {
|
|
782
|
+
|
|
783
|
+
opentelemetry_proto_metrics_v1_Metric *metric =
|
|
784
|
+
metricArr->metrics[i];
|
|
785
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
786
|
+
return false;
|
|
787
|
+
|
|
788
|
+
if (!pb_encode_submessage(
|
|
789
|
+
stream, opentelemetry_proto_metrics_v1_Metric_fields,
|
|
790
|
+
metric))
|
|
791
|
+
return false;
|
|
792
|
+
}
|
|
793
|
+
return true;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
static bool encode_scope_metrics(pb_ostream_t *stream,
|
|
797
|
+
const pb_field_t *field,
|
|
798
|
+
void *const *arg) {
|
|
799
|
+
opentelemetry_proto_metrics_v1_ScopeMetrics *scope_metrics =
|
|
800
|
+
(opentelemetry_proto_metrics_v1_ScopeMetrics *)*arg;
|
|
801
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
802
|
+
return false;
|
|
803
|
+
|
|
804
|
+
return pb_encode_submessage(
|
|
805
|
+
stream, opentelemetry_proto_metrics_v1_ScopeMetrics_fields,
|
|
806
|
+
scope_metrics);
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
static bool encode_resource_metrics(pb_ostream_t *stream,
|
|
810
|
+
const pb_field_t *field,
|
|
811
|
+
void *const *arg) {
|
|
812
|
+
opentelemetry_proto_metrics_v1_ResourceMetrics *resource_metrics =
|
|
813
|
+
(opentelemetry_proto_metrics_v1_ResourceMetrics *)*arg;
|
|
814
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
815
|
+
return false;
|
|
816
|
+
|
|
817
|
+
return pb_encode_submessage(
|
|
818
|
+
stream, opentelemetry_proto_metrics_v1_ResourceMetrics_fields,
|
|
819
|
+
resource_metrics);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
static bool encode_key_value(pb_ostream_t *stream,
|
|
823
|
+
const pb_field_t *field,
|
|
824
|
+
void *const *arg) {
|
|
825
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
826
|
+
return false;
|
|
827
|
+
opentelemetry_proto_common_v1_KeyValue *key_value =
|
|
828
|
+
(opentelemetry_proto_common_v1_KeyValue *)*arg;
|
|
829
|
+
return pb_encode_submessage(
|
|
830
|
+
stream, opentelemetry_proto_common_v1_KeyValue_fields, key_value);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
static bool encode_key_values(pb_ostream_t *stream,
|
|
834
|
+
const pb_field_t *field,
|
|
835
|
+
void *const *arg) {
|
|
836
|
+
rd_kafka_telemetry_key_values_repeated_t *kv_arr =
|
|
837
|
+
(rd_kafka_telemetry_key_values_repeated_t *)*arg;
|
|
838
|
+
size_t i;
|
|
839
|
+
|
|
840
|
+
for (i = 0; i < kv_arr->count; i++) {
|
|
841
|
+
|
|
842
|
+
opentelemetry_proto_common_v1_KeyValue *kv =
|
|
843
|
+
kv_arr->key_values[i];
|
|
844
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
845
|
+
return false;
|
|
846
|
+
|
|
847
|
+
if (!pb_encode_submessage(
|
|
848
|
+
stream, opentelemetry_proto_common_v1_KeyValue_fields,
|
|
849
|
+
kv))
|
|
850
|
+
return false;
|
|
851
|
+
}
|
|
852
|
+
return true;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
static void free_metrics(
|
|
856
|
+
opentelemetry_proto_metrics_v1_Metric **metrics,
|
|
857
|
+
char **metric_names,
|
|
858
|
+
opentelemetry_proto_metrics_v1_NumberDataPoint **data_points,
|
|
859
|
+
opentelemetry_proto_common_v1_KeyValue *datapoint_attributes_key_values,
|
|
860
|
+
size_t count) {
|
|
861
|
+
size_t i;
|
|
862
|
+
for (i = 0; i < count; i++) {
|
|
863
|
+
rd_free(data_points[i]);
|
|
864
|
+
rd_free(metric_names[i]);
|
|
865
|
+
rd_free(metrics[i]);
|
|
866
|
+
}
|
|
867
|
+
rd_free(data_points);
|
|
868
|
+
rd_free(metric_names);
|
|
869
|
+
rd_free(metrics);
|
|
870
|
+
rd_free(datapoint_attributes_key_values);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
static void free_resource_attributes(
|
|
874
|
+
opentelemetry_proto_common_v1_KeyValue **resource_attributes_key_values,
|
|
875
|
+
rd_kafka_telemetry_resource_attribute_t *resource_attributes_struct,
|
|
876
|
+
size_t count) {
|
|
877
|
+
size_t i;
|
|
878
|
+
if (count == 0)
|
|
879
|
+
return;
|
|
880
|
+
for (i = 0; i < count; i++)
|
|
881
|
+
rd_free(resource_attributes_key_values[i]);
|
|
882
|
+
rd_free(resource_attributes_struct);
|
|
883
|
+
rd_free(resource_attributes_key_values);
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
static void serialize_Metric(
|
|
887
|
+
rd_kafka_t *rk,
|
|
888
|
+
rd_kafka_broker_t *rkb,
|
|
889
|
+
const rd_kafka_telemetry_metric_info_t *info,
|
|
890
|
+
opentelemetry_proto_metrics_v1_Metric **metric,
|
|
891
|
+
opentelemetry_proto_metrics_v1_NumberDataPoint **data_point,
|
|
892
|
+
opentelemetry_proto_common_v1_KeyValue *data_point_attribute,
|
|
893
|
+
rd_kafka_telemetry_metric_value_calculator_t metric_value_calculator,
|
|
894
|
+
char **metric_name,
|
|
895
|
+
bool is_per_broker,
|
|
896
|
+
rd_ts_t now_ns) {
|
|
897
|
+
rd_ts_t ts_last = rk->rk_telemetry.rk_historic_c.ts_last,
|
|
898
|
+
ts_start = rk->rk_telemetry.rk_historic_c.ts_start;
|
|
899
|
+
size_t metric_name_len;
|
|
900
|
+
if (info->is_int) {
|
|
901
|
+
(*data_point)->which_value =
|
|
902
|
+
opentelemetry_proto_metrics_v1_NumberDataPoint_as_int_tag;
|
|
903
|
+
(*data_point)->value.as_int =
|
|
904
|
+
metric_value_calculator(rk, rkb, now_ns).int_value;
|
|
905
|
+
} else {
|
|
906
|
+
(*data_point)->which_value =
|
|
907
|
+
opentelemetry_proto_metrics_v1_NumberDataPoint_as_double_tag;
|
|
908
|
+
(*data_point)->value.as_double =
|
|
909
|
+
metric_value_calculator(rk, rkb, now_ns).double_value;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
(*data_point)->time_unix_nano = now_ns;
|
|
914
|
+
if (info->type == RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE ||
|
|
915
|
+
(info->type == RD_KAFKA_TELEMETRY_METRIC_TYPE_SUM &&
|
|
916
|
+
rk->rk_telemetry.delta_temporality))
|
|
917
|
+
(*data_point)->start_time_unix_nano = ts_last;
|
|
918
|
+
else
|
|
919
|
+
(*data_point)->start_time_unix_nano = ts_start;
|
|
920
|
+
|
|
921
|
+
if (is_per_broker) {
|
|
922
|
+
data_point_attribute->key.funcs.encode = &encode_string;
|
|
923
|
+
data_point_attribute->key.arg =
|
|
924
|
+
RD_KAFKA_TELEMETRY_METRIC_NODE_ID_ATTRIBUTE;
|
|
925
|
+
data_point_attribute->has_value = true;
|
|
926
|
+
data_point_attribute->value.which_value =
|
|
927
|
+
opentelemetry_proto_common_v1_AnyValue_int_value_tag;
|
|
928
|
+
|
|
929
|
+
rd_kafka_broker_lock(rkb);
|
|
930
|
+
data_point_attribute->value.value.int_value = rkb->rkb_nodeid;
|
|
931
|
+
rd_kafka_broker_unlock(rkb);
|
|
932
|
+
|
|
933
|
+
(*data_point)->attributes.funcs.encode = &encode_key_value;
|
|
934
|
+
(*data_point)->attributes.arg = data_point_attribute;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
|
|
938
|
+
switch (info->type) {
|
|
939
|
+
|
|
940
|
+
case RD_KAFKA_TELEMETRY_METRIC_TYPE_SUM: {
|
|
941
|
+
(*metric)->which_data =
|
|
942
|
+
opentelemetry_proto_metrics_v1_Metric_sum_tag;
|
|
943
|
+
(*metric)->data.sum.data_points.funcs.encode =
|
|
944
|
+
&encode_number_data_point;
|
|
945
|
+
(*metric)->data.sum.data_points.arg = *data_point;
|
|
946
|
+
(*metric)->data.sum.aggregation_temporality =
|
|
947
|
+
rk->rk_telemetry.delta_temporality
|
|
948
|
+
? opentelemetry_proto_metrics_v1_AggregationTemporality_AGGREGATION_TEMPORALITY_DELTA
|
|
949
|
+
: opentelemetry_proto_metrics_v1_AggregationTemporality_AGGREGATION_TEMPORALITY_CUMULATIVE;
|
|
950
|
+
(*metric)->data.sum.is_monotonic = true;
|
|
951
|
+
break;
|
|
952
|
+
}
|
|
953
|
+
case RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE: {
|
|
954
|
+
(*metric)->which_data =
|
|
955
|
+
opentelemetry_proto_metrics_v1_Metric_gauge_tag;
|
|
956
|
+
(*metric)->data.gauge.data_points.funcs.encode =
|
|
957
|
+
&encode_number_data_point;
|
|
958
|
+
(*metric)->data.gauge.data_points.arg = *data_point;
|
|
959
|
+
break;
|
|
960
|
+
}
|
|
961
|
+
default:
|
|
962
|
+
rd_assert(!"Unknown metric type");
|
|
963
|
+
break;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
(*metric)->description.funcs.encode = &encode_string;
|
|
967
|
+
(*metric)->description.arg = (void *)info->description;
|
|
968
|
+
|
|
969
|
+
metric_name_len =
|
|
970
|
+
strlen(RD_KAFKA_TELEMETRY_METRIC_PREFIX) + strlen(info->name) + 1;
|
|
971
|
+
*metric_name = rd_calloc(1, metric_name_len);
|
|
972
|
+
rd_snprintf(*metric_name, metric_name_len, "%s%s",
|
|
973
|
+
RD_KAFKA_TELEMETRY_METRIC_PREFIX, info->name);
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
(*metric)->name.funcs.encode = &encode_string;
|
|
977
|
+
(*metric)->name.arg = *metric_name;
|
|
978
|
+
|
|
979
|
+
/* Skipping unit as Java client does the same */
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
/**
|
|
983
|
+
* @brief Encodes the metrics to opentelemetry_proto_metrics_v1_MetricsData and
|
|
984
|
+
* returns the serialized data. Currently only supports encoding of connection
|
|
985
|
+
* creation total by default
|
|
986
|
+
*
|
|
987
|
+
* @locks none
|
|
988
|
+
* @locks_acquired rd_kafka_rdlock()
|
|
989
|
+
* @locality main thread
|
|
990
|
+
*/
|
|
991
|
+
rd_buf_t *rd_kafka_telemetry_encode_metrics(rd_kafka_t *rk) {
|
|
992
|
+
rd_buf_t *rbuf = NULL;
|
|
993
|
+
rd_kafka_broker_t *rkb;
|
|
994
|
+
size_t message_size;
|
|
995
|
+
void *buffer = NULL;
|
|
996
|
+
pb_ostream_t stream;
|
|
997
|
+
bool status;
|
|
998
|
+
char **metric_names;
|
|
999
|
+
const int *metrics_to_encode = rk->rk_telemetry.matched_metrics;
|
|
1000
|
+
const size_t metrics_to_encode_count =
|
|
1001
|
+
rk->rk_telemetry.matched_metrics_cnt;
|
|
1002
|
+
const rd_kafka_telemetry_metric_info_t *info =
|
|
1003
|
+
RD_KAFKA_TELEMETRY_METRIC_INFO(rk);
|
|
1004
|
+
size_t total_metrics_count = metrics_to_encode_count;
|
|
1005
|
+
size_t i, metric_idx = 0;
|
|
1006
|
+
|
|
1007
|
+
if (!metrics_to_encode_count)
|
|
1008
|
+
return rd_buf_new(1, 1);
|
|
1009
|
+
|
|
1010
|
+
opentelemetry_proto_metrics_v1_MetricsData metrics_data =
|
|
1011
|
+
opentelemetry_proto_metrics_v1_MetricsData_init_zero;
|
|
1012
|
+
|
|
1013
|
+
opentelemetry_proto_metrics_v1_ResourceMetrics resource_metrics =
|
|
1014
|
+
opentelemetry_proto_metrics_v1_ResourceMetrics_init_zero;
|
|
1015
|
+
|
|
1016
|
+
opentelemetry_proto_metrics_v1_Metric **metrics;
|
|
1017
|
+
opentelemetry_proto_common_v1_KeyValue *
|
|
1018
|
+
*resource_attributes_key_values = NULL;
|
|
1019
|
+
opentelemetry_proto_common_v1_KeyValue
|
|
1020
|
+
*datapoint_attributes_key_values = NULL;
|
|
1021
|
+
opentelemetry_proto_metrics_v1_NumberDataPoint **data_points;
|
|
1022
|
+
rd_kafka_telemetry_metrics_repeated_t metrics_repeated;
|
|
1023
|
+
rd_kafka_telemetry_key_values_repeated_t resource_attributes_repeated;
|
|
1024
|
+
rd_kafka_telemetry_resource_attribute_t *resource_attributes_struct =
|
|
1025
|
+
NULL;
|
|
1026
|
+
rd_ts_t now_ns = rd_uclock() * 1000;
|
|
1027
|
+
rd_kafka_rdlock(rk);
|
|
1028
|
+
|
|
1029
|
+
for (i = 0; i < metrics_to_encode_count; i++) {
|
|
1030
|
+
if (info[metrics_to_encode[i]].is_per_broker) {
|
|
1031
|
+
total_metrics_count += rk->rk_broker_cnt.val - 1;
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH", "Serializing metrics");
|
|
1036
|
+
|
|
1037
|
+
TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
|
|
1038
|
+
rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_rtt);
|
|
1039
|
+
rd_avg_rollover(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_rtt,
|
|
1040
|
+
&rkb->rkb_telemetry.rd_avg_current.rkb_avg_rtt);
|
|
1041
|
+
rd_avg_destroy(
|
|
1042
|
+
&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_outbuf_latency);
|
|
1043
|
+
rd_avg_rollover(
|
|
1044
|
+
&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_outbuf_latency,
|
|
1045
|
+
&rkb->rkb_telemetry.rd_avg_current.rkb_avg_outbuf_latency);
|
|
1046
|
+
rd_avg_destroy(
|
|
1047
|
+
&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_throttle);
|
|
1048
|
+
rd_avg_rollover(
|
|
1049
|
+
&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_throttle,
|
|
1050
|
+
&rkb->rkb_telemetry.rd_avg_current.rkb_avg_throttle);
|
|
1051
|
+
if (rk->rk_type == RD_KAFKA_CONSUMER &&
|
|
1052
|
+
!RD_KAFKA_IS_SHARE_CONSUMER(rk)) {
|
|
1053
|
+
rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1054
|
+
.rkb_avg_fetch_latency);
|
|
1055
|
+
rd_avg_rollover(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1056
|
+
.rkb_avg_fetch_latency,
|
|
1057
|
+
&rkb->rkb_telemetry.rd_avg_current
|
|
1058
|
+
.rkb_avg_fetch_latency);
|
|
1059
|
+
} else if (rk->rk_type == RD_KAFKA_PRODUCER) {
|
|
1060
|
+
rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1061
|
+
.rkb_avg_produce_latency);
|
|
1062
|
+
rd_avg_rollover(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1063
|
+
.rkb_avg_produce_latency,
|
|
1064
|
+
&rkb->rkb_telemetry.rd_avg_current
|
|
1065
|
+
.rkb_avg_produce_latency);
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
if (RD_KAFKA_IS_SHARE_CONSUMER(rk)) {
|
|
1069
|
+
rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1070
|
+
.rkb_avg_share_fetch_latency);
|
|
1071
|
+
rd_avg_rollover(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1072
|
+
.rkb_avg_share_fetch_latency,
|
|
1073
|
+
&rkb->rkb_telemetry.rd_avg_current
|
|
1074
|
+
.rkb_avg_share_fetch_latency);
|
|
1075
|
+
rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1076
|
+
.rkb_avg_share_fetch_size);
|
|
1077
|
+
rd_avg_rollover(&rkb->rkb_telemetry.rd_avg_rollover
|
|
1078
|
+
.rkb_avg_share_fetch_size,
|
|
1079
|
+
&rkb->rkb_telemetry.rd_avg_current
|
|
1080
|
+
.rkb_avg_share_fetch_size);
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
if (rk->rk_type == RD_KAFKA_CONSUMER) {
|
|
1085
|
+
/* TODO: factor out a helper that performs the destroy +
|
|
1086
|
+
* rollover of a metric's rd_avg_rollover/rd_avg_current pair
|
|
1087
|
+
* in one call, to reduce the repetition below. */
|
|
1088
|
+
if (RD_KAFKA_IS_SHARE_CONSUMER(rk)) {
|
|
1089
|
+
rd_avg_destroy(&rk->rk_telemetry.rd_avg_rollover
|
|
1090
|
+
.rk_avg_share_poll_idle_ratio);
|
|
1091
|
+
rd_avg_rollover(&rk->rk_telemetry.rd_avg_rollover
|
|
1092
|
+
.rk_avg_share_poll_idle_ratio,
|
|
1093
|
+
&rk->rk_telemetry.rd_avg_current
|
|
1094
|
+
.rk_avg_share_poll_idle_ratio);
|
|
1095
|
+
rd_avg_destroy(&rk->rk_telemetry.rd_avg_rollover
|
|
1096
|
+
.rk_avg_share_time_between_poll);
|
|
1097
|
+
rd_avg_rollover(&rk->rk_telemetry.rd_avg_rollover
|
|
1098
|
+
.rk_avg_share_time_between_poll,
|
|
1099
|
+
&rk->rk_telemetry.rd_avg_current
|
|
1100
|
+
.rk_avg_share_time_between_poll);
|
|
1101
|
+
} else {
|
|
1102
|
+
rd_avg_destroy(&rk->rk_telemetry.rd_avg_rollover
|
|
1103
|
+
.rk_avg_poll_idle_ratio);
|
|
1104
|
+
rd_avg_rollover(&rk->rk_telemetry.rd_avg_rollover
|
|
1105
|
+
.rk_avg_poll_idle_ratio,
|
|
1106
|
+
&rk->rk_telemetry.rd_avg_current
|
|
1107
|
+
.rk_avg_poll_idle_ratio);
|
|
1108
|
+
rd_avg_destroy(&rk->rk_telemetry.rd_avg_rollover
|
|
1109
|
+
.rk_avg_rebalance_latency);
|
|
1110
|
+
rd_avg_rollover(&rk->rk_telemetry.rd_avg_rollover
|
|
1111
|
+
.rk_avg_rebalance_latency,
|
|
1112
|
+
&rk->rk_telemetry.rd_avg_current
|
|
1113
|
+
.rk_avg_rebalance_latency);
|
|
1114
|
+
rd_avg_destroy(&rk->rk_telemetry.rd_avg_rollover
|
|
1115
|
+
.rk_avg_commit_latency);
|
|
1116
|
+
rd_avg_rollover(&rk->rk_telemetry.rd_avg_rollover
|
|
1117
|
+
.rk_avg_commit_latency,
|
|
1118
|
+
&rk->rk_telemetry.rd_avg_current
|
|
1119
|
+
.rk_avg_commit_latency);
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
int resource_attributes_count =
|
|
1124
|
+
resource_attributes(rk, &resource_attributes_struct);
|
|
1125
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH", "Resource attributes count: %d",
|
|
1126
|
+
resource_attributes_count);
|
|
1127
|
+
if (resource_attributes_count > 0) {
|
|
1128
|
+
resource_attributes_key_values =
|
|
1129
|
+
rd_malloc(sizeof(opentelemetry_proto_common_v1_KeyValue *) *
|
|
1130
|
+
resource_attributes_count);
|
|
1131
|
+
int ind;
|
|
1132
|
+
for (ind = 0; ind < resource_attributes_count; ++ind) {
|
|
1133
|
+
resource_attributes_key_values[ind] = rd_calloc(
|
|
1134
|
+
1, sizeof(opentelemetry_proto_common_v1_KeyValue));
|
|
1135
|
+
resource_attributes_key_values[ind]->key.funcs.encode =
|
|
1136
|
+
&encode_string;
|
|
1137
|
+
resource_attributes_key_values[ind]->key.arg =
|
|
1138
|
+
(void *)resource_attributes_struct[ind].name;
|
|
1139
|
+
|
|
1140
|
+
resource_attributes_key_values[ind]->has_value = true;
|
|
1141
|
+
resource_attributes_key_values[ind]->value.which_value =
|
|
1142
|
+
opentelemetry_proto_common_v1_AnyValue_string_value_tag;
|
|
1143
|
+
resource_attributes_key_values[ind]
|
|
1144
|
+
->value.value.string_value.funcs.encode =
|
|
1145
|
+
&encode_string;
|
|
1146
|
+
resource_attributes_key_values[ind]
|
|
1147
|
+
->value.value.string_value.arg =
|
|
1148
|
+
(void *)resource_attributes_struct[ind].value;
|
|
1149
|
+
}
|
|
1150
|
+
resource_attributes_repeated.key_values =
|
|
1151
|
+
resource_attributes_key_values;
|
|
1152
|
+
resource_attributes_repeated.count = resource_attributes_count;
|
|
1153
|
+
resource_metrics.has_resource = true;
|
|
1154
|
+
resource_metrics.resource.attributes.funcs.encode =
|
|
1155
|
+
&encode_key_values;
|
|
1156
|
+
resource_metrics.resource.attributes.arg =
|
|
1157
|
+
&resource_attributes_repeated;
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
opentelemetry_proto_metrics_v1_ScopeMetrics scope_metrics =
|
|
1161
|
+
opentelemetry_proto_metrics_v1_ScopeMetrics_init_zero;
|
|
1162
|
+
|
|
1163
|
+
opentelemetry_proto_common_v1_InstrumentationScope
|
|
1164
|
+
instrumentation_scope =
|
|
1165
|
+
opentelemetry_proto_common_v1_InstrumentationScope_init_zero;
|
|
1166
|
+
instrumentation_scope.name.funcs.encode = &encode_string;
|
|
1167
|
+
instrumentation_scope.name.arg = (void *)rd_kafka_name(rk);
|
|
1168
|
+
instrumentation_scope.version.funcs.encode = &encode_string;
|
|
1169
|
+
instrumentation_scope.version.arg = (void *)rd_kafka_version_str();
|
|
1170
|
+
|
|
1171
|
+
scope_metrics.has_scope = true;
|
|
1172
|
+
scope_metrics.scope = instrumentation_scope;
|
|
1173
|
+
|
|
1174
|
+
metrics = rd_malloc(sizeof(opentelemetry_proto_metrics_v1_Metric *) *
|
|
1175
|
+
total_metrics_count);
|
|
1176
|
+
data_points =
|
|
1177
|
+
rd_malloc(sizeof(opentelemetry_proto_metrics_v1_NumberDataPoint *) *
|
|
1178
|
+
total_metrics_count);
|
|
1179
|
+
datapoint_attributes_key_values =
|
|
1180
|
+
rd_malloc(sizeof(opentelemetry_proto_common_v1_KeyValue) *
|
|
1181
|
+
total_metrics_count);
|
|
1182
|
+
metric_names = rd_malloc(sizeof(char *) * total_metrics_count);
|
|
1183
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
1184
|
+
"Total metrics to be encoded count: %" PRIusz,
|
|
1185
|
+
total_metrics_count);
|
|
1186
|
+
|
|
1187
|
+
|
|
1188
|
+
for (i = 0; i < metrics_to_encode_count; i++) {
|
|
1189
|
+
|
|
1190
|
+
rd_kafka_telemetry_metric_value_calculator_t
|
|
1191
|
+
metric_value_calculator;
|
|
1192
|
+
if (RD_KAFKA_IS_SHARE_CONSUMER(rk))
|
|
1193
|
+
metric_value_calculator =
|
|
1194
|
+
SHARE_CONSUMER_METRIC_VALUE_CALCULATORS
|
|
1195
|
+
[metrics_to_encode[i]];
|
|
1196
|
+
else if (rk->rk_type == RD_KAFKA_PRODUCER)
|
|
1197
|
+
metric_value_calculator =
|
|
1198
|
+
PRODUCER_METRIC_VALUE_CALCULATORS
|
|
1199
|
+
[metrics_to_encode[i]];
|
|
1200
|
+
else
|
|
1201
|
+
metric_value_calculator =
|
|
1202
|
+
CONSUMER_METRIC_VALUE_CALCULATORS
|
|
1203
|
+
[metrics_to_encode[i]];
|
|
1204
|
+
if (info[metrics_to_encode[i]].is_per_broker) {
|
|
1205
|
+
rd_kafka_broker_t *rkb;
|
|
1206
|
+
|
|
1207
|
+
TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
|
|
1208
|
+
metrics[metric_idx] = rd_calloc(
|
|
1209
|
+
1,
|
|
1210
|
+
sizeof(
|
|
1211
|
+
opentelemetry_proto_metrics_v1_Metric));
|
|
1212
|
+
data_points[metric_idx] = rd_calloc(
|
|
1213
|
+
1,
|
|
1214
|
+
sizeof(
|
|
1215
|
+
opentelemetry_proto_metrics_v1_NumberDataPoint));
|
|
1216
|
+
serialize_Metric(
|
|
1217
|
+
rk, rkb, &info[metrics_to_encode[i]],
|
|
1218
|
+
&metrics[metric_idx],
|
|
1219
|
+
&data_points[metric_idx],
|
|
1220
|
+
&datapoint_attributes_key_values
|
|
1221
|
+
[metric_idx],
|
|
1222
|
+
metric_value_calculator,
|
|
1223
|
+
&metric_names[metric_idx], true, now_ns);
|
|
1224
|
+
metric_idx++;
|
|
1225
|
+
}
|
|
1226
|
+
continue;
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
metrics[metric_idx] =
|
|
1230
|
+
rd_calloc(1, sizeof(opentelemetry_proto_metrics_v1_Metric));
|
|
1231
|
+
data_points[metric_idx] = rd_calloc(
|
|
1232
|
+
1, sizeof(opentelemetry_proto_metrics_v1_NumberDataPoint));
|
|
1233
|
+
|
|
1234
|
+
serialize_Metric(rk, NULL, &info[metrics_to_encode[i]],
|
|
1235
|
+
&metrics[metric_idx], &data_points[metric_idx],
|
|
1236
|
+
&datapoint_attributes_key_values[metric_idx],
|
|
1237
|
+
metric_value_calculator,
|
|
1238
|
+
&metric_names[metric_idx], false, now_ns);
|
|
1239
|
+
metric_idx++;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
/* Send empty metrics blob if no metrics are matched */
|
|
1243
|
+
if (total_metrics_count > 0) {
|
|
1244
|
+
metrics_repeated.metrics = metrics;
|
|
1245
|
+
metrics_repeated.count = total_metrics_count;
|
|
1246
|
+
|
|
1247
|
+
scope_metrics.metrics.funcs.encode = &encode_metric;
|
|
1248
|
+
scope_metrics.metrics.arg = &metrics_repeated;
|
|
1249
|
+
|
|
1250
|
+
|
|
1251
|
+
resource_metrics.scope_metrics.funcs.encode =
|
|
1252
|
+
&encode_scope_metrics;
|
|
1253
|
+
resource_metrics.scope_metrics.arg = &scope_metrics;
|
|
1254
|
+
|
|
1255
|
+
metrics_data.resource_metrics.funcs.encode =
|
|
1256
|
+
&encode_resource_metrics;
|
|
1257
|
+
metrics_data.resource_metrics.arg = &resource_metrics;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
status = pb_get_encoded_size(
|
|
1261
|
+
&message_size, opentelemetry_proto_metrics_v1_MetricsData_fields,
|
|
1262
|
+
&metrics_data);
|
|
1263
|
+
if (!status) {
|
|
1264
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
1265
|
+
"Failed to get encoded size");
|
|
1266
|
+
goto fail;
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
rbuf = rd_buf_new(1, message_size);
|
|
1270
|
+
rd_buf_write_ensure(rbuf, message_size, message_size);
|
|
1271
|
+
message_size = rd_buf_get_writable(rbuf, &buffer);
|
|
1272
|
+
|
|
1273
|
+
stream = pb_ostream_from_buffer(buffer, message_size);
|
|
1274
|
+
status = pb_encode(&stream,
|
|
1275
|
+
opentelemetry_proto_metrics_v1_MetricsData_fields,
|
|
1276
|
+
&metrics_data);
|
|
1277
|
+
|
|
1278
|
+
if (!status) {
|
|
1279
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH", "Encoding failed: %s",
|
|
1280
|
+
PB_GET_ERROR(&stream));
|
|
1281
|
+
rd_buf_destroy_free(rbuf);
|
|
1282
|
+
goto fail;
|
|
1283
|
+
}
|
|
1284
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
1285
|
+
"Push Telemetry metrics encoded, size: %" PRIusz,
|
|
1286
|
+
stream.bytes_written);
|
|
1287
|
+
rd_buf_write(rbuf, NULL, stream.bytes_written);
|
|
1288
|
+
|
|
1289
|
+
reset_historical_metrics(rk, now_ns);
|
|
1290
|
+
|
|
1291
|
+
free_metrics(metrics, metric_names, data_points,
|
|
1292
|
+
datapoint_attributes_key_values, total_metrics_count);
|
|
1293
|
+
free_resource_attributes(resource_attributes_key_values,
|
|
1294
|
+
resource_attributes_struct,
|
|
1295
|
+
resource_attributes_count);
|
|
1296
|
+
rd_kafka_rdunlock(rk);
|
|
1297
|
+
|
|
1298
|
+
return rbuf;
|
|
1299
|
+
|
|
1300
|
+
fail:
|
|
1301
|
+
free_metrics(metrics, metric_names, data_points,
|
|
1302
|
+
datapoint_attributes_key_values, total_metrics_count);
|
|
1303
|
+
free_resource_attributes(resource_attributes_key_values,
|
|
1304
|
+
resource_attributes_struct,
|
|
1305
|
+
resource_attributes_count);
|
|
1306
|
+
rd_kafka_rdunlock(rk);
|
|
1307
|
+
|
|
1308
|
+
return NULL;
|
|
1309
|
+
}
|