)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"74421f548d759af95953e1199dbbe5c5b4a425d9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add DB API method to get failure rate for jobs by run_metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds a new DB API method to return the failure rate as a"},{"line_number":10,"context_line":"percentage for all runs with a provided key value run_metadata pair."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I4d611d8606f89a66e09c9aaf01c2dfd7b29b2265"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5a5ae5dd_99c0662c","line":10,"updated":"2016-02-04 05:25:36.000000000","message":"So, I feel \u0027a percentage\u0027 is a little bit overkill. I think it\u0027s enough just returning a rate(\u003dpercentage/100).","commit_id":"44a85e00127279d6d33284e766c0be057c1965b1"}],"subunit2sql/db/api.py":[{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"8ac843dbbd4947b98577951a1813dfbe4fea4e37","unresolved":false,"context_lines":[{"line_number":1331,"context_line":"    base_query \u003d _filter_runs_by_date(base_query, start_date, stop_date)"},{"line_number":1332,"context_line":"    fails \u003d base_query.filter(models.Run.fails \u003e\u003d 1).count()"},{"line_number":1333,"context_line":"    successes \u003d base_query.filter(models.Run.passes \u003e 0,"},{"line_number":1334,"context_line":"                                  models.Run.fails \u003d\u003d 0).count()"},{"line_number":1335,"context_line":"    if fails \u003d\u003d 0 and successes \u003d\u003d 0:"},{"line_number":1336,"context_line":"        return None"},{"line_number":1337,"context_line":"    return (float(fails) / float(successes + fails)) * 100"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_98d18d5a","line":1334,"updated":"2016-02-16 14:48:09.000000000","message":"For more accuracy, I think you want to do these in a transaction or turn it into a UNION, so the world doesn\u0027t change underneath you between queries. Default isolation level is fine.","commit_id":"754f9cb5b8383361dcfe38d924b5f27e5d620a60"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"65598df8c98a5ee6e7fcb715723bae39c4f459da","unresolved":false,"context_lines":[{"line_number":1331,"context_line":"    base_query \u003d _filter_runs_by_date(base_query, start_date, stop_date)"},{"line_number":1332,"context_line":"    fails \u003d base_query.filter(models.Run.fails \u003e\u003d 1).count()"},{"line_number":1333,"context_line":"    successes \u003d base_query.filter(models.Run.passes \u003e 0,"},{"line_number":1334,"context_line":"                                  models.Run.fails \u003d\u003d 0).count()"},{"line_number":1335,"context_line":"    if fails \u003d\u003d 0 and successes \u003d\u003d 0:"},{"line_number":1336,"context_line":"        return None"},{"line_number":1337,"context_line":"    return (float(fails) / float(successes + fails)) * 100"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_e73d3f90","line":1334,"updated":"2016-02-17 21:08:35.000000000","message":"I agree that\u0027s a good idea, that\u0027s probably a good follow-on change","commit_id":"754f9cb5b8383361dcfe38d924b5f27e5d620a60"}]}
