Skip to content

Add opt-in Prometheus metrics endpoint for connector health - #59

Merged
leandropineda merged 9 commits into
mainfrom
feat/metrics-prom-otel
May 4, 2026
Merged

Add opt-in Prometheus metrics endpoint for connector health#59
leandropineda merged 9 commits into
mainfrom
feat/metrics-prom-otel

Conversation

@leandropineda

@leandropineda leandropineda commented Apr 30, 2026

Copy link
Copy Markdown
Member

Summary

This MR builds on top of inorbit-ai/edge-sdk-python#93

Adds an opt-in Prometheus metrics endpoint to the connector framework, gated by a new MetricsConfig block in ConnectorConfig. When enabled, the connector exposes /metrics over HTTP and writes a file_sd-format discovery file so a host-side OTEL collector can find every connector on the host.

Bumps inorbit-edge[video,telemetry]>=2.1 (uses the new setup_prometheus_meter_provider, get_meter, with_counter_metric and attrs_from_self helpers from edge-sdk).

What's included

  • Framework signals out of the box: process up, MQTT session connected (per robot), execution-loop ticks and errors.
  • Inherited per-robot publish counters from inorbit-edge 2.1.
  • Examples updated to show how to add domain metrics (API requests/errors, per-robot data updates).
  • Reference OTEL collector compose + config under docs/deployment/.
  • New "Metrics" user guide linked from the docs.

Demo

For example fleet connector:

$ curl localhost:9091/metrics
# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 4733.0
python_gc_objects_collected_total{generation="1"} 756.0
python_gc_objects_collected_total{generation="2"} 20.0
# HELP python_gc_objects_uncollectable_total Uncollectable objects found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 146.0
python_gc_collections_total{generation="1"} 13.0
python_gc_collections_total{generation="2"} 1.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="12",patchlevel="3",version="3.12.3"} 1.0
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 5.120118784e+09
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 8.650752e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.77757964945e+09
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 13.239999999999998
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 18.0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1024.0
# HELP target_info Target metadata
# TYPE target_info gauge
target_info{inorbit_connector_id="example-fleet",inorbit_connector_type="example_bot",service_instance_id="example-fleet",service_name="inorbit_connector",service_version="2.2.0",telemetry_sdk_language="python",telemetry_sdk_name="opentelemetry",telemetry_sdk_version="1.41.1"} 1.0
# HELP inorbit_connector_example_bot_fleet_api_requests_total HTTP calls to the fleet manager API (attribute: endpoint)
# TYPE inorbit_connector_example_bot_fleet_api_requests_total counter
inorbit_connector_example_bot_fleet_api_requests_total{endpoint="telemetry"} 2748.0
inorbit_connector_example_bot_fleet_api_requests_total{endpoint="system_stats"} 1378.0
inorbit_connector_example_bot_fleet_api_requests_total{endpoint="robot_status"} 1378.0
# HELP inorbit_connector_example_bot_robot_updates_received_total Data points received from the fleet API, fanned out per robot (attributes: endpoint, robot_id)
# TYPE inorbit_connector_example_bot_robot_updates_received_total counter
inorbit_connector_example_bot_robot_updates_received_total{endpoint="robot_status",robot_id="fleet-robot-1"} 1378.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="robot_status",robot_id="fleet-robot-2"} 1378.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="robot_status",robot_id="fleet-robot-3"} 1378.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="telemetry",robot_id="fleet-robot-1"} 2748.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="telemetry",robot_id="fleet-robot-2"} 2748.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="telemetry",robot_id="fleet-robot-3"} 2748.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="system_stats",robot_id="fleet-robot-1"} 1378.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="system_stats",robot_id="fleet-robot-2"} 1378.0
inorbit_connector_example_bot_robot_updates_received_total{endpoint="system_stats",robot_id="fleet-robot-3"} 1378.0
# HELP inorbit_connector_calls_publish_system_stats_total number of calls to publish system stats
# TYPE inorbit_connector_calls_publish_system_stats_total counter
inorbit_connector_calls_publish_system_stats_total{robot_id="fleet-robot-1"} 2747.0
inorbit_connector_calls_publish_system_stats_total{robot_id="fleet-robot-2"} 2747.0
inorbit_connector_calls_publish_system_stats_total{robot_id="fleet-robot-3"} 2747.0
# HELP inorbit_connector_calls_publish_map_total number of calls to publish maps
# TYPE inorbit_connector_calls_publish_map_total counter
inorbit_connector_calls_publish_map_total{robot_id="fleet-robot-1"} 1.0
inorbit_connector_calls_publish_map_total{robot_id="fleet-robot-2"} 1.0
inorbit_connector_calls_publish_map_total{robot_id="fleet-robot-3"} 1.0
# HELP inorbit_connector_calls_publish_pose_total number of calls to publish poses
# TYPE inorbit_connector_calls_publish_pose_total counter
inorbit_connector_calls_publish_pose_total{robot_id="fleet-robot-1"} 2747.0
inorbit_connector_calls_publish_pose_total{robot_id="fleet-robot-2"} 2747.0
inorbit_connector_calls_publish_pose_total{robot_id="fleet-robot-3"} 2746.0
# HELP inorbit_connector_calls_publish_odometry_total number of calls to publish odometry
# TYPE inorbit_connector_calls_publish_odometry_total counter
inorbit_connector_calls_publish_odometry_total{robot_id="fleet-robot-1"} 2747.0
inorbit_connector_calls_publish_odometry_total{robot_id="fleet-robot-2"} 2747.0
inorbit_connector_calls_publish_odometry_total{robot_id="fleet-robot-3"} 2746.0
# HELP inorbit_connector_calls_publish_key_values_total number of calls to publish key-values
# TYPE inorbit_connector_calls_publish_key_values_total counter
inorbit_connector_calls_publish_key_values_total{robot_id="fleet-robot-1"} 2747.0
inorbit_connector_calls_publish_key_values_total{robot_id="fleet-robot-2"} 2747.0
inorbit_connector_calls_publish_key_values_total{robot_id="fleet-robot-3"} 2746.0
# HELP inorbit_connector_inorbit_connector_execution_loop_ticks_total Successful iterations of the connector's _execution_loop
# TYPE inorbit_connector_inorbit_connector_execution_loop_ticks_total counter
inorbit_connector_inorbit_connector_execution_loop_ticks_total 2747.0
# HELP inorbit_connector_inorbit_connector_up 1 while the connector main thread is alive
# TYPE inorbit_connector_inorbit_connector_up gauge
inorbit_connector_inorbit_connector_up 1.0
# HELP inorbit_connector_inorbit_connector_session_connected Per-robot MQTT session connection status (1 = connected, 0 = disconnected). Captures the case where the connector process is alive but its MQTT link to InOrbit is down.
# TYPE inorbit_connector_inorbit_connector_session_connected gauge
inorbit_connector_inorbit_connector_session_connected{robot_id="fleet-robot-1"} 1.0
inorbit_connector_inorbit_connector_session_connected{robot_id="fleet-robot-2"} 1.0
inorbit_connector_inorbit_connector_session_connected{robot_id="fleet-robot-3"} 1.0
# HELP inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds The duration of the collect operation of the metric reader.
# TYPE inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds histogram
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="0.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 0.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="5.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="10.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="25.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="50.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="75.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="100.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="250.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="500.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="750.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="1000.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="2500.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="5000.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="7500.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="10000.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="+Inf",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_count{otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 4.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_sum{otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 0.001539573015179485

