From 3126ee8bf70837447aee47dd026091196ee0869b Mon Sep 17 00:00:00 2001 From: Sergio Ly Date: Mon, 29 Jul 2024 12:53:21 -0700 Subject: [PATCH 1/6] Added more metrics --- src/fixit/engine.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/fixit/engine.py b/src/fixit/engine.py index 5594989e..9da5ff44 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,10 +103,13 @@ def visit_hook(name: str) -> Iterator[None]: wrapper.visit_batched(rules) count = 0 for rule in rules: + self.metrics[f"ViolationCount.{rule.name}"] = len(rule._violations) + self.metrics[f"ViolationCountWithReplacement.{rule.name}"] = 0 for violation in rule._violations: count += 1 if violation.replacement: + self.metrics[f"ViolationCountWithReplacement.{rule.name}"] += 1 diff = diff_violation(self.path, self.module, violation) violation = replace(violation, diff=diff) From 06c0a927e7c0134dab9968dcc47d2662a9539fbd Mon Sep 17 00:00:00 2001 From: Sergio Ly Date: Tue, 30 Jul 2024 15:28:19 -0700 Subject: [PATCH 2/6] Added metrics and tests --- src/fixit/engine.py | 3 +++ src/fixit/tests/rule.py | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/fixit/engine.py b/src/fixit/engine.py index 9da5ff44..600d5303 100644 --- a/src/fixit/engine.py +++ b/src/fixit/engine.py @@ -114,6 +114,9 @@ def visit_hook(name: str) -> Iterator[None]: violation = replace(violation, diff=diff) yield violation + + self.metrics["ViolationCount.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..baf8248e 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("ViolationCount.Noop", self.runner.metrics) + self.assertIn("ViolationCountWithReplacement.Noop", self.runner.metrics) + self.assertIn("ViolationCount.Total", self.runner.metrics) def test_timing_hook(self) -> None: rule = NoopRule() From 04a0df995cb5dcb74af1a10538a033481e8df21b Mon Sep 17 00:00:00 2001 From: Sergio Ly Date: Wed, 31 Jul 2024 09:24:34 -0700 Subject: [PATCH 3/6] Added client ID env var --- src/fixit/engine.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/fixit/engine.py b/src/fixit/engine.py index 600d5303..61b98f23 100644 --- a/src/fixit/engine.py +++ b/src/fixit/engine.py @@ -4,6 +4,7 @@ # LICENSE file in the root directory of this source tree. import logging +import os import time from collections import defaultdict from contextlib import contextmanager @@ -65,9 +66,17 @@ def collect_violations( The optional `metrics_hook` parameter will be called (if provided) after all lint rules have finished running, passing in a dictionary of - ``RuleName.visit_function_name`` -> ``duration in microseconds``. + { + CLIENT_ID: an optional client id set by environment variable, + Duration.RuleName.visit_function_name: duration in microseconds, + ViolationCount.RuleName: number of violations, + ViolationCountReplacement.RuleName: number of violations with replacements, + ViolationCount.Total: total number of violations, + } """ + self.metrics["CLIENT_ID"] = os.environ.get("FIXIT_CLIENT_ID", "default") + @contextmanager def visit_hook(name: str) -> Iterator[None]: start = time.perf_counter() From 2494100c76b885564942bca6603171d84989c173 Mon Sep 17 00:00:00 2001 From: Sergio Ly Date: Thu, 1 Aug 2024 17:00:28 -0700 Subject: [PATCH 4/6] Revert "Added client ID env var" This reverts commit 04a0df995cb5dcb74af1a10538a033481e8df21b. --- src/fixit/engine.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/fixit/engine.py b/src/fixit/engine.py index 61b98f23..600d5303 100644 --- a/src/fixit/engine.py +++ b/src/fixit/engine.py @@ -4,7 +4,6 @@ # LICENSE file in the root directory of this source tree. import logging -import os import time from collections import defaultdict from contextlib import contextmanager @@ -66,17 +65,9 @@ def collect_violations( The optional `metrics_hook` parameter will be called (if provided) after all lint rules have finished running, passing in a dictionary of - { - CLIENT_ID: an optional client id set by environment variable, - Duration.RuleName.visit_function_name: duration in microseconds, - ViolationCount.RuleName: number of violations, - ViolationCountReplacement.RuleName: number of violations with replacements, - ViolationCount.Total: total number of violations, - } + ``RuleName.visit_function_name`` -> ``duration in microseconds``. """ - self.metrics["CLIENT_ID"] = os.environ.get("FIXIT_CLIENT_ID", "default") - @contextmanager def visit_hook(name: str) -> Iterator[None]: start = time.perf_counter() From 9643e5f917665225b05298e06a6de48f8a7ab50a Mon Sep 17 00:00:00 2001 From: Sergio Ly Date: Thu, 1 Aug 2024 17:24:02 -0700 Subject: [PATCH 5/6] Updated names --- src/fixit/engine.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fixit/engine.py b/src/fixit/engine.py index 600d5303..7b9ee5fe 100644 --- a/src/fixit/engine.py +++ b/src/fixit/engine.py @@ -103,13 +103,13 @@ def visit_hook(name: str) -> Iterator[None]: wrapper.visit_batched(rules) count = 0 for rule in rules: - self.metrics[f"ViolationCount.{rule.name}"] = len(rule._violations) - self.metrics[f"ViolationCountWithReplacement.{rule.name}"] = 0 + 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"ViolationCountWithReplacement.{rule.name}"] += 1 + self.metrics[f"FixCount.{rule.name}"] += 1 diff = diff_violation(self.path, self.module, violation) violation = replace(violation, diff=diff) From 0afe9775c957655bbdb0d0a1e8d40432e9f8b34b Mon Sep 17 00:00:00 2001 From: Sergio Ly Date: Thu, 1 Aug 2024 17:26:36 -0700 Subject: [PATCH 6/6] Updated names and tests --- src/fixit/engine.py | 2 +- src/fixit/tests/rule.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/fixit/engine.py b/src/fixit/engine.py index 7b9ee5fe..36ec39d6 100644 --- a/src/fixit/engine.py +++ b/src/fixit/engine.py @@ -115,7 +115,7 @@ def visit_hook(name: str) -> Iterator[None]: yield violation - self.metrics["ViolationCount.Total"] = count + 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 baf8248e..63f54582 100644 --- a/src/fixit/tests/rule.py +++ b/src/fixit/tests/rule.py @@ -50,9 +50,9 @@ def test_timing(self) -> None: 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("ViolationCount.Noop", self.runner.metrics) - self.assertIn("ViolationCountWithReplacement.Noop", self.runner.metrics) - self.assertIn("ViolationCount.Total", self.runner.metrics) + 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()