correlateJobs()

in src/JobCorrelationHeatmap.js [20:69]


  correlateJobs(all_jobs) {
    let passes = ["success", "skipped", "pending", "queued"];
    const seen_names = {};
    const correlationMatrix = {};

    const addFailure = (failure1, failure2) => {
      seen_names[failure1] = true;
      seen_names[failure2] = true;
      if (!correlationMatrix[failure1]) {
        correlationMatrix[failure1] = [];
      }
      if (!correlationMatrix[failure1][failure2]) {
        correlationMatrix[failure1][failure2] = 0;
      }
      correlationMatrix[failure1][failure2] += 1;
    };

    for (const jobs of all_jobs) {
      let failures = [];
      for (const job_name in jobs.value) {
        const job = jobs.value[job_name];
        if (job.status && passes.indexOf(job.status) === -1) {
          failures.push(job_name);
        }
      }

      for (const failure1 of failures) {
        for (const failure2 of failures) {
          addFailure(failure1, failure2);
        }
      }
    }

    const job_names = Object.keys(seen_names).sort();

    const fullMatrix = [];
    for (const name1 of job_names) {
      const row = [];
      for (const name2 of job_names) {
        if (correlationMatrix[name1] && correlationMatrix[name1][name2]) {
          row.push(correlationMatrix[name1][name2]);
        } else {
          row.push(0);
        }
      }
      fullMatrix.push(row);
    }

    return [job_names, fullMatrix];
  }