From 4f8869668afdb188b7bfb8d44d5efca2f3fe1e11 Mon Sep 17 00:00:00 2001 From: Christoph Willing Date: Sun, 29 Oct 2017 11:38:37 +1000 Subject: [PATCH 1/3] Start better notification of why a job not started --- src/scripts/modules/gpioworker.js | 14 ++++++++++ src/scripts/status.js | 43 +++++++++++++++++++------------ 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/scripts/modules/gpioworker.js b/src/scripts/modules/gpioworker.js index ba99297..fd58550 100644 --- a/src/scripts/modules/gpioworker.js +++ b/src/scripts/modules/gpioworker.js @@ -805,6 +805,7 @@ gpioWorker.prototype.load_running_jobs = function (msg) { } //console.log("runningJobs history 2: " + JSON.stringify(job.history)); var job_info = {}; + job_info['waiting'] = false; job_info['header'] = job.jobInfo(); job_info['updates'] = job.history.slice(1); running_jobs.push(job_info); @@ -813,6 +814,19 @@ gpioWorker.prototype.load_running_jobs = function (msg) { } else { console.log("No jobs running"); } + if (this.waitingJobs.length > 0 ) { + console.log("Including waiting jobs in jobs list"); + this.waitingJobs.forEach( function (job) { + console.log("waitingJobs job: " + JSON.stringify(job.jobData)); + var job_info = {}; + job_info['waiting'] = true; + job_info['jobData'] = job.jobData; + /* + job_info['updates'] = job.history.slice(1); + */ + running_jobs.push(job_info); + }); + } var jdata = JSON.stringify({'type':'running_jobs','data':running_jobs}); console.log("load_running_jobs() returning: " + jdata); this.output_queue.enqueue(jdata); diff --git a/src/scripts/status.js b/src/scripts/status.js index ec8d657..0662149 100644 --- a/src/scripts/status.js +++ b/src/scripts/status.js @@ -1163,24 +1163,33 @@ window.onload = function () { var longJobNames = []; data.forEach( function (job, index) { - var header = job['header']; - var updates = job['updates']; - var longName = header['jobName'] + '-' + header['jobInstance']; - var saveData = {}; - - console.log("Creating listing for job: " + index + " (" + longName + ")"); - longJobNames.push(longName); - - // Save the data for later use. It should consist of two arrays, - // 1st with just the job header and 2nd with an array of status updates - // (for a running job, updates will periodically be added to - saveData['header'] = [header]; - saveData['updates'] = updates; - runningData[longName] = saveData; - //console.log("XXX " + JSON.stringify(runningData[longName])); + + console.log("createRunningJobsList() handling job: " + index); + if (job['waiting']) { + console.log("Job waiting: " + JSON.stringify(job)); + console.log("Job waiting: " + Object.keys(job)); + console.log(job['jobData'].jobName + "-" + job['jobData'].jobInstance + " is waiting."); + console.log(job['jobData'].jobName + "-" + job['jobData'].jobInstance + " is waiting. Needs " + JSON.stringify(job['jobData'].jobSensorIds)); + } else { + var header = job['header']; + var updates = job['updates']; + var longName = header['jobName'] + '-' + header['jobInstance']; + var saveData = {}; + + console.log("Creating listing for job: " + index + " (" + longName + ")"); + longJobNames.push(longName); + + // Save the data for later use. It should consist of two arrays, + // 1st with just the job header and 2nd with an array of status updates + // (for a running job, updates will periodically be added to + saveData['header'] = [header]; + saveData['updates'] = updates; + runningData[longName] = saveData; + //console.log("XXX " + JSON.stringify(runningData[longName])); + console.log("ZZZ"); + updateJobsList(longJobNames, 'running_jobsHolder'); + } }); - console.log("ZZZ"); - updateJobsList(longJobNames, 'running_jobsHolder'); } function updateRunningJob(data) { From 1a1a226576764aa8e5393f77996394ad12226b2b Mon Sep 17 00:00:00 2001 From: Christoph Willing Date: Sun, 29 Oct 2017 12:00:21 +1000 Subject: [PATCH 2/3] Ensure startup status has correct sensor format --- src/scripts/modules/jobprocessor.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/scripts/modules/jobprocessor.js b/src/scripts/modules/jobprocessor.js index eb90305..8af2339 100644 --- a/src/scripts/modules/jobprocessor.js +++ b/src/scripts/modules/jobprocessor.js @@ -157,7 +157,12 @@ function JobProcessor(options) { } } job_status['sensors'].push(sensor); - job_status[sensor] = jSensors[sensor].temp; + var sensorValue = {}; + sensorValue["temp"] = jSensors[sensor].temp; + if (jSensors[sensor].grav) { + sensorValue["grav"] = jSensors[sensor].grav; + } + job_status[sensor] = sensorValue; }); console.log("job_status: " + JSON.stringify(job_status)); //console.log("jobRelays: " + JSON.stringify(this.jobRelays)); From 6a33e6de7e2fb1970e0c0b32f783d28daa8ea746 Mon Sep 17 00:00:00 2001 From: Christoph Willing Date: Sun, 29 Oct 2017 21:18:32 +1000 Subject: [PATCH 3/3] Insert element for jobs not yet started due to unavailable sensor(s) --- src/scripts/modules/gpioworker.js | 2 +- src/scripts/status.js | 60 +++++++++++++++++++++++++------ styles/brewable.css | 35 ++++++++++++++++-- 3 files changed, 83 insertions(+), 14 deletions(-) diff --git a/src/scripts/modules/gpioworker.js b/src/scripts/modules/gpioworker.js index fd58550..988556c 100644 --- a/src/scripts/modules/gpioworker.js +++ b/src/scripts/modules/gpioworker.js @@ -828,7 +828,7 @@ gpioWorker.prototype.load_running_jobs = function (msg) { }); } var jdata = JSON.stringify({'type':'running_jobs','data':running_jobs}); - console.log("load_running_jobs() returning: " + jdata); + //console.log("load_running_jobs() returning: " + jdata); this.output_queue.enqueue(jdata); }; diff --git a/src/scripts/status.js b/src/scripts/status.js index 0662149..7fa5a63 100644 --- a/src/scripts/status.js +++ b/src/scripts/status.js @@ -40,6 +40,7 @@ var profileOwner; /* Save JobHistory data here */ var historyData = {}; var runningData = {}; +var unStartedJobs = []; /* Running, stopped, suspended etc. @@ -1163,20 +1164,31 @@ window.onload = function () { var longJobNames = []; data.forEach( function (job, index) { - console.log("createRunningJobsList() handling job: " + index); + + var longName; if (job['waiting']) { - console.log("Job waiting: " + JSON.stringify(job)); - console.log("Job waiting: " + Object.keys(job)); - console.log(job['jobData'].jobName + "-" + job['jobData'].jobInstance + " is waiting."); - console.log(job['jobData'].jobName + "-" + job['jobData'].jobInstance + " is waiting. Needs " + JSON.stringify(job['jobData'].jobSensorIds)); + longName = job['jobData'].jobName + "-" + job['jobData'].jobInstance; + + //console.log("Job waiting: " + JSON.stringify(job)); + //console.log("Job waiting: " + Object.keys(job)); + //console.log(job['jobData'].jobName + "-" + job['jobData'].jobInstance + " is waiting."); + //console.log(job['jobData'].jobName + "-" + job['jobData'].jobInstance + " is waiting. Needs " + JSON.stringify(job['jobData'].jobSensorIds)); + + // Add this job to unStartedJobs list + unStartedJobs[longName] = job; + } else { var header = job['header']; var updates = job['updates']; - var longName = header['jobName'] + '-' + header['jobInstance']; var saveData = {}; - console.log("Creating listing for job: " + index + " (" + longName + ")"); + longName = header['jobName'] + '-' + header['jobInstance']; + + // If previously unstarted, remove it from list + if (unStartedJobs[longName]) delete unStartedJobs[longName]; + + console.log("Creating listing for running job: " + index + " (" + longName + ")"); longJobNames.push(longName); // Save the data for later use. It should consist of two arrays, @@ -1185,10 +1197,9 @@ window.onload = function () { saveData['header'] = [header]; saveData['updates'] = updates; runningData[longName] = saveData; - //console.log("XXX " + JSON.stringify(runningData[longName])); - console.log("ZZZ"); - updateJobsList(longJobNames, 'running_jobsHolder'); } + //console.log("ZZZ"); + updateJobsList(longJobNames, 'running_jobsHolder'); }); } @@ -1975,6 +1986,35 @@ window.onload = function () { } }); + /* + Before drawing the running jobs, look for any non starters + (perhaps due to unavailability of a required sensor) + and set up a notification. + */ + var unStartedJobsKeys = Object.keys(unStartedJobs); + //console.log("unstarted job(s): " + unStartedJobsKeys); + + unStartedJobsKeys.forEach( function (key) { + //console.log("Advising of unstarted job: " + key + " --- " + JSON.stringify(unStartedJobs[key])); + + var sensorIds = unStartedJobs[key]['jobData'].jobSensorIds; + //console.log("Needs sensor" + (sensorIds.length>1?"s":"") + ": " + sensorIds); + + var jobElement = document.createElement('DIV'); + jobElement.id = 'jobElement_' + key; + jobElement.className = 'jobCantStart'; + + var jobItemName = document.createElement('DIV'); + jobItemName.id = 'jobItemName_' + i; + jobItemName.className = 'jobCantStartName'; + jobItemName.innerHTML = "Job " + key + " can't start yet. Needs sensor" + (sensorIds.length>1?"s":"") + ": " + sensorIds + ""; + + jobElement.appendChild(jobItemName); + jobsListHolder.appendChild(jobElement); + }); + + /* Now the jobs running normally + */ for (var i=0;i