summaryrefslogtreecommitdiffstats
path: root/src/ansiblelint/stats.py
blob: 79475d2ba02b759ec19c52a5383381b08b820bf3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
"""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]))