Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
a3e6b58
optional pybindings & migration to CMAKE_CURRENT_SOURCE_DIR
Dec 29, 2025
fec2fe3
refactor C++ standard, switch to C++17 by default
Dec 29, 2025
52a0be6
Replace deprecated std::bind1st in the Apollo matcher with an equival…
Dec 29, 2025
1318ac8
introduce security_options INTERFACE
Dec 29, 2025
7eb41d4
use project-local include paths in RobotVision tests and benchmarks
Dec 29, 2025
4c75c41
Disable security hardening flags in Debug builds
Dec 29, 2025
4261f36
Consume Eigen, OpenCV, OpenMP, Python via imported targets (with Open…
Dec 29, 2025
c0e209a
general refactoring for readability
Dec 29, 2025
25f08ed
fix cpp tests discovery
Dec 29, 2025
ee60c7b
add tracker service cmakelists
Dec 29, 2025
fd1c20f
add license headers
Dec 29, 2025
b2cf311
fix trivy issues
Dec 29, 2025
943f2fc
Merge branch 'main' into rv-cmake-refactor
Dec 29, 2025
73b18db
copy only necessary sources
Dec 29, 2025
7ce0ff6
refactor opencv handling
Dec 30, 2025
cc5e55d
refactor security options handling
Dec 30, 2025
0b6bc4e
minor cleanup
Dec 30, 2025
f6bfe3a
add Tracker Service design documents
Dec 30, 2025
33c0830
add build system foundation with Conan integration
Jan 2, 2026
9515533
add code formatting with clang-format
Jan 2, 2026
3a4d753
tracker: fix cmake preset usage and simplify clean target
Jan 2, 2026
011c829
add debugging capability
Jan 2, 2026
0107c5c
Logging skeleton (singleton Logger, LogEntry, structured JSON, versio…
Jan 2, 2026
dd95a1f
debugger settings
Jan 5, 2026
00a97ad
add basic ci
Jan 5, 2026
c6641c0
run docker build in paralel in tracker ci
Jan 5, 2026
fa8e078
fix docker build
Jan 5, 2026
6af76c1
use gha cache
Jan 5, 2026
503cfc0
empty
Jan 5, 2026
fc0b3d8
use docker buildx to build
Jan 5, 2026
dfdc391
empty
Jan 5, 2026
8faa112
integrate with main compose file
Jan 5, 2026
63fe9b3
add service tests
Jan 5, 2026
f72abcf
split natvie build and tests
Jan 5, 2026
ac8fae1
simplify test
Jan 5, 2026
8e7e1b9
simplifications
Jan 5, 2026
aafb9e1
fix ut target
Jan 5, 2026
ab94882
new linters
Jan 5, 2026
8903f3b
format python code
Jan 5, 2026
7b5d7db
better reporting
Jan 5, 2026
c3a8adb
fix docker warnings
Jan 5, 2026
cbba1b5
better ci jobs names
Jan 5, 2026
c4784f0
add code coverage and more tets
Jan 5, 2026
090ef11
improve coverage report
Jan 5, 2026
85374ab
improve coverage in ci
Jan 5, 2026
bf4a7d1
add readme
Jan 5, 2026
f14bcfa
add python to github hooks
Jan 5, 2026
706768c
docs: remove ADR-0008, update references to PR #841
Jan 5, 2026
fc7906f
Make tracker service cpu & mem limit configurable via env.
Jan 14, 2026
5fe8ba9
Move tracker to experimental images alongside mapping and cluster_ana…
Jan 14, 2026
f7f6557
Merge branch 'main' into tracker-service-design
Jan 14, 2026
4b86845
Merge branch 'tracker-service-design' into tracker-service-v0.1
Jan 14, 2026
1321e17
Parametrized Tracker image by build type.
Jan 14, 2026
47201f5
added pipx to install-deps
Jan 14, 2026
95aaec7
deleted docs from design branch
Jan 14, 2026
6d9acac
fix prettier style issues
Jan 14, 2026
3247c63
fix indent check
Jan 14, 2026
f0d411f
fix gha linter issues
Jan 14, 2026
00e7f05
fix scorecard warnings
Jan 14, 2026
2231000
different approach for pip pinning by hash
Jan 14, 2026
178acd1
add hashes to tracker service requirements.txt
Jan 14, 2026
883509c
Revert "add hashes to tracker service requirements.txt"
Jan 14, 2026
bae3042
Revert "different approach for pip pinning by hash"
Jan 14, 2026
6e514e4
Revert "fix scorecard warnings"
Jan 14, 2026
b7b305b
Merge branch 'main' into tracker-service-v0.1
Jan 14, 2026
9ba6b82
put apt in quiet mode in Dockerfile
Jan 14, 2026
7509310
more apt silenece
Jan 14, 2026
af12c2f
empty (for testing)
Jan 14, 2026
bc97297
add scope to build cache in CI
Jan 14, 2026
5256fcb
empty (for testing)
Jan 14, 2026
3c25ff0
empty
Jan 15, 2026
52b0fa6
Merge branch 'main' into tracker-service-v0.1
tdorauintc Jan 15, 2026
31a8d3a
empty
Jan 15, 2026
1906f2c
another regular layer caching instead of builtkit
Jan 15, 2026
1be476a
empty
Jan 15, 2026
6af9462
empty
Jan 15, 2026
ad093db
set gha cache envs
Jan 15, 2026
2756795
use docker/build-push-action to manage docker build and caching
Jan 15, 2026
6f5ee58
empty
Jan 15, 2026
759acdb
split cmake configure & build in two layers
Jan 15, 2026
6fde5b8
Merge branch 'main' into tracker-service-v0.1
Jan 15, 2026
3b42eea
empty
Jan 15, 2026
14b2c97
increase code coverage
Jan 15, 2026
a92364c
add gracefull shutdown test
Jan 15, 2026
d4fb148
fix tests formatting
Jan 15, 2026
1dcbdeb
Merge branch 'main' into tracker-service-v0.1
Jan 19, 2026
3a4f780
add build dependencies on run targets
Jan 19, 2026
c519b1b
simplify run_healthcheck_command() implementation
Jan 19, 2026
6934bcc
remove reduntant DifferentPorts unit test
Jan 19, 2026
912650c
validate inputs in healthcheck command
Jan 19, 2026
74cbbc7
small refactoring in healtcheck command
Jan 19, 2026
a1e6d5d
refactor logging test to use custom sink
Jan 19, 2026
1737830
prettier fixes
Jan 19, 2026
183ca17
reduce ut count from 70 to 40
Jan 19, 2026
0e183f9
rename healthcheck to healthcheck_server
Jan 19, 2026
3a2d3a8
build opencv from source
Jan 19, 2026
e51f1ad
link in robotvision
Jan 19, 2026
9913af1
link in robotvision (for image size comparision)
Jan 19, 2026
4a8f558
Merge branch 'tracker-service-v0.1' into tracker-service-v0.1.2
Jan 19, 2026
3a43a8b
add config file support with env overlay
Jan 19, 2026
a04dfda
reduce tests count
Jan 19, 2026
590c9dc
Update tracker/Dockerfile
Jan 19, 2026
8950fe5
Update tracker/test/unit/config_loader_test.cpp
Jan 19, 2026
9dfdf6c
minor fixes
Jan 19, 2026
1ce6367
Merge branch 'tracker-service-v0.1.2' into tracker-service-v0.1.3
Jan 19, 2026
4dbc96f
Merge branch 'main' into tracker-service-v0.1.2
Jan 19, 2026
00bfc99
Merge branch 'tracker-service-v0.1.2' into tracker-service-v0.1.3
Jan 19, 2026
68ecfb5
Merge branch 'main' into tracker-service-v0.1.2
tdorauintc Jan 20, 2026
80ea1d4
Merge branch 'main' into tracker-service-v0.1.2
tdorauintc Jan 21, 2026
7164b2b
Merge branch 'main' into tracker-service-v0.1.2
Jan 21, 2026
df6e4f3
fix README
Jan 21, 2026
aa307d4
update cli section in readme
Jan 21, 2026
0f07fc3
Merge branch 'tracker-service-v0.1.2' into tracker-service-v0.1.3
Jan 21, 2026
87c5597
Merge branch 'main' into tracker-service-v0.1.2
tdorauintc Jan 21, 2026
c8dbd44
Update tracker/README.md
Jan 22, 2026
c7e006a
Merge branch 'main' into tracker-service-v0.1.2
Jan 22, 2026
331819d
Merge branch 'tracker-service-v0.1.2' into tracker-service-v0.1.3
Jan 22, 2026
f9c1c9a
Merge branch 'main' into tracker-service-v0.1.2
tdorauintc Jan 23, 2026
76bae41
Merge branch 'tracker-service-v0.1.2' into tracker-service-v0.1.3
Jan 23, 2026
3738e2a
fix image builds in the Makefile
Jan 23, 2026
14f1846
Merge branch 'tracker-service-v0.1.2' into tracker-service-v0.1.3
Jan 23, 2026
9425c1c
better schema cli description
Jan 23, 2026
ba05176
move env vars to seperate header
Jan 23, 2026
b0b2f35
update schema & align implementation
Jan 23, 2026
80fb06c
fix linter issues
Jan 23, 2026
360f2fe
remove -release suffix
Jan 23, 2026
0d8253b
Merge branch 'main' into tracker-service-v0.1.2
Jan 23, 2026
eaa8dc6
fix ci build
Jan 23, 2026
d544f0e
Merge branch 'tracker-service-v0.1.2' into tracker-service-v0.1.3
Jan 23, 2026
e097c84
add debugging & profiling into README
Jan 23, 2026
fe0f1c0
fix & improve native debugging
Jan 23, 2026
35a1c06
fix & improve container debugging
Jan 23, 2026
85ecff6
fix & improve profiling
Jan 23, 2026
83fc75d
Merge branch 'main' into tracker-service-v0.1.3
Jan 23, 2026
8256990
add mqtt connection handling
Jan 22, 2026
d5572ad
Merge branch 'main' into tracker-service-v0.1.3
scenescapecicd Jan 23, 2026
b1ad7d4
Merge branch 'main' into tracker-service-v0.1.3
Jan 26, 2026
e3b2f1f
fix readme
Jan 26, 2026
f48b216
update README to the current codebase
Jan 26, 2026
3e8a5b3
Merge branch 'tracker-service-v0.1.3' into tracker-service-v0.2.0
Jan 26, 2026
155af01
add mqtt helper targets to the makefile
Jan 26, 2026
d97c171
more env overrides, simplify tests
Jan 26, 2026
e875554
add broker targets for manual validation
Jan 26, 2026
b51bbdc
Merge branch 'main' into tracker-service-v0.1.3
tdorauintc Jan 26, 2026
9860553
git commit rename ssl to tls
Jan 26, 2026
d007517
prettier fixes
Jan 26, 2026
d4e1c98
Merge branch 'main' into tracker-service-v0.1.3
tdorauintc Jan 26, 2026
4e3ac7d
shorten service tests
Jan 27, 2026
b80965e
fix hadolint warnings
Jan 27, 2026
3fa7ba2
simplify ScopedEnv implementation
Jan 27, 2026
81cab58
simplify config loader by using JSON paths
Jan 27, 2026
e271150
Merge branch 'main' into tracker-service-v0.1.3
Jan 27, 2026
f07700a
Merge branch 'tracker-service-v0.1.3' into tracker-service-v0.2.0
Jan 27, 2026
910f38e
add ssl tests
Jan 27, 2026
026aeca
simplify tests
Jan 27, 2026
95c6a0f
test cleanup
Jan 27, 2026
0d00d1c
Merge branch 'main' into tracker-service-v0.2.0
Jan 27, 2026
c352dfc
remove simdjson
Jan 27, 2026
2954661
Merge branch 'main' into tracker-service-v0.2.0
Jan 28, 2026
ec6f467
improve coverage
Jan 28, 2026
df3ee95
treat empty vars as unset
Jan 28, 2026
2bed405
exclude mqtt client from ut coverage
Jan 28, 2026
16144c1
reduce ut count
Jan 28, 2026
c903d47
configure Tracker Service in docker compose
Jan 28, 2026
bbb44b0
remove dead code
Jan 28, 2026
b5d077d
fix default schema dir
Jan 28, 2026
6836f92
remove hardcoded number
Jan 28, 2026
2a65b86
remove redundant file
Jan 28, 2026
06b1b70
fix broker-start target
Jan 28, 2026
d43e929
use json ptr in message handler
Jan 28, 2026
27ddbae
fix multiple topics subscription on down broker
Jan 28, 2026
eddcb1d
unset proxy contidionally
Jan 28, 2026
75d7246
use dynamic broker ports in service tests
Jan 28, 2026
08f2c63
fix uts
Jan 28, 2026
572ee77
Merge branch 'main' into tracker-service-v0.2.0
Jan 29, 2026
a61bc32
fix tracker configuration in compose sample
Jan 29, 2026
4505cba
Merge branch 'main' into tracker-service-v0.2.0
tdorauintc Jan 29, 2026
f209c9c
optimize hot path
Jan 30, 2026
bd58c54
unsubscribe from topic on mqtt handler stop
Jan 30, 2026
e78ac29
optimize handleCameraMessage
Jan 30, 2026
d9eeee9
optimize extractCameraId
Jan 30, 2026
bf53951
optimize parseCameraMessage()
Feb 2, 2026
40e2574
remove redundant comments
Feb 2, 2026
01b7543
remove reduntant comment
Feb 2, 2026
7057175
refactor proxy handling
Feb 2, 2026
63cd848
fix mqtt client race
Feb 2, 2026
6447c03
fix exponential backoff precission
Feb 2, 2026
cad2658
fix backoff ut
Feb 2, 2026
6038bdd
Merge branch 'main' into tracker-service-v0.2.0
dmytroye Feb 2, 2026
aa1e880
fix mqtt reconnect
Feb 2, 2026
fd27d9b
Merge branch 'main' into tracker-service-v0.2.0
Feb 3, 2026
71ffc65
Merge branch 'main' into tracker-service-v0.2.0
scenescapecicd Feb 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/resources/.prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,10 @@
**/kubernetes/**/*.yaml
**/.reuse/templates/template.jinja2
.venv

# Build directories (CMake/Conan generated)
**/build/
**/build-*/
**/CMakeUserPresets.json
**/CMakePresets.json
**/CMakeFiles/
19 changes: 18 additions & 1 deletion sample_data/docker-compose-dl-streamer-example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -441,8 +441,25 @@ services:
aliases:
- tracker.scenescape.intel.com
user: "10001:10001"
depends_on:
broker:
condition: service_started
environment:
- LOG_LEVEL=${TRACKER_LOG_LEVEL:-info}
- TRACKER_LOG_LEVEL=info
- TRACKER_MQTT_HOST=broker.scenescape.intel.com
- TRACKER_MQTT_PORT=1883
- TRACKER_MQTT_INSECURE=false
- TRACKER_MQTT_TLS_CA_CERT=/run/secrets/certs/scenescape-ca.pem
- TRACKER_MQTT_TLS_VERIFY_SERVER=true
# Override host proxy settings - Paho MQTT dont respect no_proxy var, so as a WA
# tracker code detects empty vars and unsets them (see mqtt_client.cpp clearEmptyProxyVars)
- http_proxy=
- https_proxy=
- HTTP_PROXY=
- HTTPS_PROXY=
secrets:
- source: root-cert
target: certs/scenescape-ca.pem
restart: always
mem_limit: ${TRACKER_MEM_LIMIT:-512m}
# Scale: ~1 CPU per 100 tracked objects. Increase TRACKER_CPUS for larger deployments.
Expand Down
7 changes: 5 additions & 2 deletions tracker/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ endif()
# Find Conan-installed packages
find_package(quill REQUIRED)
find_package(CLI11 REQUIRED)
find_package(simdjson REQUIRED)
find_package(httplib REQUIRED)
find_package(RapidJSON REQUIRED)
find_package(PahoMqttCpp REQUIRED)

#####################################################################
# RobotVision integration
Expand Down Expand Up @@ -75,6 +75,9 @@ set(PROJECT_SOURCE_LIST
${CMAKE_CURRENT_SOURCE_DIR}/src/config_loader.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/healthcheck_server.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/healthcheck_command.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/mqtt_client.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/message_handler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/proxy_utils.cpp
)

add_executable(${PROJECT_NAME}
Expand Down Expand Up @@ -105,9 +108,9 @@ target_link_libraries(${PROJECT_NAME}
RobotVision
quill::quill
CLI11::CLI11
simdjson::simdjson
httplib::httplib
rapidjson
PahoMqttCpp::paho-mqttpp3-static
)

#####################################################################
Expand Down
5 changes: 3 additions & 2 deletions tracker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,11 @@ ARG GIT_COMMIT=unknown
RUN GIT_COMMIT=${GIT_COMMIT} cmake --build build -j

# Collect all runtime library dependencies for the tracker binary
RUN mkdir -p /scenescape/runtime-libs
WORKDIR /scenescape/runtime-libs
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN . /scenescape/build/conanrun.sh && ldd /scenescape/build/tracker \
# hadolint ignore=SC1091
RUN mkdir -p /scenescape/runtime-libs \
&& . /scenescape/build/conanrun.sh && ldd /scenescape/build/tracker \
| awk '{print $3}' \
| grep '^/' \
| xargs -I '{}' cp -v '{}' .
Expand Down
76 changes: 70 additions & 6 deletions tracker/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ SRC_FILES := $(wildcard src/*.cpp) $(wildcard inc/*.hpp) $(wildcard test/unit/*.
build build-debug build-relwithdebinfo run run-debug profile flamegraph \
test-unit test-unit-coverage test-service clean install-tools install-deps \
run-image run-image-debug format-cpp lint-cpp format-python lint-python install-hooks \
lint-dockerfile lint-trivy lint-all coverage-html coverage-xml coverage-report
lint-dockerfile lint-trivy lint-all coverage-html coverage-xml coverage-report \
mqtt-subscribe mqtt-publish broker-start broker-stop generate-certs

all: build

Expand Down Expand Up @@ -81,6 +82,7 @@ install-hooks:
@echo "Installing git pre-commit hook..."
@mkdir -p ../.git/hooks
@echo '#!/bin/bash' > ../.git/hooks/pre-commit
@echo 'set -e' >> ../.git/hooks/pre-commit
@echo 'make prettier-check' >> ../.git/hooks/pre-commit
@echo 'cd tracker && make lint-cpp && make lint-python && make lint-dockerfile' >> ../.git/hooks/pre-commit
@chmod +x ../.git/hooks/pre-commit
Expand Down Expand Up @@ -173,11 +175,20 @@ build-relwithdebinfo: dependencies-relwithdebinfo
# Schema and config paths for local development
TRACKER_SCHEMA_PATH ?= $(CURDIR)/schema/config.schema.json
TRACKER_CONFIG_PATH ?= $(CURDIR)/config/tracker.json

# MQTT broker connection (auto-detect from test broker, fallback to 1883)
export TRACKER_MQTT_HOST ?= localhost
export TRACKER_MQTT_PORT ?= $(shell cd test/service && docker compose port broker 1883 2>/dev/null | cut -d: -f2 || echo 1883)

# Export empty proxy vars - Paho MQTT library fails with proxy env vars,
# tracker code detects empty vars and unsets them (see mqtt_client.cpp)
run: build
. build/conanrun.sh && ./build/$(NAME) --config $(TRACKER_CONFIG_PATH) --schema $(TRACKER_SCHEMA_PATH)
export http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= && \
. build/conanrun.sh && ./build/$(NAME) --config $(TRACKER_CONFIG_PATH) --schema $(TRACKER_SCHEMA_PATH)

run-debug: build-debug
. build-debug/conanrun.sh && ./build-debug/$(NAME) --config $(TRACKER_CONFIG_PATH) --schema $(TRACKER_SCHEMA_PATH)
export http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= && \
. build-debug/conanrun.sh && ./build-debug/$(NAME) --config $(TRACKER_CONFIG_PATH) --schema $(TRACKER_SCHEMA_PATH)

# Profile with perf using optimized build with debug symbols.
# Requires perf permissions. If you see "Error: Failure to open event", run:
Expand Down Expand Up @@ -238,6 +249,7 @@ coverage-html:
'*/external/*' \
'*/third_party/*' \
'*/src/main.cpp' \
'*/src/mqtt_client.cpp' \
--output-file build-debug/coverage/coverage-filtered.info \
--rc branch_coverage=1 \
--ignore-errors unused \
Expand Down Expand Up @@ -267,6 +279,7 @@ coverage-xml:
--exclude '.*external.*' \
--exclude '.*third_party.*' \
--exclude '.*main\.cpp' \
--exclude '.*mqtt_client\.cpp' \
--xml-pretty \
--xml build-debug/coverage/coverage.xml \
--exclude-unreachable-branches \
Expand All @@ -291,6 +304,7 @@ coverage-report:
--exclude '.*external.*' \
--exclude '.*third_party.*' \
--exclude '.*main\.cpp' \
--exclude '.*mqtt_client\.cpp' \
--exclude-unreachable-branches \
--print-summary \
--fail-under-line 90.0 \
Expand All @@ -305,7 +319,8 @@ test-service: build-image
@test/service/.venv/bin/pip install -q --upgrade pip
@test/service/.venv/bin/pip install -q -r test/service/requirements.txt
@echo "Running service tests..."
cd test/service && .venv/bin/pytest -v --tb=short
unset TRACKER_MQTT_PORT TRACKER_MQTT_HOST TRACKER_MQTT_INSECURE && \
cd test/service && .venv/bin/pytest -v --tb=short

#####################################################################
# Docker build targets
Expand All @@ -324,8 +339,11 @@ build-image-debug:
build-image-relwithdebinfo:
$(MAKE) build-image TARGET=runtime BUILD_TYPE=RelWithDebInfo IMAGE=scenescape-tracker-relwithdebinfo

# Use host network to reach broker on localhost; empty proxy vars for Paho workaround
run-image: build-image
docker run --rm -it $(IMAGE):$(VERSION)
docker run --rm -it --network=host \
-e http_proxy= -e https_proxy= -e HTTP_PROXY= -e HTTPS_PROXY= \
$(IMAGE):$(VERSION)

run-image-debug: build-image-debug
-docker stop tracker-debug 2>/dev/null || true
Expand All @@ -339,12 +357,58 @@ stop-image-debug:
-docker stop tracker-debug 2>/dev/null || true
-docker rm tracker-debug 2>/dev/null || true

#####################################################################
# MQTT Broker Management
#####################################################################

# Certificate paths for broker TLS
CERTS_DIR := $(CURDIR)/test/service/.certs
ENV_FILE := $(CURDIR)/test/service/.env

generate-certs:
@if [ ! -f "$(CERTS_DIR)/ca.crt" ]; then \
echo "Generating TLS certificates..."; \
python3 -m venv test/service/.venv 2>/dev/null || true; \
test/service/.venv/bin/pip install -q cryptography; \
cd test/service && .venv/bin/python3 -m utils.generate_certs \
$(CERTS_DIR) --env-file $(ENV_FILE); \
else \
echo "βœ“ Certificates already exist in $(CERTS_DIR)"; \
fi

broker-start: generate-certs
@cd test/service && docker compose up -d broker
@sleep 1
@echo "βœ“ Broker running on port $$(cd test/service && docker compose port broker 1883 | cut -d: -f2)"

broker-stop:
@cd test/service && docker compose down
@echo "βœ“ Broker stopped"

#####################################################################
# MQTT Manual Testing
#####################################################################

MQTT_DETECTION_TOPIC := scenescape/data/camera/test-cam
MQTT_TRACK_TOPIC := scenescape/data/scene/\#

mqtt-subscribe:
@echo "Subscribing to tracks on $(TRACKER_MQTT_HOST):$(TRACKER_MQTT_PORT)..."
mosquitto_sub -h $(TRACKER_MQTT_HOST) -p $(TRACKER_MQTT_PORT) -t '$(MQTT_TRACK_TOPIC)' -v

mqtt-publish:
@echo "Publishing detection to $(TRACKER_MQTT_HOST):$(TRACKER_MQTT_PORT)..."
mosquitto_pub -h $(TRACKER_MQTT_HOST) -p $(TRACKER_MQTT_PORT) -t '$(MQTT_DETECTION_TOPIC)' \
-m '{"id":"test-cam","timestamp":"$(shell date -u +%Y-%m-%dT%H:%M:%S.000Z)","objects":{"person":[{"bounding_box_px":{"x":100,"y":50,"width":80,"height":200}}]}}'
@echo "βœ“ Detection published"

#####################################################################
# Clean targets
#####################################################################

# Override common.mk clean to also remove local build directories
clean:
rm -rf build* test/service/.venv .pytest_cache
-@cd test/service && docker compose down 2>/dev/null || true
rm -rf build* test/service/.venv test/service/.certs test/service/.env .pytest_cache
-docker rmi $(IMAGE):$(VERSION) $(IMAGE):latest 2>/dev/null || true
-rm -f $(BUILD_DIR)/$(IMAGE)-*deps.txt $(LOG_FILE) 2>/dev/null || true
3 changes: 3 additions & 0 deletions tracker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ make install-tools
# Coverage tools (optional, for local coverage reports)
pipx install gcovr
sudo apt-get install -y lcov

# MQTT client tools (optional, for manual testing)
sudo apt-get install -y mosquitto-clients
```

#### Build
Expand Down
2 changes: 1 addition & 1 deletion tracker/conanfile.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
[requires]
quill/11.0.2
cli11/2.6.0
simdjson/4.2.2
cpp-httplib/0.28.0
rapidjson/cci.20230929
gtest/1.17.0
opencv/4.12.0
eigen/3.4.0
paho-mqtt-cpp/1.5.3

[generators]
CMakeDeps
Expand Down
79 changes: 75 additions & 4 deletions tracker/inc/config_loader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,95 @@
#pragma once

#include <filesystem>
#include <optional>
#include <string>

namespace tracker {

/**
* @brief TLS certificate settings for secure connections.
*/
struct TlsConfig {
std::string ca_cert_path;
std::string client_cert_path;
std::string client_key_path;
bool verify_server = true;
};

/**
* @brief MQTT broker connection settings.
*/
struct MqttConfig {
std::string host;
int port;
bool insecure = false;
std::optional<TlsConfig> tls;
};

/**
* @brief Health check HTTP server settings.
*/
struct HealthcheckConfig {
int port = 8080;
};

/**
* @brief Tracker service settings.
*/
struct TrackerConfig {
HealthcheckConfig healthcheck;
bool schema_validation = true;
};

/**
* @brief External service connections.
*/
struct InfrastructureConfig {
MqttConfig mqtt;
TrackerConfig tracker;
};

/**
* @brief Logging configuration.
*/
struct LoggingConfig {
std::string level = "info";
};

/**
* @brief Observability settings.
*/
struct ObservabilityConfig {
LoggingConfig logging;
};

/**
* @brief Service configuration loaded from JSON config file.
*
* Values can be overridden by environment variables with TRACKER_ prefix.
*/
struct ServiceConfig {
std::string log_level;
int healthcheck_port;
InfrastructureConfig infrastructure;
ObservabilityConfig observability;
};

/// JSON Pointer paths (RFC6901) for extracting ServiceConfig values
namespace json {
constexpr char LOG_LEVEL[] = "/observability/logging/level";
constexpr char HEALTHCHECK_PORT[] = "/infrastructure/tracker/healthcheck/port";
constexpr char OBSERVABILITY_LOGGING_LEVEL[] = "/observability/logging/level";
constexpr char INFRASTRUCTURE_TRACKER_HEALTHCHECK_PORT[] =
"/infrastructure/tracker/healthcheck/port";
constexpr char INFRASTRUCTURE_TRACKER_SCHEMA_VALIDATION[] =
"/infrastructure/tracker/schema_validation";
constexpr char INFRASTRUCTURE_MQTT_HOST[] = "/infrastructure/mqtt/host";
constexpr char INFRASTRUCTURE_MQTT_PORT[] = "/infrastructure/mqtt/port";
constexpr char INFRASTRUCTURE_MQTT_INSECURE[] = "/infrastructure/mqtt/insecure";
constexpr char INFRASTRUCTURE_MQTT_TLS[] = "/infrastructure/mqtt/tls";
constexpr char INFRASTRUCTURE_MQTT_TLS_CA_CERT_PATH[] = "/infrastructure/mqtt/tls/ca_cert_path";
constexpr char INFRASTRUCTURE_MQTT_TLS_CLIENT_CERT_PATH[] =
"/infrastructure/mqtt/tls/client_cert_path";
constexpr char INFRASTRUCTURE_MQTT_TLS_CLIENT_KEY_PATH[] =
"/infrastructure/mqtt/tls/client_key_path";
constexpr char INFRASTRUCTURE_MQTT_TLS_VERIFY_SERVER[] = "/infrastructure/mqtt/tls/verify_server";
} // namespace json

/**
Expand Down
25 changes: 25 additions & 0 deletions tracker/inc/env_vars.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,29 @@ constexpr const char* LOG_LEVEL = "TRACKER_LOG_LEVEL";
/// Environment variable for overriding healthcheck server port (1024-65535)
constexpr const char* HEALTHCHECK_PORT = "TRACKER_HEALTHCHECK_PORT";

/// Environment variable for overriding MQTT broker host
constexpr const char* MQTT_HOST = "TRACKER_MQTT_HOST";

/// Environment variable for overriding MQTT broker port (1-65535)
constexpr const char* MQTT_PORT = "TRACKER_MQTT_PORT";

/// Environment variable for overriding MQTT insecure mode (true/false)
constexpr const char* MQTT_INSECURE = "TRACKER_MQTT_INSECURE";

/// Environment variable for overriding MQTT TLS CA certificate path
constexpr const char* MQTT_TLS_CA_CERT = "TRACKER_MQTT_TLS_CA_CERT";

/// Environment variable for overriding MQTT TLS client certificate path
constexpr const char* MQTT_TLS_CLIENT_CERT = "TRACKER_MQTT_TLS_CLIENT_CERT";

/// Environment variable for overriding MQTT TLS client key path
constexpr const char* MQTT_TLS_CLIENT_KEY = "TRACKER_MQTT_TLS_CLIENT_KEY";

/// Environment variable for overriding MQTT TLS server verification (true/false)
constexpr const char* MQTT_TLS_VERIFY_SERVER = "TRACKER_MQTT_TLS_VERIFY_SERVER";

/// Environment variable for enabling/disabling JSON schema validation for MQTT messages
/// (true/false)
constexpr const char* MQTT_SCHEMA_VALIDATION = "TRACKER_MQTT_SCHEMA_VALIDATION";

} // namespace tracker::env
3 changes: 3 additions & 0 deletions tracker/inc/logger.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,9 @@ class Logger {
static void log_warn(const LogEntry& entry);
static void log_error(const LogEntry& entry);

// Check if debug logging is enabled (for conditional expensive computations)
[[nodiscard]] static bool should_log_debug();

private:
Logger() = default;
~Logger() = default;
Expand Down
Loading
Loading