in treeherder/intermittents_commenter/commenter.py [0:0]
def generate_bug_changes(self, startday, endday, alt_startday, alt_endday):
"""Returns a list of dicts containing a bug id, a bug comment (only
for bugs whose total number of daily or weekly occurrences meet
the appropriate threshold) and potentially an updated whiteboard
or priority status."""
bug_ids, bugs = self.get_bugs(startday, endday)
option_collection_map = OptionCollection.objects.get_option_collection_map()
bug_map = self.build_bug_map(bugs, option_collection_map)
alt_date_bug_totals = self.get_alt_date_bug_totals(alt_startday, alt_endday, bug_ids)
# if fetch_bug_details fails, None is returned
bugs_info = self.fetch_all_bug_details(bug_ids)
all_bug_changes = []
with open("treeherder/intermittents_commenter/comment.template") as template_file:
template = Template(template_file.read())
top_bugs = []
if self.weekly_mode:
top_bugs = [
bug[0] for bug in sorted(bug_map.items(), key=lambda x: x[1].total, reverse=True)
][:50]
for bug_id, counts in bug_map.items():
change_priority = None
change_whiteboard = None
priority = 0
rank = top_bugs.index(bug_id) + 1 if self.weekly_mode and bug_id in top_bugs else None
if bugs_info and bug_id in bugs_info:
if self.weekly_mode:
priority = self.assign_priority(counts)
if priority == 2:
change_priority, change_whiteboard = self.check_needswork_owner(
bugs_info[bug_id]
)
# change [stockwell needswork] to [stockwell unknown] when failures drop below 20 failures/week
# if this block is true, it implies a priority of 0 (mutually exclusive to previous block)
if counts.total < 20:
change_whiteboard = self.check_needswork(bugs_info[bug_id]["whiteboard"])
else:
change_priority, change_whiteboard = self.check_needswork_owner(
bugs_info[bug_id]
)
# recommend disabling when more than 150 failures tracked over 21 days and
# takes precedence over any prevous change_whiteboard assignments
if bug_id in alt_date_bug_totals and not self.check_whiteboard_status(
bugs_info[bug_id]["whiteboard"]
):
priority = 3
change_whiteboard = bugs_info[bug_id]["whiteboard"].replace(
"[stockwell unknown]", ""
)
change_whiteboard = re.sub(
r"\s*\[stockwell needswork[^\]]*\]\s*", "", change_whiteboard
).strip()
change_whiteboard += "[stockwell disable-recommended]"
comment = template.render(
bug_id=bug_id,
total=counts.total,
rank=rank,
priority=priority,
repositories=counts.per_repositories,
test_variants=sorted(list(counts.test_variants)),
data_table=counts.data_table,
startday=startday,
endday=endday.split()[0],
weekly_mode=self.weekly_mode,
)
bug_changes = {"bug_id": bug_id, "changes": {"comment": {"body": comment}}}
if change_whiteboard:
bug_changes["changes"]["whiteboard"] = change_whiteboard
if change_priority:
bug_changes["changes"]["priority"] = change_priority
all_bug_changes.append(bug_changes)
return all_bug_changes