diff --git a/src/fixit/engine.py b/src/fixit/engine.py index 5594989e..36ec39d6 100644 --- a/src/fixit/engine.py +++ b/src/fixit/engine.py @@ -76,7 +76,7 @@ def visit_hook(name: str) -> Iterator[None]: finally: duration_us = int(1000 * 1000 * (time.perf_counter() - start)) LOG.debug(f"PERF: {name} took {duration_us} µs") - self.metrics[name] += duration_us + self.metrics[f"Duration.{name}"] += duration_us metadata_cache: Mapping[ProviderT, object] = {} needs_repo_manager: Set[ProviderT] = set() @@ -103,14 +103,20 @@ def visit_hook(name: str) -> Iterator[None]: wrapper.visit_batched(rules) count = 0 for rule in rules: + self.metrics[f"Count.{rule.name}"] = len(rule._violations) + self.metrics[f"FixCount.{rule.name}"] = 0 for violation in rule._violations: count += 1 if violation.replacement: + self.metrics[f"FixCount.{rule.name}"] += 1 diff = diff_violation(self.path, self.module, violation) violation = replace(violation, diff=diff) yield violation + + self.metrics["Count.Total"] = count + if metrics_hook: metrics_hook(self.metrics) diff --git a/src/fixit/tests/rule.py b/src/fixit/tests/rule.py index 4fa32e75..63f54582 100644 --- a/src/fixit/tests/rule.py +++ b/src/fixit/tests/rule.py @@ -47,9 +47,12 @@ def test_timing(self) -> None: rule = NoopRule() for _ in self.runner.collect_violations([rule], Config()): pass # exhaust the generator - self.assertIn("NoopRule.visit_Module", self.runner.metrics) - self.assertIn("NoopRule.leave_Module", self.runner.metrics) + self.assertIn("Duration.NoopRule.visit_Module", self.runner.metrics) + self.assertIn("Duration.NoopRule.leave_Module", self.runner.metrics) self.assertGreaterEqual(self.runner.metrics["NoopRule.visit_Module"], 0) + self.assertIn("Count.Noop", self.runner.metrics) + self.assertIn("FixCount.Noop", self.runner.metrics) + self.assertIn("Count.Total", self.runner.metrics) def test_timing_hook(self) -> None: rule = NoopRule()