Merge "Add db api method to get per status counts for a test"

This commit is contained in:
Jenkins 2015-05-14 18:11:20 +00:00 committed by Gerrit Code Review
commit 13f456ec29

View File

@ -698,3 +698,51 @@ def get_ids_for_all_tests(session=None):
""" """
session = session or get_session() session = session or get_session()
return db_utils.model_query(models.Test, session).value(models.Test.id) return db_utils.model_query(models.Test, session).value(models.Test.id)
def get_test_counts_in_date_range(test_id, start_date=None, stop_date=None,
session=None):
"""Return the number of successes, failures, and skips for a single test.
Optionally you can provide a date to filter the results to be within a
certain date range
:param str start_date: The date to use as the start for counting
:param str stop_date: The date to use as the cutoff for counting
:param session: optional session object if one isn't provided a new session
will be acquired for the duration of this operation
:return: a dict containing the number of successes, failures, and skips
:rtype: dict
"""
start_date = datetime.datetime.strptime(start_date, '%b %d %Y')
if isinstance(stop_date, str):
stop_date = datetime.datetime.strptime(stop_date, '%b %d %Y')
session = session or get_session()
count_dict = {}
success_query = db_utils.model_query(models.TestRun, session).filter_by(
test_id=test_id).filter(models.TestRun.status == 'success')
fail_query = db_utils.model_query(models.TestRun, session).filter_by(
test_id=test_id).filter(models.TestRun.status == 'fail')
skip_query = db_utils.model_query(models.TestRun, session).filter_by(
test_id=test_id).filter(models.TestRun.status == 'skip')
if start_date:
success_query = success_query.filter(
models.TestRun.start_time > start_date)
fail_query = fail_query.filter(
models.TestRun.start_time > start_date)
skip_query = skip_query.filter(
models.TestRun.start_time > start_date)
if stop_date:
success_query = success_query.filter(
models.TestRun.stop_time < stop_date)
fail_query = fail_query.filter(
models.TestRun.stop_time < stop_date)
skip_query = skip_query.filter(
models.TestRun.stop_time < stop_date)
count_dict['success'] = success_query.count()
count_dict['failure'] = fail_query.count()
count_dict['skips'] = skip_query.count()
return count_dict