UNPKG

node-deadline

Version:

Module to interface with Deadline Compute Management System by Thinkbox Software

220 lines (199 loc) 6.38 kB
var Err = require( "../utils/Error" ), FrameRange = require( "./FrameRange" ), PropertyMap = require( "../utils/PropertyMap" ), utils = require( "../utils/utils" ); var Job = module.exports = function( data, deadlineNetSet ) { this._data = {}; this._updated = {}; if ( "undefined" == typeof data ) { throw new Err( Err.PARAM, "You need job data or another Job instance to create a new job object.", "This should usually be handled by Deadline get functions." ); } else if ( data instanceof Job ) { this.copy( data ); return; } else { this._populate( data, deadlineNetSet ); } }; //populates with deadline server data Job.prototype._populate = function( data, deadlineNetSet ) { try { //convert necessary properties data.LastWriteTime = new Date( data.LastWriteTime ); data.Props.Frames = new FrameRange( data.Props.Frames ); data.Date = new Date( data.Date ); data.DateStart = new Date( data.DateStart ); data.DateComp = new Date( data.DateComp ); //map the object Job.propertyMap.mapObj( data, this ); //sum chunks this.chunks.total = ( this.chunks.completed + this.chunks.queued + this.chunks.suspended + this.chunks.rendering + this.chunks.failed + this.chunks.pending ); //convert custom extra info names if ( "undefined" != typeof deadlineNetSet ) { this.extraInfo[ utils.mapExtraJobProperty( "Ex0", deadlineNetSet ) ] = this.extraInfo.Ex0; this.extraInfo[ utils.mapExtraJobProperty( "Ex1", deadlineNetSet ) ] = this.extraInfo.Ex1; this.extraInfo[ utils.mapExtraJobProperty( "Ex2", deadlineNetSet ) ] = this.extraInfo.Ex2; this.extraInfo[ utils.mapExtraJobProperty( "Ex3", deadlineNetSet ) ] = this.extraInfo.Ex3; this.extraInfo[ utils.mapExtraJobProperty( "Ex4", deadlineNetSet ) ] = this.extraInfo.Ex4; this.extraInfo[ utils.mapExtraJobProperty( "Ex5", deadlineNetSet ) ] = this.extraInfo.Ex5; this.extraInfo[ utils.mapExtraJobProperty( "Ex6", deadlineNetSet ) ] = this.extraInfo.Ex6; this.extraInfo[ utils.mapExtraJobProperty( "Ex7", deadlineNetSet ) ] = this.extraInfo.Ex7; this.extraInfo[ utils.mapExtraJobProperty( "Ex8", deadlineNetSet ) ] = this.extraInfo.Ex8; this.extraInfo[ utils.mapExtraJobProperty( "Ex9", deadlineNetSet ) ] = this.extraInfo.Ex9; } } catch ( e ) { throw new Err( Err.PARAM, "Failed to populate job: " + e.message ); } this._data = data; }; Job.prototype._calcChanges = function() { var now, then, prop; for ( prop in Job.propertyMap.map ) { //get the new value and the original vale now = PropertyMap.readProp( this, prop ); then = PropertyMap.readProp( this._data, Job.propertyMap.map[ prop ] ); //if they're not different, move on if ( now == then ) { continue; } //make sure its a valid change if ( !Job.changeAllowed( prop ) ) { throw new Err( Err.PARAM, "Changes not allowed to property: " + prop ); } //log the change on our updates object this._updated[ Job.propertyMap.map[ prop ] ] = now; } return this._updated; }; //copies all properties from another Job instance Job.prototype.copy = function( src ) { throw new Err( Err.NOIMPL, "the copy feature hasn't been implemented yet... sorry" ); }; Job.changeAllowed = function( propertyName ) { switch ( propertyName ) { case "updated": case "name": case "user": case "batch": case "comment": case "commentTag": case "department": case "frames": case "group": case "pool": case "secondaryPool": case "priority": case "requiredAssets": case "scriptDependancies": case "concurrentTasks": case "limitConcurrent": case "auxSync": case "interruptable": case "interruptLimit": case "sequential": case "reload": case "suppressEvents": case "protected": case "timout": case "frameTimeout": case "limits": case "listedSlaves": case "listedWhite": case "ExtraInfo.Ex0": case "ExtraInfo.Ex1": case "ExtraInfo.Ex2": case "ExtraInfo.Ex3": case "ExtraInfo.Ex4": case "ExtraInfo.Ex5": case "ExtraInfo.Ex6": case "ExtraInfo.Ex7": case "ExtraInfo.Ex8": case "ExtraInfo.Ex9": case "ExtraInfo.ExDic": case "Plug": case "outputDirectories": case "outputFiles": case "badSlaves": return true; default: return false; } }; Job.propertyMap = new PropertyMap( { id: "_id", status: "Stat", updated: "LastWriteTime", name: "Props.Name", user: "Props.User", batch: "Props.Batch", comment: "Props.Cmmt", commentTag: "Props.CmmtTag", department: "Props.Dept", frames: "Props.Frames", tasks: "Props.Tasks", group: "Props.Grp", pool: "Props.Pool", secondaryPool: "Props.SecPool", priority: "Props.Pri", requiredAssets: "Props.ReqAss", scriptDependancies: "Props.ScrDept", concurrentTasks: "Props.Conc", limitConcurrent: "Props.ConcLimt", auxSync: "Props.AuxSync", interruptable: "Props.Int", interruptLimit: "Props.IntPer", sequential: "Props.Seq", reload: "Props.Reload", suppressEvents: "Props.NoEvt", protected: "Props.Protect", timeout: "Props.Timeout", frameTimeout: "Props.FrameTimoutWeather", limits: "Props.Limits", listedSlaves: "Props.ListedSlavesSlaves", listedWhite: "Props.White", "extraInfo.Ex0": "Props.Ex0", "extraInfo.Ex1": "Props.Ex1", "extraInfo.Ex2": "Props.Ex2", "extraInfo.Ex3": "Props.Ex3", "extraInfo.Ex4": "Props.Ex4", "extraInfo.Ex5": "Props.Ex5", "extraInfo.Ex6": "Props.Ex6", "extraInfo.Ex7": "Props.Ex7", "extraInfo.Ex8": "Props.Ex8", "extraInfo.Ex9": "Props.Ex9", "extraInfo.dic": "Props.ExDic", machine: "Mach", date: "Date", dateStarted: "DateStart", dateCompleted: "DateComp", plugin: "Plug", outputDirectories: "OutDir", outputFiles: "OutFile", badSlaves: "Bad", "chunks.completed": "CompletedChunks", "chunks.queued": "QueuedChunks", "chunks.suspended": "SuspendedChunks", "chunks.rendering": "RenderingChunks", "chunks.failed": "FailedChunks", "chunks.pending": "PendingChunks", errors: "Errs" } );