Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'netrender/js/netrender.js')
-rw-r--r--netrender/js/netrender.js520
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