Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions docs/config-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -1069,7 +1069,7 @@ observability:
enabled: true
tachometer:
enabled: true
default_frequency: 5
default_frequency: 1
sync_interval_secs: 120
compaction_threads: 4
storage_subdir: tachometer
Expand All @@ -1087,7 +1087,7 @@ observability:
| ---------------- | ---- | ------- | ----------- |
| `enabled` | bool/null | `null` | `null` follows `observability.enabled`; explicit `false` opts out; explicit `true` without `observability.enabled` is a validation error |
| `binary_path` | string | `tachometer-scraper` | Scraper command or path on the compute nodes |
| `default_frequency` | float | `5.0` | Scrape frequency in Hz |
| `default_frequency` | float | `1.0` | Scrape frequency in Hz |
| `sync_interval_secs` | int | `120` | Interval for intermediate Parquet compaction; `0` disables it |
| `compaction_threads` | int | `4` | Value passed as `POLARS_MAX_THREADS` |
| `storage_subdir` | string | `tachometer` | Output directory below the run log directory |
Expand Down
2 changes: 1 addition & 1 deletion src/srtctl/core/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -1042,7 +1042,7 @@ class TachometerConfig:

enabled: bool | None = None
binary_path: str = "tachometer-scraper"
default_frequency: float = 5.0
default_frequency: float = 1.0
sync_interval_secs: int = 120
compaction_threads: int = 4
storage_subdir: str = "tachometer"
Expand Down
8 changes: 8 additions & 0 deletions tests/test_telemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,14 @@ def test_scraper_exporters_are_optional(self):
assert config.observability.tachometer.dcgm_exporter is None
assert config.observability.tachometer.node_exporter is None

def test_default_frequency_is_one_hz(self):
"""1 Hz matches the retired RAW scraper's cadence; 5 Hz produced ~9M
rows in a 25-minute run with no analysis consuming the extra
resolution, and scrape load on worker endpoints is not free."""
config = _make_config(tachometer=TachometerConfig(enabled=True))

assert config.observability.tachometer.default_frequency == 1.0

def test_scraper_requires_nonempty_binary_path(self):
with pytest.raises(ValidationError, match="observability.tachometer.binary_path"):
_make_config(
Expand Down
Loading