|
'use strict';
|
|
|
|
function uuid() {
|
|
return (Math.random()*1e15).toString(32) + "-" + (Math.random()*1e15).toString(32);
|
|
}
|
|
|
|
/**
|
|
* This is a local assignment, this keeps track on how long an assignment takes THIS worker.
|
|
*
|
|
* @param id
|
|
* @param type
|
|
* @param timeStart
|
|
* @constructor
|
|
*/
|
|
function Job(id, type, timeStart, agentId, prerequisites) {
|
|
this.id = id;
|
|
this.type = type;
|
|
this.agentId = agentId;
|
|
|
|
this.timeStart = timeStart;
|
|
this.timeResumed = timeStart;
|
|
this.timePaused = 0;
|
|
this.elapsedTime = 0;
|
|
this.elapsedTimeWithPause = 0;
|
|
this.endOfDayPause = false;
|
|
|
|
this.paused = false;
|
|
this.finished = false;
|
|
|
|
this.duration = new DurationData();
|
|
this.prediction = new DurationStats();
|
|
this.startupTime = new DurationData();
|
|
this.predictedStartupTime = new DurationStats();
|
|
|
|
this.prerequisites = prerequisites;
|
|
}
|
|
|
|
Job.prototype.prerequisiteFinished = function(params) {
|
|
var uuid = params.uuid;
|
|
for (var i = 0; i < this.prerequisites.length; i++) {
|
|
var prereq = this.prerequisites[i];
|
|
if (prereq.uuid == uuid) {
|
|
prereq.times.setData(params.duration);
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
Job.prototype.watchingPrerequisite = function(preliminaryStats, uuid) {
|
|
for (var i = 0; i < this.prerequisites.length; i++) {
|
|
var prereq = this.prerequisites[i];
|
|
if (prereq.uuid == uuid) {
|
|
prereq.stats.setData(preliminaryStats);
|
|
this.predictedStartupTime.useHighest(preliminaryStats);
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
Job.prototype.finalizePrerequisites = function() {
|
|
for (var i = 0; i < this.prerequisites.length; i++) {
|
|
this.startupTime.useHighest(this.prerequisites[i].times);
|
|
}
|
|
};
|
|
|
|
Job.prototype.finish = function(time) {
|
|
this.finished = true;
|
|
this.elapsedTime += new Date(time).getTime() - new Date(this.timeResumed).getTime();
|
|
this.elapsedTimeWithPause += new Date(time).getTime() - new Date(this.timeResumed).getTime();
|
|
this.finalizePrerequisites();
|
|
|
|
this.duration.calculateDuration(time, this.timeStart, this.elapsedTime, this.elapsedTimeWithPause, this.startupTime);
|
|
};
|
|
|
|
Job.prototype.pause = function(time, endOfDay) {
|
|
// if this is the endOfDay AND the job is paused, count the pause time and set the endOfDay pause to true
|
|
if (endOfDay == true && this.paused == true) {
|
|
this.elapsedTimeWithPause += new Date(time).getTime() - new Date(this.timePaused).getTime();
|
|
this.endOfDayPause = true;
|
|
}
|
|
// if this is the endOfDay AND the job is NOT paused, pause the job, increment the timers
|
|
else if (endOfDay == true && this.paused == false) {
|
|
this.elapsedTimeWithPause += new Date(time).getTime() - new Date(this.timeResumed).getTime();
|
|
this.elapsedTime += new Date(time).getTime() - new Date(this.timeResumed).getTime();
|
|
this.endOfDayPause = true;
|
|
}
|
|
else if (this.paused == false) {
|
|
this.elapsedTimeWithPause += new Date(time).getTime() - new Date(this.timeResumed).getTime();
|
|
this.elapsedTime += new Date(time).getTime() - new Date(this.timeResumed).getTime();
|
|
this.timePaused = time;
|
|
this.paused = true;
|
|
}
|
|
};
|
|
|
|
Job.prototype.resume = function(time, startOfDay) {
|
|
// if the job was paused because of the endOfDay, resume it and set the timeResumed to now
|
|
if (this.endOfDayPause == true && startOfDay == true && this.paused == false) {
|
|
this.timeResumed = time;
|
|
this.endOfDayPause = false;
|
|
}
|
|
// if the job was paused before the endOfDay, keep it paused, but set the paused time to now.
|
|
else if (this.endOfDayPause == true && startOfDay == true && this.paused == true) {
|
|
this.timePaused = time;
|
|
this.endOfDayPause = false;
|
|
}
|
|
// if this is NOT the start of day and the job was paused, resume job, increment
|
|
else if (startOfDay == false && this.paused == true) {
|
|
this.elapsedTimeWithPause += new Date(time).getTime() - new Date(this.timePaused).getTime();
|
|
this.timeResumed = time;
|
|
this.paused = false;
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|