Merge "Add DB API method to get failure rate for jobs by run_metadata"
This commit is contained in:
commit
4289fbaa79
@ -1319,6 +1319,36 @@ def get_time_series_runs_by_key_value(key, value, start_date=None,
|
|||||||
return runs
|
return runs
|
||||||
|
|
||||||
|
|
||||||
|
def get_run_failure_rate_by_key_value_metadata(key, value, start_date=None,
|
||||||
|
stop_date=None, session=None):
|
||||||
|
"""Return the failure percentage of runs with a set of run metadata
|
||||||
|
|
||||||
|
:param str key: the metadata key to use for matching the runs
|
||||||
|
:param str value: the metadata value to use for matching the runs
|
||||||
|
:param start_date: Optional start date to filter results on
|
||||||
|
:param str stop_date: Optional stop date to filter results on
|
||||||
|
:param session: optional session object if one isn't provided a new session
|
||||||
|
will be acquired for the duration of this operation
|
||||||
|
|
||||||
|
:return failure_rate: The percentage of runs that failed, will be None if
|
||||||
|
no runs are found
|
||||||
|
:rtype: float
|
||||||
|
"""
|
||||||
|
session = session or get_session()
|
||||||
|
base_query = db_utils.model_query(models.Run, session).join(
|
||||||
|
models.RunMetadata,
|
||||||
|
models.Run.id == models.RunMetadata.run_id).filter(
|
||||||
|
models.RunMetadata.key == key,
|
||||||
|
models.RunMetadata.value == value)
|
||||||
|
base_query = _filter_runs_by_date(base_query, start_date, stop_date)
|
||||||
|
fails = base_query.filter(models.Run.fails >= 1).count()
|
||||||
|
successes = base_query.filter(models.Run.passes > 0,
|
||||||
|
models.Run.fails == 0).count()
|
||||||
|
if fails == 0 and successes == 0:
|
||||||
|
return None
|
||||||
|
return (float(fails) / float(successes + fails)) * 100
|
||||||
|
|
||||||
|
|
||||||
def add_test_run_attachments(attach_dict, test_run_id, session=None):
|
def add_test_run_attachments(attach_dict, test_run_id, session=None):
|
||||||
"""Add attachments a specific test run.
|
"""Add attachments a specific test run.
|
||||||
|
|
||||||
|
@ -627,3 +627,14 @@ class TestDatabaseAPI(base.TestCase):
|
|||||||
self.assertIn(time_c.date(), [x.date() for x in result.keys()])
|
self.assertIn(time_c.date(), [x.date() for x in result.keys()])
|
||||||
self.assertIn(time_a.date(), [x.date() for x in result.keys()])
|
self.assertIn(time_a.date(), [x.date() for x in result.keys()])
|
||||||
self.assertEqual(len(result[time_a]['a_value']), 2)
|
self.assertEqual(len(result[time_a]['a_value']), 2)
|
||||||
|
|
||||||
|
def test_get_run_failure_rate_by_key_value_metadata(self):
|
||||||
|
run_a = api.create_run(fails=100, passes=0)
|
||||||
|
run_b = api.create_run()
|
||||||
|
run_c = api.create_run(passes=100, fails=0)
|
||||||
|
api.add_run_metadata({'a_key': 'a_value'}, run_a.id)
|
||||||
|
api.add_run_metadata({'a_key': 'a_value'}, run_c.id)
|
||||||
|
api.add_run_metadata({'a_key': 'b_value'}, run_b.id)
|
||||||
|
fail_rate = api.get_run_failure_rate_by_key_value_metadata(
|
||||||
|
'a_key', 'a_value')
|
||||||
|
self.assertEqual(50, fail_rate)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user