summaryrefslogtreecommitdiffstats
path: root/src/ansiblelint/stats.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ansiblelint/stats.py')
-rw-r--r--src/ansiblelint/stats.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/ansiblelint/stats.py b/src/ansiblelint/stats.py
new file mode 100644
index 0000000..67320b8
--- /dev/null
+++ b/src/ansiblelint/stats.py
@@ -0,0 +1,36 @@
+"""Module hosting functionality about reporting."""
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+
+
+@dataclass(order=True)
+class TagStats:
+ """Tag statistics."""
+
+ order: int = 0 # to be computed based on rule's profile
+ tag: str = "" # rule effective id (can be multiple tags per rule id)
+ count: int = 0 # total number of occurrences
+ warning: bool = False # set true if listed in warn_list
+ profile: str = ""
+ associated_tags: list[str] = field(default_factory=list)
+
+
+class SummarizedResults:
+ """The statistics about an ansible-lint run."""
+
+ failures: int = 0
+ warnings: int = 0
+ fixed_failures: int = 0
+ fixed_warnings: int = 0
+ tag_stats: dict[str, TagStats] = {}
+ passed_profile: str = ""
+
+ @property
+ def fixed(self) -> int:
+ """Get total fixed count."""
+ return self.fixed_failures + self.fixed_warnings
+
+ def sort(self) -> None:
+ """Sort tag stats by tag name."""
+ self.tag_stats = dict(sorted(self.tag_stats.items(), key=lambda t: t[1]))