For example robot connector:

$ curl localhost:9090/metrics
# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 445.0
python_gc_objects_collected_total{generation="1"} 54.0
python_gc_objects_collected_total{generation="2"} 20.0
# HELP python_gc_objects_uncollectable_total Uncollectable objects found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 140.0
python_gc_collections_total{generation="1"} 12.0
python_gc_collections_total{generation="2"} 1.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="12",patchlevel="3",version="3.12.3"} 1.0
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 4.951564288e+09
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 8.6556672e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.77758247407e+09
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 3.19
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 12.0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1024.0
# HELP target_info Target metadata
# TYPE target_info gauge
target_info{inorbit_connector_id="my-example-robot",inorbit_connector_type="example_bot",service_instance_id="my-example-robot",service_name="inorbit_connector",service_version="2.2.0",telemetry_sdk_language="python",telemetry_sdk_name="opentelemetry",telemetry_sdk_version="1.41.1"} 1.0
# HELP inorbit_connector_example_bot_api_requests_total Calls made to the example bot API (attribute: endpoint)
# TYPE inorbit_connector_example_bot_api_requests_total counter
inorbit_connector_example_bot_api_requests_total{endpoint="telemetry"} 6.0
inorbit_connector_example_bot_api_requests_total{endpoint="system_stats"} 11.0
# HELP inorbit_connector_calls_publish_system_stats_total number of calls to publish system stats
# TYPE inorbit_connector_calls_publish_system_stats_total counter
inorbit_connector_calls_publish_system_stats_total{robot_id="my-example-robot"} 5.0
# HELP inorbit_connector_calls_publish_map_total number of calls to publish maps
# TYPE inorbit_connector_calls_publish_map_total counter
inorbit_connector_calls_publish_map_total{robot_id="my-example-robot"} 1.0
# HELP inorbit_connector_calls_publish_pose_total number of calls to publish poses
# TYPE inorbit_connector_calls_publish_pose_total counter
inorbit_connector_calls_publish_pose_total{robot_id="my-example-robot"} 5.0
# HELP inorbit_connector_calls_publish_odometry_total number of calls to publish odometry
# TYPE inorbit_connector_calls_publish_odometry_total counter
inorbit_connector_calls_publish_odometry_total{robot_id="my-example-robot"} 5.0
# HELP inorbit_connector_inorbit_connector_execution_loop_ticks_total Successful iterations of the connector's _execution_loop
# TYPE inorbit_connector_inorbit_connector_execution_loop_ticks_total counter
inorbit_connector_inorbit_connector_execution_loop_ticks_total 5.0
# HELP inorbit_connector_inorbit_connector_up 1 while the connector main thread is alive
# TYPE inorbit_connector_inorbit_connector_up gauge
inorbit_connector_inorbit_connector_up 1.0
# HELP inorbit_connector_inorbit_connector_session_connected Per-robot MQTT session connection status (1 = connected, 0 = disconnected). Captures the case where the connector process is alive but its MQTT link to InOrbit is down.
# TYPE inorbit_connector_inorbit_connector_session_connected gauge
inorbit_connector_inorbit_connector_session_connected{robot_id="my-example-robot"} 1.0
# HELP inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds The duration of the collect operation of the metric reader.
# TYPE inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds histogram
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="0.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 0.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="5.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="10.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="25.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="50.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="75.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="100.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="250.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="500.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="750.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="1000.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="2500.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="5000.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="7500.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="10000.0",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_bucket{le="+Inf",otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_count{otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 1.0
inorbit_connector_otel_sdk_metric_reader_collection_duration_seconds_sum{otel_component_name="prometheus_http_text_metric_exporter/1",otel_component_type="prometheus_http_text_metric_exporter"} 0.00039046595338732004

@leandropineda
leandropineda force-pushed the feat/metrics-prom-otel branch from eb9ff4a to 4b38e3b Compare April 30, 2026 20:34
@leandropineda leandropineda changed the title Metrics Support for Prometheus metrics Apr 30, 2026
@leandropineda leandropineda changed the title Support for Prometheus metrics Add opt-in Prometheus metrics endpoint for connector health Apr 30, 2026
@leandropineda
leandropineda marked this pull request as ready for review April 30, 2026 20:58
@leandropineda
leandropineda requested a review from b-Tomas April 30, 2026 20:58
@b-Tomas
b-Tomas requested a review from Copilot April 30, 2026 21:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an opt-in Prometheus metrics subsystem to the connector framework (via ConnectorConfig.metrics), including a /metrics HTTP endpoint plus Prometheus file_sd discovery output so host-side collectors can automatically find connector instances.

Changes:

  • Introduces MetricsConfig in ConnectorConfig and wires framework-level OTEL/Prometheus setup + a metrics HTTP server into the connector lifecycle.
  • Adds framework health instruments (up/session connected/execution loop ticks+errors) and updates examples to demonstrate connector-specific metrics.
  • Adds docs and deployment references (OTEL collector compose/config) and bumps inorbit-edge dependency to include telemetry.

Reviewed changes

Copilot reviewed 27 out of 27 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/test_models.py Adds unit tests for MetricsConfig defaults/validation and ConnectorConfig.metrics default.
tests/test_metrics_setup.py Tests Prometheus meter provider setup behavior and resource attributes.
tests/test_metrics_server.py Tests /metrics serving and file_sd discovery file lifecycle/atomic writes.
tests/test_metrics_instruments.py Verifies framework instruments are exposed and callable.
tests/test_connector_metrics.py Integration-ish test covering connector metrics server lifecycle and default-disabled behavior.
pyproject.toml Bumps inorbit-edge dependency to include telemetry extras.
inorbit_connector/models.py Adds MetricsConfig model and embeds it into ConnectorConfig.
inorbit_connector/metrics/__init__.py Implements Prometheus/OTEL setup, metrics HTTP server + discovery writer, and framework instruments.
inorbit_connector/connector.py Wires metrics setup/instruments into connector init + start/stop + execution loop counters.
examples/robot-connector/robot.py Demonstrates domain metrics via with_counter_metric + error counters.
examples/robot-connector/metrics.py Defines example robot connector meter + API request/error counters.
examples/fleet-connector/metrics.py Defines example fleet connector meter + bulk API and per-robot fan-out counters.
examples/fleet-connector/fleet_client.py Instruments fleet API wrapper methods and per-robot update counters.
examples/example.yaml Adds metrics: config block example (robot connector).
examples/example.fleet.yaml Adds metrics: config block example (fleet connector).
examples/example.env Adds extra env vars used by examples.
examples/README.md Documents how to run/scrape metrics from the examples.
docs/sphinx/usage/metrics.md Adds Sphinx page that includes the metrics user guide content.
docs/sphinx/usage/index.md Links the new Metrics page in Sphinx usage index.
docs/deployment/otel-collector-config.yaml Reference OTEL collector config using Prometheus file_sd_configs.
docs/deployment/otel-collector-compose.yaml Reference docker-compose for running an OTEL collector alongside connectors.
docs/deployment/README.md Deployment guide for scraping/exporting connector metrics on a host.
docs/contents/usage/metrics.md New end-user metrics guide (signals, config, cardinality guidance, examples).
docs/contents/usage/index.md Adds Metrics link to docs usage index.
docs/contents/index.md Adds Metrics entry to top-level docs index.
docs/contents/configuration.md Documents ConnectorConfig.metrics and adds a MetricsConfig reference section.
README.md Mentions optional Prometheus metrics as a built-in framework capability.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread inorbit_connector/metrics/__init__.py Outdated
Comment thread docs/contents/configuration.md Outdated
Comment thread examples/metrics/README.md
@leandropineda
leandropineda merged commit 5665288 into main May 4, 2026
13 checks passed
@leandropineda
leandropineda deleted the feat/metrics-prom-otel branch May 4, 2026 14:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants