scripts/maintenance_effectiveness_indicator.py (46 lines of code) (raw):
# -*- coding: utf-8 -*-
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
import argparse
import math
from logging import INFO, basicConfig, getLogger
import dateutil.parser
from bugbug import bugzilla
from bugbug.utils import get_secret
basicConfig(level=INFO)
logger = getLogger(__name__)
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("teams", help="Bugzilla team", type=str, nargs="+")
parser.add_argument(
"start_date",
help="Start date of the period (YYYY-MM-DD)",
type=str,
)
parser.add_argument(
"end_date",
help="End date of the period (YYYY-MM-DD)",
type=str,
)
parser.add_argument(
"--components",
help="Bugzilla components",
type=str,
nargs="*",
)
args = parser.parse_args()
# Try to use a Bugzilla API key if available.
try:
bugzilla.set_token(get_secret("BUGZILLA_TOKEN"))
except ValueError:
logger.info(
"If you want to include security bugs too, please set the BUGBUG_BUGZILLA_TOKEN environment variable to your Bugzilla API key."
)
result = bugzilla.calculate_maintenance_effectiveness_indicator(
args.teams,
dateutil.parser.parse(args.start_date),
dateutil.parser.parse(args.end_date),
args.components,
)
for factor, value in result["stats"].items():
print("%s: %d" % (factor, round(value, 2) if value != math.inf else value))
for query, link in result["queries"].items():
print(f"{query}: {link}")
if __name__ == "__main__":
main()