generate_status_update_report.py (51 lines of code) (raw):
import requests
import re
import json
from datetime import datetime, timedelta
# Configuration
results = {}
BUGZILLA_URL = "https://bugzilla.mozilla.org/rest/bug"
threshold = 15
patern_lines = r"(?<=## Repository breakdown:)(.*?)(?=## Table)"
pattern_numbers = r":\s*(\d+)"
DAYS_BACK = 7 # Number of days to look back
# Calculate the date for one week ago
last_week = datetime.now() - timedelta(days=DAYS_BACK)
# Query parameters for Bugzilla
params = {
"product": "Testing",
"keywords": "intermittent-failure",
"keywords_type": "allwords",
"resolution": "---",
"component": ["AWSY", "mozperftest", "Performance", "Raptor", "Talos"],
"include_fields": "id,summary"
}
# Fetch bugs from Bugzilla
response = requests.get(BUGZILLA_URL, params=params).json()
# Check if bugs are returned
if "bugs" in response and response["bugs"]:
bugs = response["bugs"]
print(f"Found {len(bugs)} bugs matching the query.")
for bug in bugs:
bug_id = bug['id']
print(f"Checking comments for Bug {bug_id} - {bug['summary']}")
# Fetch comments for each bug
comments_url = f"{BUGZILLA_URL}/{bug_id}/comment"
comments_response = requests.get(comments_url).json()
if "bugs" in comments_response and str(bug_id) in comments_response["bugs"]:
comments = comments_response["bugs"][str(bug_id)]["comments"]
for comment in reversed(comments):
# Convert the comment's creation date to a datetime object
comment_date = datetime.strptime(comment["creation_time"], "%Y-%m-%dT%H:%M:%SZ")
# Check if the comment is recent and matches the author
if comment_date >= last_week and comment["author"] == "orangefactor@bots.tld":
match = re.search(patern_lines, comment["text"], re.DOTALL)
if match:
lines = match.group(1).strip()
numbers_failures = re.findall(pattern_numbers, lines)
total_numbers_failures = sum([int(num) for num in numbers_failures])
if total_numbers_failures > threshold:
results.setdefault(str(bug_id), []).append(total_numbers_failures)
else:
print("No comments found for this bug.")
else:
print("No bugs found matching the query.")
print(f"\n ### A TOTAL OF {len(results)} BUGS HAVE BEEN FOUND ### \n")
for i in results:
summary = next((bug["summary"] for bug in bugs if str(bug.get("id")) == i), None)
results[i] = {"id": i, "link": f"https://bugzilla.mozilla.org/show_bug.cgi?id={i}",
"number_failures": max(results[i]), "summary": summary}
json_formatted_str = json.dumps(results, indent=2)
print(json_formatted_str)