from __future__ import annotations import re import sys import unittest from pathlib import Path if __package__: from .dashboard_common import Dashboard, Target, all_targets, load_dashboard else: sys.path.insert(0, str(Path(__file__).parent.parent)) from tests.dashboard_common import Dashboard, Target, all_targets, load_dashboard DETAILS_JSON = Path(__file__).parent.parent / "tikv_details.json" DIRECT_INSTANCE_METRICS = ( "tikv_concurrency_manager_max_ts", "tikv_concurrency_manager_max_ts_limit", "tikv_pressure_stall_average", "tikv_scheduler_tokio_pool_mean_first_poll_delay_seconds", "tikv_scheduler_tokio_pool_mean_idle_duration_seconds", "tikv_scheduler_tokio_pool_mean_poll_duration_seconds", "tikv_scheduler_tokio_pool_mean_scheduled_duration_seconds", "tikv_tokio_pool_mean_first_poll_delay_seconds", "tikv_tokio_pool_mean_idle_duration_seconds", "tikv_tokio_pool_mean_poll_duration_seconds", "tikv_tokio_pool_mean_scheduled_duration_seconds", ) def per_instance_targets(dashboard: Dashboard) -> list[Target]: return [ target for target in all_targets(dashboard) if re.search(r"by \([^)]*instance", target["expr"]) or any(metric in target["expr"] for metric in DIRECT_INSTANCE_METRICS) ] class InstanceLegendContractsTest(unittest.TestCase): def test_per_instance_series_include_instance_in_legend(self): targets = per_instance_targets(load_dashboard(DETAILS_JSON)) self.assertTrue(targets) for target in targets: with self.subTest(expression=target["expr"]): self.assertIn("instance", target.get("legendFormat", "")) if __name__ == "__main__": _ = unittest.main()