function computeConsecutiveFailureCount()

in src/GitHubStatusDisplay.js [50:87]


function computeConsecutiveFailureCount(data, failure_window = 10) {
  const still_unknown_set = new Set();
  const consecutive_failure_count = new Map();
  data.known_jobs.forEach((job) => {
    if (job === "pytorch_doc_push") return;
    if (job === "__dr.ci") return;
    if (job.includes("nightlies")) return;
    still_unknown_set.add(job);
  });
  for (let i = 0; i < data.builds.length; i++) {
    // After some window, don't look anymore; the job may have been
    // removed
    if (i > failure_window) break;
    if (!still_unknown_set.size) break;
    const build = data.builds[i];
    const sb_map = build.sb_map;
    sb_map.forEach((sb, jobName) => {
      if (!still_unknown_set.has(jobName)) {
        // do nothing
      } else if (is_failure(sb.status)) {
        let count = consecutive_failure_count.get(jobName) || 0;
        count++;
        consecutive_failure_count.set(jobName, count);
      } else if (is_success(sb.status)) {
        still_unknown_set.delete(jobName);
      }
    });
  }

  // Prune uninteresting alarms
  consecutive_failure_count.forEach((v, k) => {
    // Require two consecutive failure to alert
    if (v <= 1) {
      consecutive_failure_count.delete(k);
    }
  });
  return consecutive_failure_count;
}