diff --git a/test/ufuzz/actions.js b/test/ufuzz/actions.js index fa4431a7..a5cd0eb2 100644 --- a/test/ufuzz/actions.js +++ b/test/ufuzz/actions.js @@ -4,6 +4,29 @@ var get = require("https").get; var parse = require("url").parse; var base = process.argv[2]; var token = process.argv[3]; +var queued = 0, total = 0, earliest, now = Date.now(); +process.on("beforeExit", function() { + if (queued > 3) { + process.stdout.write("0"); + } else { + var average = total > 2 && (now - earliest) / (total - 1); + process.stdout.write(Math.min(Math.max(20 * average, 2700000), 18000000).toFixed(0)); + } +}); +read(base + "/actions/workflows/ufuzz.yml/runs?event=schedule", function(reply) { + check(reply, "workflow_runs").filter(function(workflow) { + return /^(in_progress|queued|)$/.test(workflow.status); + }).forEach(function(workflow) { + read(workflow.jobs_url, function(reply) { + check(reply, "jobs").forEach(function(job) { + if (job.status == "queued") queued++; + total++; + var start = Date.parse(job.started_at); + if (!(earliest < start)) earliest = start; + }); + }); + }); +}); function read(url, callback) { var options = parse(url); @@ -22,28 +45,6 @@ function read(url, callback) { }); } -var queued = 0, total = 0, earliest, now = Date.now(); -process.on("beforeExit", function() { - if (queued > 3) { - process.stdout.write("0"); - } else if (now - earliest > 0 && total > 1) { - process.stdout.write(Math.min(20 * (now - earliest) / (total - 1), 18000000).toFixed(0)); - } else { - process.stdout.write("3600000"); - } -}); -read(base + "/actions/workflows/ufuzz.yml/runs?event=schedule", function(reply) { - reply.workflow_runs.filter(function(workflow) { - return /^(in_progress|queued|)$/.test(workflow.status); - }).forEach(function(workflow) { - read(workflow.jobs_url, function(reply) { - reply.jobs.forEach(function(job) { - if (job.status == "queued") queued++; - total++; - if (!job.started_at) return; - var start = new Date(job.started_at); - if (!(earliest < start)) earliest = start; - }); - }); - }); -}); +function check(reply, field) { + return reply && Array.isArray(reply[field]) ? reply[field] : []; +}