From 8daec99183d11a3c3fdc878c8169c087975e0704 Mon Sep 17 00:00:00 2001 From: PriyaDharshini_Kathiravan Date: Mon, 5 Jan 2026 09:18:21 +0000 Subject: [PATCH 1/3] Implement Distributed tracing with shared libs Signed-off-by: PriyaDharshini_Kathiravan --- rfcMgr/Makefile.am | 4 ++-- rfcMgr/rfc_main.cpp | 5 +++++ rfcapi/Makefile.am | 4 ++-- rfcapi/rfcapi.cpp | 16 +++++++++++++++- utils/Makefile.am | 4 ++-- utils/tr181utils.cpp | 17 +++++++++++++++-- 6 files changed, 41 insertions(+), 9 deletions(-) diff --git a/rfcMgr/Makefile.am b/rfcMgr/Makefile.am index 2d6186bb..72ae1424 100644 --- a/rfcMgr/Makefile.am +++ b/rfcMgr/Makefile.am @@ -20,10 +20,10 @@ bin_PROGRAMS = rfcMgr rfcMgr_SOURCES = rfc_main.cpp rfc_manager.cpp rfc_common.cpp mtlsUtils.cpp rfc_xconf_handler.cpp xconf_handler.cpp -rfcMgr_CPPFLAGS = -std=c++17 -Wall -Werror -DRDK_LOGGER -I${top_srcdir}/rfcMgr -I${top_srcdir}/rfcapi/ $(cjson_CFLAGS) $(curl_CFLAGS) $(CFLAGS) +rfcMgr_CPPFLAGS = -std=c++17 -Wall -Werror -DRDK_LOGGER -I${top_srcdir}/rfcMgr -I${top_srcdir}/rfcapi/ $(cjson_CFLAGS) $(curl_CFLAGS) $(CFLAGS) -I/mnt/L2_CONTAINER_SHARED_VOLUME/dtracing/rdk_otel_instrumentation/include AM_LDFLAGS = -L$(PKG_CONFIG_SYSROOT_DIR)/$(libdir) AM_LDFLAGS += $(cjson_LIBS) $(curl_LIBS) -AM_LDFLAGS += -lrdkloggers -ldwnlutil -lfwutils -lparsejson -lsecure_wrapper -lcurl +AM_LDFLAGS += -lrdkloggers -ldwnlutil -lfwutils -lparsejson -lsecure_wrapper -lcurl -lrdk_otel if IS_IARMBUS_ENABLED rfcMgr_CPPFLAGS += $(IARMBUS_EVENT_FLAG) -I$(PKG_CONFIG_SYSROOT_DIR)${includedir}/rdk/iarmbus diff --git a/rfcMgr/rfc_main.cpp b/rfcMgr/rfc_main.cpp index 57ce377d..b685077b 100644 --- a/rfcMgr/rfc_main.cpp +++ b/rfcMgr/rfc_main.cpp @@ -19,6 +19,7 @@ #include "rfc_common.h" #include "rfc_manager.h" +#include "rdk_otlp_instrumentation.h" #ifdef __cplusplus extern "C" { @@ -87,6 +88,10 @@ int main() signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); + + // Initialize OpenTelemetry instrumentation + rdk_otlp_init("rfcMgr", "1.0.0"); + rdk_otlp_metrics_init(); rfc::RFCManager* rfcMgr = new rfc::RFCManager(); diff --git a/rfcapi/Makefile.am b/rfcapi/Makefile.am index 69d93831..a2933c13 100644 --- a/rfcapi/Makefile.am +++ b/rfcapi/Makefile.am @@ -27,7 +27,7 @@ if ENABLE_RDKC librfcapi_la_CPPFLAGS = "-std=c++11" -DLINUX -fPIC -g -O2 -Wall -DRDKC -I${top_srcdir}/../rdklogger/include/ librfcapi_la_LIBADD = -L${top_srcdir}/../rdklogger/src/.libs -lrdkloggers else -librfcapi_la_CPPFLAGS = "-std=c++11" -DLINUX -fPIC -g -O2 -Wall -I=/usr/include/cjson -I=/usr/include/wdmp-c $(IARMBUS_EVENT_FLAG) -librfcapi_la_LIBADD = -lcurl -lcjson -lrdkloggers +librfcapi_la_CPPFLAGS = "-std=c++11" -DLINUX -fPIC -g -O2 -Wall -I=/usr/include/cjson -I=/usr/include/wdmp-c $(IARMBUS_EVENT_FLAG) -I/mnt/L2_CONTAINER_SHARED_VOLUME/dtracing/rdk_otel_instrumentation/include +librfcapi_la_LIBADD = -L/usr/local/lib -lcurl -lcjson -lrdkloggers -lrdk_otlp endif endif diff --git a/rfcapi/rfcapi.cpp b/rfcapi/rfcapi.cpp index 382feaaa..a0747ab6 100644 --- a/rfcapi/rfcapi.cpp +++ b/rfcapi/rfcapi.cpp @@ -29,6 +29,9 @@ #include #include "rfcapi.h" #include "rdk_debug.h" +#include "rdk_otlp_instrumentation.h" +#include +#include using namespace std; #define LOG_RFCAPI "LOG.RDK.RFCAPI" @@ -266,6 +269,7 @@ WDMP_STATUS getRFCParameter(const char *pcCallerID, const char* pcParameterName, CURL *curl_handle = NULL; CURLcode res = CURLE_FAILED_INIT; + auto startTime = std::chrono::high_resolution_clock::now(); if(!strcmp(pcParameterName+strlen(pcParameterName)-1,".")) { #ifdef TEMP_LOGGING @@ -449,6 +453,11 @@ WDMP_STATUS getRFCParameter(const char *pcCallerID, const char* pcParameterName, cJSON_Delete(response_json); } } + auto endTime = std::chrono::high_resolution_clock::now(); + auto timeTaken = std::chrono::duration_cast(endTime - startTime).count(); + // Record metrics (convert microseconds to seconds) + double duration_seconds = timeTaken / 1000000.0; + rdk_otlp_metrics_record_parameter_operation(pcParameterName, "get", duration_seconds); return ret; } @@ -462,7 +471,7 @@ WDMP_STATUS setRFCParameter(const char *pcCallerID, const char* pcParameterName, string response; CURL *curl_handle = NULL; CURLcode res = CURLE_FAILED_INIT; - + auto startTime = std::chrono::high_resolution_clock::now(); if(!strcmp(pcParameterName+strlen(pcParameterName)-1,".") && pcParameterValue == NULL) { #ifdef TEMP_LOGGING @@ -564,6 +573,11 @@ WDMP_STATUS setRFCParameter(const char *pcCallerID, const char* pcParameterName, cJSON_Delete(response_json); } } + auto endTime = std::chrono::high_resolution_clock::now(); + auto timeTaken = std::chrono::duration_cast(endTime - startTime).count(); + // Record metrics (convert microseconds to seconds) + double duration_seconds = timeTaken / 1000000.0; + rdk_otlp_metrics_record_parameter_operation(pcParameterName, "get", duration_seconds); return ret; } diff --git a/utils/Makefile.am b/utils/Makefile.am index 98f8d961..4ee95e28 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -27,8 +27,8 @@ bin_PROGRAMS += rfctool endif tr181_SOURCES = tr181utils.cpp trsetutils.cpp -tr181_LDADD = ../rfcapi/.libs/librfcapi.la ../tr181api/.libs/libtr181api.la -tr181_CPPFLAGS = -std=c++0x -Wall -I${top_srcdir}/rfcapi/ -I${top_srcdir}/tr181api/ -I=/usr/include/wdmp-c +tr181_LDADD = ../rfcapi/.libs/librfcapi.la ../tr181api/.libs/libtr181api.la -lrdk_otlp +tr181_CPPFLAGS = -std=c++0x -Wall -I${top_srcdir}/rfcapi/ -I${top_srcdir}/tr181api/ -I=/usr/include/wdmp-c -I/mnt/L2_CONTAINER_SHARED_VOLUME/dtracing/rdk_otel_instrumentation/include if IS_IARMBUS_ENABLED tr181_LDADD += -lIARMBus diff --git a/utils/tr181utils.cpp b/utils/tr181utils.cpp index 9220f5b9..d8c6119d 100644 --- a/utils/tr181utils.cpp +++ b/utils/tr181utils.cpp @@ -40,7 +40,7 @@ #include "trsetutils.h" #include #include - +#include "rdk_otlp_instrumentation.h" using namespace std; static char value_type = 'u'; @@ -138,6 +138,9 @@ static DATA_TYPE convertType(char type) */ static int getAttribute(char * const paramName) { + // Start distributed trace (creates parent span and stores context) + rdk_otlp_start_distributed_trace(paramName, "get"); + if (id && !strncmp(id, "localOnly", 9)) { TR181_ParamData_t param; tr181ErrorCode_t status = getLocalParam(id, paramName, ¶m); @@ -150,6 +153,7 @@ static int getAttribute(char * const paramName) { cout << __FUNCTION__ << " >> Failed to retrieve : Reason " << getTR181ErrorString(status) << endl; } + rdk_otlp_finish_distributed_trace(); return status; } @@ -165,7 +169,8 @@ static int getAttribute(char * const paramName) { cout << __FUNCTION__ << " >> Failed to retrieve : Reason " << getRFCErrorString(status) << endl; } - + // Finish distributed trace (ends parent span) + rdk_otlp_finish_distributed_trace(); return status; } /** @@ -177,6 +182,8 @@ static int getAttribute(char * const paramName) */ static int setAttribute(char * const paramName ,char type, char * value) { + //Start distributed trace (creates parent span and stores context) + rdk_otlp_start_distributed_trace(paramName, "set"); if (id && !strncmp(id, "localOnly", 9)) { int status = setLocalParam(id, paramName, value); if(status == 0) @@ -187,6 +194,7 @@ static int setAttribute(char * const paramName ,char type, char * value) { cout << __FUNCTION__ << " >> Failed to Set Local Param." << endl; } + rdk_otlp_finish_distributed_trace(); return status; } @@ -203,6 +211,7 @@ static int setAttribute(char * const paramName ,char type, char * value) else cout << __FUNCTION__ << " >> Set operation success " << endl; + rdk_otlp_finish_distributed_trace(); return status; } @@ -297,6 +306,10 @@ static int parseargs(int argc, char * argv[]) #ifndef GTEST_ENABLE int main(int argc, char *argv []) { + // Initialize OpenTelemetry instrumentation + rdk_otlp_init("tr181", "1.0.0"); + rdk_otlp_metrics_init(); + if(legacyRfcEnabled() == true) { return trsetutil(argc,argv); From d124ab985a7147ddb4f946490d3ef71652e6ae97 Mon Sep 17 00:00:00 2001 From: PriyaDharshini_Kathiravan Date: Tue, 6 Jan 2026 12:47:52 +0000 Subject: [PATCH 2/3] Implement Distributed tracing --- rfcMgr/Makefile.am | 4 ++-- rfcapi/Makefile.am | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rfcMgr/Makefile.am b/rfcMgr/Makefile.am index 72ae1424..a6969aad 100644 --- a/rfcMgr/Makefile.am +++ b/rfcMgr/Makefile.am @@ -20,10 +20,10 @@ bin_PROGRAMS = rfcMgr rfcMgr_SOURCES = rfc_main.cpp rfc_manager.cpp rfc_common.cpp mtlsUtils.cpp rfc_xconf_handler.cpp xconf_handler.cpp -rfcMgr_CPPFLAGS = -std=c++17 -Wall -Werror -DRDK_LOGGER -I${top_srcdir}/rfcMgr -I${top_srcdir}/rfcapi/ $(cjson_CFLAGS) $(curl_CFLAGS) $(CFLAGS) -I/mnt/L2_CONTAINER_SHARED_VOLUME/dtracing/rdk_otel_instrumentation/include +rfcMgr_CPPFLAGS = -std=c++17 -Wall -Werror -DRDK_LOGGER -I${top_srcdir}/rfcMgr -I${top_srcdir}/rfcapi/ $(cjson_CFLAGS) $(curl_CFLAGS) $(CFLAGS) AM_LDFLAGS = -L$(PKG_CONFIG_SYSROOT_DIR)/$(libdir) AM_LDFLAGS += $(cjson_LIBS) $(curl_LIBS) -AM_LDFLAGS += -lrdkloggers -ldwnlutil -lfwutils -lparsejson -lsecure_wrapper -lcurl -lrdk_otel +AM_LDFLAGS += -lrdkloggers -ldwnlutil -lfwutils -lparsejson -lsecure_wrapper -lcurl -lrdk_otlp if IS_IARMBUS_ENABLED rfcMgr_CPPFLAGS += $(IARMBUS_EVENT_FLAG) -I$(PKG_CONFIG_SYSROOT_DIR)${includedir}/rdk/iarmbus diff --git a/rfcapi/Makefile.am b/rfcapi/Makefile.am index a2933c13..c0916687 100644 --- a/rfcapi/Makefile.am +++ b/rfcapi/Makefile.am @@ -28,6 +28,6 @@ librfcapi_la_CPPFLAGS = "-std=c++11" -DLINUX -fPIC -g -O2 -Wall -DRDKC -I${top_s librfcapi_la_LIBADD = -L${top_srcdir}/../rdklogger/src/.libs -lrdkloggers else librfcapi_la_CPPFLAGS = "-std=c++11" -DLINUX -fPIC -g -O2 -Wall -I=/usr/include/cjson -I=/usr/include/wdmp-c $(IARMBUS_EVENT_FLAG) -I/mnt/L2_CONTAINER_SHARED_VOLUME/dtracing/rdk_otel_instrumentation/include -librfcapi_la_LIBADD = -L/usr/local/lib -lcurl -lcjson -lrdkloggers -lrdk_otlp +librfcapi_la_LIBADD = -lcurl -lcjson -lrdkloggers -lrdk_otlp endif endif From 026bbdca454d3b8ee078ef33d1f6b01eade58301 Mon Sep 17 00:00:00 2001 From: Priya_Dharshini Date: Wed, 4 Feb 2026 13:16:54 +0530 Subject: [PATCH 3/3] Update rfcapi.cpp --- rfcapi/rfcapi.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rfcapi/rfcapi.cpp b/rfcapi/rfcapi.cpp index a0747ab6..38597a29 100644 --- a/rfcapi/rfcapi.cpp +++ b/rfcapi/rfcapi.cpp @@ -269,7 +269,7 @@ WDMP_STATUS getRFCParameter(const char *pcCallerID, const char* pcParameterName, CURL *curl_handle = NULL; CURLcode res = CURLE_FAILED_INIT; - auto startTime = std::chrono::high_resolution_clock::now(); + //auto startTime = std::chrono::high_resolution_clock::now(); if(!strcmp(pcParameterName+strlen(pcParameterName)-1,".")) { #ifdef TEMP_LOGGING @@ -453,11 +453,11 @@ WDMP_STATUS getRFCParameter(const char *pcCallerID, const char* pcParameterName, cJSON_Delete(response_json); } } - auto endTime = std::chrono::high_resolution_clock::now(); - auto timeTaken = std::chrono::duration_cast(endTime - startTime).count(); + //auto endTime = std::chrono::high_resolution_clock::now(); + //auto timeTaken = std::chrono::duration_cast(endTime - startTime).count(); // Record metrics (convert microseconds to seconds) - double duration_seconds = timeTaken / 1000000.0; - rdk_otlp_metrics_record_parameter_operation(pcParameterName, "get", duration_seconds); + //double duration_seconds = timeTaken / 1000000.0; + //rdk_otlp_metrics_record_parameter_operation(pcParameterName, "get", duration_seconds); return ret; } @@ -471,7 +471,7 @@ WDMP_STATUS setRFCParameter(const char *pcCallerID, const char* pcParameterName, string response; CURL *curl_handle = NULL; CURLcode res = CURLE_FAILED_INIT; - auto startTime = std::chrono::high_resolution_clock::now(); + //auto startTime = std::chrono::high_resolution_clock::now(); if(!strcmp(pcParameterName+strlen(pcParameterName)-1,".") && pcParameterValue == NULL) { #ifdef TEMP_LOGGING @@ -573,11 +573,11 @@ WDMP_STATUS setRFCParameter(const char *pcCallerID, const char* pcParameterName, cJSON_Delete(response_json); } } - auto endTime = std::chrono::high_resolution_clock::now(); - auto timeTaken = std::chrono::duration_cast(endTime - startTime).count(); + //auto endTime = std::chrono::high_resolution_clock::now(); + //auto timeTaken = std::chrono::duration_cast(endTime - startTime).count(); // Record metrics (convert microseconds to seconds) - double duration_seconds = timeTaken / 1000000.0; - rdk_otlp_metrics_record_parameter_operation(pcParameterName, "get", duration_seconds); + //double duration_seconds = timeTaken / 1000000.0; + //rdk_otlp_metrics_record_parameter_operation(pcParameterName, "get", duration_seconds); return ret; }