• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mozilla / relman-auto-nag / #5299

31 Oct 2024 12:12PM CUT coverage: 21.57% (-0.09%) from 21.659%
#5299

push

coveralls-python

gmierz
Clean up code.

426 of 2888 branches covered (14.75%)

0 of 10 new or added lines in 1 file covered. (0.0%)

13 existing lines in 1 file now uncovered.

1943 of 9008 relevant lines covered (21.57%)

0.22 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/bugbot/rules/perfalert_inactive_regression_nag.py
1
# This Source Code Form is subject to the terms of the Mozilla Public
2
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
3
# You can obtain one at http://mozilla.org/MPL/2.0/.
4

NEW
5
from libmozdata.bugzilla import Bugzilla
×
6

NEW
7
from bugbot import logger, utils
×
8
from bugbot.rules.needinfo_regression_author import NeedinfoRegressionAuthor
×
NEW
9
from bugbot.user_activity import UserActivity, UserStatus
×
10

11

12
class PerfAlertInactiveRegressionNag(NeedinfoRegressionAuthor):
×
NEW
13
    def __init__(self, nweeks=1):
×
14
        super().__init__()
×
15
        self.nweeks = nweeks
×
16

17
    def description(self):
×
18
        return "PerfAlert regressions nag with 1 week of inactivity"
×
19

20
    def handle_bug(self, bug, data):
×
21
        if len(bug["regressed_by"]) != 1:
×
22
            # either we don't have access to the regressor,
23
            # or there's more than one, either way leave things alone
24
            return
×
25

26
        bug_id = str(bug["id"])
×
27
        data[bug_id] = {
×
28
            "creator": bug["creator"],
29
            "regressor_id": bug["regressed_by"][0],
30
            "severity": bug["severity"],
31
        }
32

33
        if "triage_owner_detail" in bug:
×
34
            data[bug_id]["triage_owner"] = bug["triage_owner_detail"]
×
35

36
        return bug
×
37

38
    def get_bz_params(self, date):
×
39
        start_date, _ = self.get_dates(date)
×
40

41
        fields = [
×
42
            "id",
43
            "triage_owner",
44
            "creator",
45
            "regressed_by",
46
            "assigned_to",
47
            "severity",
48
        ]
49

50
        # Find all bugs with regressed_by information which were open after start_date or
51
        # whose regressed_by field was set after start_date.
52
        params = {
×
53
            "include_fields": fields,
54
            "f3": "creation_ts",
55
            "o3": "greaterthan",
56
            "v3": "2024-10-01T00:00:00Z",
57
            "f1": "regressed_by",
58
            "o1": "isnotempty",
59
            "f2": "keywords",
60
            "o2": "allwords",
61
            "v2": ["regression", "perf-alert"],
62
            "f9": "days_elapsed",
63
            "o9": "greaterthan",
64
            "v9": self.nweeks * 7,
65
            "status": ["UNCONFIRMED", "NEW", "REOPENED"],
66
            "resolution": ["---"],
67
        }
68

69
        return params
×
70

71
    def filter_bugs(self, bugs):
×
72
        # TODO: Attempt to needinfo the triage owner instead of ignoring the bugs
73
        # Exclude bugs whose regressor author is nobody.
74
        for bug in list(bugs.values()):
×
75
            if utils.is_no_assignee(bug["regressor_author_email"]):
×
76
                logger.warning(
×
77
                    "Bug {}, regressor of bug {}, doesn't have an author".format(
78
                        bug["regressor_id"], bug["id"]
79
                    )
80
                )
NEW
81
                del bugs[bug["id"]]
×
82

83
        # Exclude bugs where the regressor author is inactive or blocked needinfo.
84
        # TODO: We can drop this when https://github.com/mozilla/bugbot/issues/1465 is implemented.
NEW
85
        users_info = UserActivity(include_fields=["groups", "requests"]).check_users(
×
86
            set(bug["regressor_author_email"] for bug in bugs.values()),
87
            keep_active=True,
88
            fetch_employee_info=False,
89
        )
90

NEW
91
        for bug_id, bug in list(bugs.items()):
×
NEW
92
            user_info = users_info[bug["regressor_author_email"]]
×
NEW
93
            if (
×
94
                user_info["status"] != UserStatus.ACTIVE
95
                or user_info["requests"]["needinfo"]["blocked"]
96
            ):
NEW
97
                del bugs[bug_id]
×
98

99
        Bugzilla(
×
100
            bugids=self.get_list_bugs(bugs),
101
            comment_include_fields=["creator"],
102
        ).get_data().wait()
103

104
        return bugs
×
105

106
    def get_autofix_change(self):
×
107
        pass
×
108

109
    def set_autofix(self, bugs):
×
110
        for bugid, info in bugs.items():
×
111
            self.extra_ni[bugid] = {
×
112
                "regressor_id": str(info["regressor_id"]),
113
            }
114
            self.add_auto_ni(
×
115
                bugid,
116
                {
117
                    "mail": info["regressor_author_email"],
118
                    "nickname": info["regressor_author_nickname"],
119
                },
120
            )
121

122
    def get_bugs(self, *args, **kwargs):
×
123
        bugs = super(NeedinfoRegressionAuthor, self).get_bugs(*args, **kwargs)
×
124
        self.retrieve_regressors(bugs)
×
125
        bugs = self.filter_bugs(bugs)
×
126
        self.set_autofix(bugs)
×
127
        return bugs
×
128

129

130
if __name__ == "__main__":
×
131
    PerfAlertInactiveRegressionNag().run()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc