Skip to content

Instantly share code, notes, and snippets.

@major
Created August 27, 2015 16:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save major/21bba17de6c5c955916b to your computer and use it in GitHub Desktop.
Save major/21bba17de6c5c955916b to your computer and use it in GitHub Desktop.
Fedora Security Team report script
#!/usr/bin/env python
from bugzilla import Bugzilla
from collections import defaultdict, OrderedDict
from datetime import datetime
from terminaltables import AsciiTable
from pprint import pprint
VALID_STATUSES = ['NEW', 'ASSIGNED', 'MODIFIED', 'ON_QA']
def get_security_bugs():
bz = Bugzilla(url='https://bugzilla.redhat.com/xmlrpc.cgi')
query_data = {
'keywords': 'SecurityTracking',
'keywords_type': 'allwords',
# 'component': 'cacti',
'status': VALID_STATUSES,
}
bugs = bz.query(query_data)
return bugs
def get_table(rows, headers=None, limit=None, title=None):
table_data = [headers]
i = 0
for key, value in rows.iteritems():
if limit is not None and i > limit:
break
table_data.append([key, str(value)])
i += 1
return AsciiTable(table_data=table_data, title=title).table
# Gather data
bugs = get_security_bugs()
statuses = defaultdict(int)
for bug in bugs:
statuses[bug.status] += 1
priorities = defaultdict(int)
for bug in bugs:
priorities[bug.priority] += 1
severities = defaultdict(int)
for bug in bugs:
severities[bug.bug_severity] += 1
owners = defaultdict(int)
for bug in bugs:
if 'fst_owner' in bug.status_whiteboard:
owners['Owned'] += 1
else:
owners['Not Owned'] += 1
components = defaultdict(int)
for bug in bugs:
components[bug.component] += 1
components = OrderedDict(sorted(components.items(), key=lambda t: t[1],
reverse=True))
# Build Report
datestring = datetime.now().isoformat(' ')
print """
__ _
/ _| ___ __| | ___ _ __ __ _
| |_ / _ \/ _` |/ _ \| '__/ _` | Fedora Security Team Report
| _| __/ (_| | (_) | | | (_| | Report date: {0}
|_| \___|\__,_|\___/|_| \__,_|
-------------------------------------------------------------------------------
""".format(datestring)
headers = ['Status', 'Tickets Open']
print get_table(statuses, headers=headers, title="Ticket Status")
headers = ['Priority', 'Tickets Open']
print get_table(priorities, headers=headers, title="Priorities")
headers = ['Severity', 'Tickets Open']
print get_table(priorities, headers=headers, title="Severities")
headers = ['Status', 'Tickets Open']
print get_table(owners, headers=headers, title="Owned by FST")
headers = ['Component', 'Tickets Open']
print get_table(components, headers=headers, title="Most Tickets Open", limit=25)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment