diff options
Diffstat (limited to 'netrender/js/netrender.js')
-rw-r--r-- | netrender/js/netrender.js | 520 |
1 files changed, 520 insertions, 0 deletions
diff --git a/netrender/js/netrender.js b/netrender/js/netrender.js new file mode 100644 index 00000000..48336b49 --- /dev/null +++ b/netrender/js/netrender.js @@ -0,0 +1,520 @@ +/*# ##### BEGIN GPL LICENSE BLOCK ##### + # + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software Foundation, + # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + # + # ##### END GPL LICENSE BLOCK #####*/ + +var rulesTableHeader = ["type", "enabled", "descritpiton", "limit", "value"]; +var slaveTableHeaderWithJob = ["name", "last_seen", "stats", "address", "tags", "total_done", "total_error", "job"]; +var slaveTableHeader = ["name", "last_seen", "stats", "address"]; +var jobTableHeader = ["action", "id", "name", "category", "tags", "type", "chunks", "priority", "usage", "wait", "status", "length", "done", "dispatched", "error", "priority r", "exception r"]; +var framesTableHeader = ["no", "status", "render time", "slave", "log", "result"]; +var JOB_TYPES = ["None", "Blender", "Process", "Versioned"]; +var JOB_STATUS_TEXT = ["Waiting", "Paused", "Finished", "Queued"]; +var JOB_SUBTYPE = ["BLENDER", "CYCLE"]; +var FRAME_STATUS_TEXT = ["Queued", "Dispatched", "Done", "error"]; +var JOB_TYPE_NONE = 0; +var JOB_TYPE_BLENDER = 1; +var JOB_TYPE_PROCESS = 2; +var JOB_TYPE_VERSIONED = 3; +var maxFramesPerPage = 10; +var maxItemsperTable = 10; + +function setupPage() { + /*$.themes.init({themeBase: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/', icons: '/html/css/images/themes.gif',previews: '/html/css/images/themes-preview.gif'});*/ + + $('body').addClass("ui-widget-overlay"); + setupJobsPanel(); + setupSlavesPanel(); + setupConfigPanel(); + + var refreshSlaveData = window.setInterval(updateSlavesData, 5000); + var refreshJobsData = window.setInterval(updateJobsData, 5000); +} + +function setupJobsPanel() { + createPanelwidget("body", "jobs", "Jobs", ""); + updateJobsData(); + +} + +function updateJobsData() { + $.ajax({ + type : 'GET', + url : '/html/jobs', + dataType : 'json', + contentType : 'application/json', + success : function(jobs) { + changeJobsTable(jobs); + } + }); +} + +function changeJobsTable(jobs) { + + function celladd(name, row) { + + if(name == "category") { + if(row.category === "") { + return "None"; + } + } + + if(name == "tags") { + retstr = "[ "; + for(var i = 0; i < row.tags.length; i++) { + retstr = retstr + row.tags[i] + " "; + } + retstr = retstr + "]"; + return retstr; + } + + if(name == "usage") { + return Math.floor(row.usage * 100) + "%"; + } + + if(name == "type") { + return JOB_TYPES[row.type] + "[" + JOB_SUBTYPE[row.subtype] + "]"; + } + + if(name == "status") { + return JOB_STATUS_TEXT[row.status]; + } + if(name == "priority r") { + if(row.p_rule) { + return "yes"; + } else { + return "no"; + } + } + if(name == "exception r") { + if(row.e_rule) { + return "yes"; + } else { + return "no"; + } + } + if(name == "name") { + retstr = '<button title="Show Job Info" onclick="showJob(' + "'" + row.id + "'" + ',' + "'" + row.name + "'" + ");" + '"' + ">" + row.name + "</button>"; + return retstr; + } + + if(name == "action") { + + if(row.status != 2) { + disabled = ""; + } else { + disabled = "disabled"; + } + retstr = '<button ' + disabled + ' title="Pause Job" onclick="pause_job(' + row.id + ');">P</button>'; + + if(row.error > 0) { + disabled = ""; + + } else { + disabled = "disabled"; + } + retstr += '<button ' + disabled + ' title="Reset Frame" onclcik="reset_job_frames(' + row.id + ')">R</button><button title="Remove Job" onclick="cancel_job(' + row.id + ')">X</button>'; + return retstr; + } + if(name == "chunks") { + retstr = '<button title="increase chunks size" onclick="changeJobChunk(' + row.id + ',' + (row.chunks + 1) + ');">+</button>' + " " + row.chunks + " "; + if(row.chunks > 1) { + disabled = ''; + } else { + disabled = 'disabled'; + } + retstr += '<button ' + disabled + ' title="decrease chunks size" onclick="changeJobChunk(' + row.id + ',' + (row.chunks - 1) + ');">-</button>'; + return retstr; + } + if(name == "priority") { + retstr = '<button title="increase job priority" onclick="changeJobPriority(' + row.id + ',' + (row.priority + 1) + ');">+</button>' + " " + row.priority + " "; + if(row.priority > 1) { + disabled = ""; + } else { + disabled = 'disabled'; + } + retstr += '<button ' + disabled + ' title="decrease job priority" onclick="changeJobPriority(' + row.id + ',' + (row.priority - 1) + ');">-</button>'; + return retstr; + } + if(name == "wait") { + if(row.wait != "N/A") { + return secondsToHms(row.wait); + } + } + if(name == "error") { + if(row.error > 0) { + disabled = ""; + } else { + disabled = 'disabled'; + } + retstr = '<button ' + disabled + ' title="reset error frames" onclick="reset_error_frames(' + row.id + ');">R</button>' + ' ' + row.error; + return retstr; + } + + return row[name]; + } + + + $("#b_jobCancel").remove(); + createTable("#jobs_Panelcontent", "jobsTable", jobTableHeader, jobs, celladd); + $("#jobsTable button").button(); + + if(jobs.length) { + $("#jobs_Panelcontent").append('<button id="b_jobCancel" title="clear all jobs" onclick="clear_jobs();">Cancel all jobs</button>'); + $("#b_jobCancel").button(); + } + +} + +function setupSlavesPanel() { + createPanelwidget("body", "slaves", "Slaves", ""); + updateSlavesData(); + +} + + +$("#slavesTable button").button(); + +function updateSlavesData() { + $.ajax({ + type : 'GET', + url : '/html/slaves', + dataType : 'json', + contentType : 'application/json', + success : function(slaves) { + changeSlaveTable(slaves); + } + }); +} + +function changeSlaveTable(slaves) { + + createTable("#slaves_Panelcontent", "slavesTable", slaveTableHeaderWithJob, slaves, cellSlaveTable); + $("#slavesTable button").button(); + +} + +function setupConfigPanel() { + function confTab(name) { + if(name == "Rules") { + updateConfigData(); + return ""; + } + if(name == "Interface") { + $("#Interface").append('<a id="oldinterface" href="/">'); + $("#oldinterface").html('Simple Interface'); + $("#oldinterface").button(); + } + return ""; + } + + createPanelwidget("body", "configure", "Confgiguration", ""); + createTabswidget("#configure_Panelcontent", "conf", [{ + name : "Rules", + f_content : confTab + }, { + name : "Interface", + f_content : confTab + }]); + updateConfigData(); + /*$("#themeselector").themes({compact: false});*/ +} + +function updateConfigData() { + $.ajax({ + type : 'GET', + url : '/html/rules', + dataType : 'json', + contentType : 'application/json', + success : function(rules) { + changeConfigureTable(rules); + } + }); +} + +function changeConfigureTable(rules) { + var checked = { + "true" : "checked", + "false" : "" + }; + + function celladd(name, row) { + + if(name == "enabled") { + retstr = '<input type="checkbox" title="" ' + checked[row.enabled]; + retstr = retstr + ' onclick="balance_enable('; + retstr = retstr + "'" + row.id + "'," + "'" + (!row.enabled) + "')" + '" >'; + return retstr; + } + + if(name == "limit") { + return row.limit_str; + } + if(name == "value") { + if(row.editable) { + retstr = '<button title="edit limit" onclick="balance_edit(' + "'" + row.id + "'" + ',' + "'" + row.limit + "'" + ");" + '"' + ">edit</button>"; + return retstr; + } + return ""; + } + + if(name != "id") { + return row[name]; + } + } + + createTable("#Rules", "rulesTable", rulesTableHeader, rules, celladd); + $("#rulesTable button").button(); +} + +function showJob(id, name) { + + var job = {}; + + function general(tab_name) { + + var rendertime = 0; + $.each(job.frames, function(index, frame) { + rendertime += frame.time; + }); + var info = [new namevalue("resolution", job.resolution[0] + 'x' + job.resolution[1] + ' at ' + job.resolution[2] + '%'), new namevalue("tags", job.tags), new namevalue("result", getresult(id)), new namevalue("frames", job.frames.length), new namevalue("status", job.status), new namevalue("job name", job.name), new namevalue("type", job.type), new namevalue("render", job.subtype), new namevalue("render time:", secondsToHms(rendertime))]; + + function cellview(name, row) { + + if(name == "name") { + return '<b>' + row.name + ':</b>'; + } + if(name == "value") { + switch (row.name) { + case "tags": + retstr = "[ "; + for(var i = 0; i < row.value.length; i++) { + retstr = retstr + row.value[i] + " "; + } + retstr = retstr + "]"; + return retstr; + case "result": + return '<a title="load result" href="' + row.value + '">load</a>'; + case "status": + return JOB_STATUS_TEXT[job.status]; + case "type": + return JOB_TYPES[job.type]; + case "render": + return JOB_SUBTYPE[job.subtype]; + + default: + return row.value; + } + } + + } + + createTable("#" + tab_name, "generalTable", ["name", "value"], info, cellview, false); + return ""; + } + + function files(tab_name) { + + function fileJobCache() { + createFilesTable("#JobCache_Panelcontent", id, "cache"); + return ""; + } + + function fileJobFluid() { + createFilesTable("#JobFluid_Panelcontent", id, "fluid"); + return ""; + } + + function fileJobOther() { + createFilesTable("#JobOthers_Panelcontent", id, "other"); + return ""; + } + + function filePath(data) { + $("#JobPath_Panelcontent").html(data[0].filepath); + } + + function showFilesBlenderJob() { + + createPanelwidget("#" + tab_name, "JobPath", "Job Path", function() { + return ""; + }); + $.getJSON("/html/blendfile_" + id, null, filePath); + if(job.totcache) { + createPanelwidget("#" + tab_name, "JobCache", "Physic cache files", fileJobCache); + } + if(job.totfluid) { + createPanelwidget("#" + tab_name, "JobFluid", "Fluid cache Files", fileJobFluid); + } + if(job.totother) { + createPanelwidget("#" + tab_name, "JobOthers", "Other Files", fileJobOther); + } + + } + + function showFilesVersioned() { + function cellview(name, row) { + if(name == "name") { + return '<b>' + row.name + ':</b>'; + } + + if(name == "value") { + return row.value; + } + } + + var info = [new namevalue("system", job.version_info.system.name), new namevalue("Remote Path", job.version_info.rpath), new namevalue("Working Path", job.version_info.wpath), new namevalue("Revision", job.version_info.revision), new namevalue("Render File", job.files[0].filepath)]; + } + + switch(job.type) { + case JOB_TYPE_BLENDER: + showFilesBlenderJob(); + + break; + case JOB_TYPE_VERSIONED: + showFilesVersioned(); + break; + default: + return tab_name; + } + return ""; + } + + function frames(tab_name) { + + function frameCell(name, frame) { + if(name == "no") { + return frame.number; + } + if(name == "status") { + return FRAME_STATUS_TEXT[frame.status]; + } + if(frame.status) { + if(name == "render time") { + return Math.floor(frame.time) + "s"; + } + if(name == "slave") { + if(frame.slave) { + return frame.slave.name; + } else { + return "none"; + } + } + if(name == "log") { + return '<a href="/log_' + id + '_' + frame.number + '.log" target="_blank">view log</a>'; + } + if(frame.status > 1) { + if(name == "result") { + return '<a href="/render_' + id + '_' + frame.number + '.exr" target="_blank">view result</a>'; + } + } + + } + return "N/A"; + } + + createPagedTable("#" + tab_name, "framesTable", framesTableHeader, job.frames, frameCell, 10, "next frames page", "previous frames page"); + return ""; + } + + function thumbs(tab_name) { + + function img_src(img_num) { + return '/thumb_' + id + '_' + job.frames[img_num].number + '.jpg'; + } + + function img_info(img_num) { + return "<b>Job:</b>" + job.name + ' <b>frame:</b>' + job.frames[img_num].number; + } + + createImgViewer("#" + tab_name, img_src, job.frames.length, img_info); + + } + + function slaves(tab_name) { + + function createBlackList(data) { + function blacklist() { + if(data.length === 0) { + return "None"; + } + createPagedTable("#BlackList_Panelcontent", "blacklistTable", slaveTableHeader, data, cellSlaveTable, maxItemsperTable, "next slaves page", "previous slaves page"); + return ""; + } + + createPanelwidget('#' + tab_name, "BlackList", "Black Listed slaves", blacklist); + } + + function createSlaveList(data) { + function slavelist() { + if(data.length === 0) { + return "None"; + } + createPagedTable("#SlavesList_Panelcontent", "slaveslistTable", slaveTableHeader, data, cellSlaveTable, maxItemsperTable, "next slaves page", "previous slaves page"); + return ""; + } + + createPanelwidget('#' + tab_name, "SlavesList", "Currently assigned slaves", slavelist); + } + + + $.getJSON("/html/blacklist_" + id, null, createBlackList); + $.getJSON("/html/slavesjob_" + id, null, createSlaveList); + + return ""; + } + + function onCancel(dlg) { + $(dlg).dialog("close"); + $(dlg).remove(); + } + + function jobDialog(dlg) { + $("#showjobs").remove(); + var tab_descript = [{ + name : "General", + f_content : general + }, { + name : "Files", + f_content : files + }, { + name : "Frames", + f_content : frames + }, { + name : "Thumbs", + f_content : thumbs + }, { + name : "slaves", + f_content : slaves + + }]; + + createTabswidget(dlg, "showjobs", tab_descript); + + return ""; + } + + function retJobData(data) { + job = data[0]; + $("#JobInfo" + id).remove(); + DialogWidget('body', 'JobInfo' + id, "Job Information", "", "Go Back", null, onCancel, jobDialog, true, 700, 800); + $("#General a").button(); + } + + + $.getJSON("/html/job_" + id, null, retJobData); + +}
\ No newline at end of file |