github.com/munnerz/test-infra@v0.0.0-20190108210205-ce3d181dc989/metrics/configs/pr-consistency-config.yaml (about) 1 metric: pr-consistency 2 description: Calculate PR flakiness for each day. 3 query: | 4 select /* Calculate the prob a commit flaked on at least one PR job at some point. + prob that a `/test all` command flakes. */ 5 timestamp_to_sec(day) day, 6 round(sum(consistent)/count(consistent),4) commit_consistency, 7 sum(consistent) consistent_commits, 8 count(consistent) commits, 9 round(sum(consistent_runs)/sum(runs), 4) run_consistency, /* should be approx. the nth root of consistency if there are n PR jobs and assumptions hold (job flake independence over the same commit). */ 10 sum(consistent_runs) consistent_runs, 11 sum(runs) runs, 12 sum(builds) builds 13 from ( /* For each day, count whether a (commit) flaked */ 14 select 15 day, 16 commit, 17 min(if(passed == runs or passed == 0, 1, 0)) consistent, 18 max(runs) builds, 19 sum(runs) runs, 20 sum(if(passed==0, runs, passed)) consistent_runs 21 from ( 22 select /* For each day, count runs and passes for a (job, commit) */ 23 cast(day as timestamp) day, 24 commit, 25 sum(if(result=='SUCCESS',1,0)) passed, 26 INTEGER(count(result)) runs 27 from ( 28 SELECT /* Find jobs, noting its commit, day it ran, and whether it passed */ 29 job, 30 regexp_extract(metadata.value, r'^[^,]+,\d+:([^,"]+)') commit, /* git hash of pr */ 31 result, 32 cast(date(started) as date) day 33 FROM [k8s-gubernator:build.all] 34 where 35 /* Select results that have occurred on or after the day of <LAST_DATA_TIME> (those results were 36 for the day before), but don't include results from today, only return results for complete days. */ 37 cast(date(started) as date) >= cast(date(sec_to_timestamp(<LAST_DATA_TIME>)) as date) 38 and cast(date(started) as date) < cast(current_date() as date) /* Drop results from partial day */ 39 and metadata.key = 'repos' 40 and length(regexp_replace(replace(metadata.value, ", ", ""), r'[^,]+', '')) = 1 41 and job in ( /* only consider merge-blocking jobs */ 42 'pr:pull-kubernetes-bazel-build', 43 'pr:pull-kubernetes-bazel-test', 44 'pr:pull-kubernetes-e2e-gce', 45 'pr:pull-kubernetes-e2e-gce-100-performance', 46 'pr:pull-kubernetes-e2e-kops-aws', 47 'pr:pull-kubernetes-integration', 48 'pr:pull-kubernetes-kubemark-e2e-gce-big', 49 'pr:pull-kubernetes-node-e2e', 50 'pr:pull-kubernetes-typecheck', 51 'pr:pull-kubernetes-verify', 52 ) 53 ) 54 group by day, job, commit 55 ) 56 group by day, commit 57 ) 58 group by day 59 order by day 60 61 jqfilter: | 62 ([(.[] | .day|tonumber)] | max) as $newestday | 63 [(.[] | select((.day|tonumber)==$newestday) | { 64 day: .day, 65 commit_consistency: (.commit_consistency|tonumber), 66 commits: (.commits|tonumber), 67 consistent_commits: (.consistent_commits|tonumber), 68 run_consistency: (.run_consistency|tonumber), 69 runs: (.runs|tonumber), 70 consistent_runs: (.consistent_runs|tonumber), 71 builds: (.builds|tonumber) 72 })] 73 74 measurements: 75 backfill: pr_consistency 76 jq: | 77 [(.[] | { 78 measurement: "pr_consistency", 79 time: (.day|tonumber), 80 tags: { 81 day: (.day|tonumber) 82 }, 83 fields: { 84 commit_consistency: (.commit_consistency|tonumber), 85 commits: (.commits|tonumber), 86 consistent_commits: (.consistent_commits|tonumber), 87 run_consistency: (.run_consistency|tonumber), 88 runs: (.runs|tonumber), 89 consistent_runs: (.consistent_runs|tonumber), 90 builds: (.builds|tonumber) 91 } 92 })]