A lightweight, efficient telemetry framework for RDK (Reference Design Kit) embedded devices.
Telemetry 2.0 provides real-time monitoring, event collection, and reporting capabilities optimized for resource-constrained embedded devices such as set-top boxes, gateways, and IoT devices.
- β‘ Efficient: Connection pooling and batch reporting
- π Secure: mTLS support for encrypted communication
- π Flexible: Profile-based configuration (JSON/XConf)
- π§ Platform-Independent: Multiple architecture support
graph TB
A[Telemetry Events/Markers] --> B[Profile Matcher]
B --> C[Report Generator]
C --> D[HTTP Connection Pool]
D --> E[XConf Server / Data Collector]
F[XConf Client] -.->|Config| B
G[Scheduler] -.->|Triggers| C
- GCC 4.8+ or Clang 3.5+
- pthread library
- libcurl 7.65.0+
- cJSON library
- OpenSSL 1.1.1+ (for mTLS)
# Clone repository
git clone https://github.com/rdkcentral/telemetry.git
cd telemetry
# Configure
autoreconf -i
./configure
# Build
make
# Install
sudo make installRefer to the provided Docker container for a consistent development environment:
https://github.com/rdkcentral/docker-device-mgt-service-test
See Build Setup Guide for detailed build options.
#include "telemetry2_0.h"
int main(void) {
// Initialize telemetry
if (t2_init() != 0) {
fprintf(stderr, "Failed to initialize telemetry\n");
return -1;
}
// Send a marker event
t2_event_s("SYS_INFO_DeviceBootup", "Device started successfully");
// Cleanup
t2_uninit();
return 0;
}Compile: gcc -o myapp myapp.c -ltelemetry
- Architecture Overview - System design and components
- API Reference - Public API documentation
- Developer Guide - Getting started
- Build Setup - Build configuration
- Testing Guide - Test procedures
Individual component documentation is in source/docs/:
- Bulk Data System - Profile and marker management
- HTTP Protocol - Communication layer
- Scheduler - Report scheduling
- XConf Client - Configuration retrieval
telemetry/
βββ source/ # Source code
β βββ bulkdata/ # Profile and marker management
β βββ protocol/ # HTTP/RBUS communication
β βββ scheduler/ # Report scheduling
β βββ xconf-client/ # Configuration retrieval
β βββ dcautil/ # Log marker utilities
β βββ test/ # Unit tests (gtest/gmock)
βββ include/ # Public headers
βββ config/ # Configuration files
βββ docs/ # Documentation
βββ containers/ # Docker development environment
βββ test/ # Functional tests
Telemetry uses JSON profiles to define what data to collect:
{
"Profile": "RDKB_BasicProfile",
"Version": "1.0.0",
"Protocol": "HTTP",
"EncodingType": "JSON",
"ReportingInterval": 300,
"Parameters": [
{
"type": "dataModel",
"name": "Device.DeviceInfo.Manufacturer"
},
{
"type": "event",
"eventName": "bootup_complete"
}
]
}See Profile Configuration Guide for details.
| Variable | Description | Default |
|---|---|---|
T2_ENABLE_DEBUG |
Enable debug logging | 0 |
T2_PROFILE_PATH |
Default profile directory | /etc/DefaultT2Profile.json |
T2_XCONF_URL |
XConf server URL | - |
T2_REPORT_URL |
Report upload URL | - |
# Unit tests
make check
# Functional tests
cd test
./run_ut.sh
# Code coverage
./cov_build.shUse the provided Docker container for consistent development: https://github.com/rdkcentral/docker-device-mgt-service-test
cd docker-device-mgt-service-test
docker compose up -dA directory above the current directory is mounted as a volume in /mnt/L2_CONTAINER_SHARED_VOLUME . Login to the container as follows:
docker exec -it native-platform /bin/bash
cd /mnt/L2_CONTAINER_SHARED_VOLUME/telemetry
sh test/run_ut.shSee Docker Development Guide for more details.
Telemetry 2.0 is designed to be platform-independent and has been tested on:
- RDK-B (Broadband devices)
- RDK-V (Video devices)
- Linux (x86_64, ARM, ARM64)
- Yocto Project builds
See Platform Porting Guide for porting to new platforms.
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for new functionality
- Ensure all L1 and L2 tests pass
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing C code style and ensure astyle formatting and checks pass with below commands
find . -name '*.c' -o -name '*.h' | xargs astyle --options=.astylerc
find . -name '*.orig' -type f -delete- Use descriptive variable names
- Document all public APIs
- Add unit tests for new functions
- Add functional tests for new features
See Coding Guidelines for details.
Q: Telemetry not sending reports
- Check network connectivity
- Verify XConf URL configuration
- Review logs in
/var/log/telemetry/
Q: High memory usage
- Reduce number of active profiles
- Decrease reporting intervals
- Check for memory leaks with valgrind
Q: Build errors
- Ensure all dependencies installed
- Check compiler version (GCC 4.8+)
- Review build logs for missing libraries
See Troubleshooting Guide for more solutions.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- RDK Management LLC
- RDK Community Contributors
- Open Source Community
- Repository: https://github.com/rdkcentral/telemetry
- Issues: https://github.com/rdkcentral/telemetry/issues
- RDK Central: https://rdkcentral.com
See CHANGELOG.md for version history and release notes.
Built for the RDK Community