pmux_logview.index = { parent: pmux_logview, job_log_sort_keys: [ "job_id", "mapper", "start_time", "end_time", "elapsed_time" ], job_log_sort_key: "start_time", job_log_sort_order: "desc", job_log_nitems: 20, job_log_page: 0, job_log_jobs: {}, job_log_jobs_cookie: 0, reload_job_log_type: "archive", reload_job_log_initialized: false, reload_dispatcher_log_initialized: false, job_log_ajax_requested: false, dispatcher_log_ajax_requested: false, need_reload_job_log: true, need_reload_dispatcher_log: false, reload_job_log_timer_id: null, reload_dispatcher_log_timer_id: null, draw_invoke_timer_id: null, tab_active_index: 0, selected_job_id: null, $main_tab: null, $job_log_table: null, $dispatcher_log_table: null, $more_button: null, $job_chart_tchart: null, max_mapper_length: 35 }; pmux_logview.index.draw_job_chart = function() { // convert tchart format var source = { settings: { drawActorsSwimlaneChart: false, width: $(window).innerWidth() - 80, tasksGanttChart : { label: "jobs gantt chart" }, tasksBarChart : { label: "jobs bar chart" } }, actors : null, tasks : {} }; var job_count = 0; for (job_id in this.job_log_jobs) { var from = Number(this.job_log_jobs[job_id].start_time_msec); var to; if ("end_time_msec" in this.job_log_jobs[job_id]) { to = Number(this.job_log_jobs[job_id].end_time_msec); } else { continue; } source.tasks[job_id] = { name: "id " + job_id, from: from, to: to, clickEventArg: this.job_log_jobs[job_id], nextTasks: null } job_count += 1; } if (job_count != 0) { this.$job_chart_tchart.tchart('update', source); } } pmux_logview.index.open_detail = function(job_id) { window.open("detail?job_id=" + job_id, "_blank"); }; pmux_logview.index.update_progress_bar = function() { $(".progress-bar").each(function() { var $target = $(this); var data_value = $target.attr("data-value"); $target.progressbar({value: Number(data_value)}); }); }; pmux_logview.index.reload_job_log = function(force) { if (!this.parent.can_reload) { return; } if (!force && this.job_log_ajax_requested) { return; } var self = this; var param = { sort_key: this.job_log_sort_key, sort_order: this.job_log_sort_order, type: this.reload_job_log_type, nitems: this.job_log_nitems, page: this.job_log_page, jobs_cookie: this.job_log_jobs_cookie }; this.parent.ajax_base("log/job", "GET", param).done(function(data, textStatus, XMLHttpRequest) { if (!("jobs_cookie" in data && "jobs" in data)) { self.$job_log_table.fnClearTable(); self.$job_log_table.fnAddData(["invalid response", "", "", "", ""]); self.parent.activityOff(function(){ self.$main_tab.tabs("option", "disabled", false) }); return; } $.extend(true, self.job_log_jobs, data.jobs); self.job_log_jobs_cookie = data.jobs_cookie; self.$job_log_table.fnClearTable(); var sorted_jobs = []; for (var job_id in self.job_log_jobs) { if (self.$job_log_table.fnSettings().aaSorting.length == 0) { var inserted = false; for (var i = 0; i < sorted_jobs.length; i++) { if (Number(self.job_log_jobs[job_id]["start_time_msec"]) > Number(sorted_jobs[i]["start_time_msec"])) { sorted_jobs.splice(i, 0, self.job_log_jobs[job_id]); inserted = true; break; } } if (!inserted) { sorted_jobs.push(self.job_log_jobs[job_id]); } } else { sorted_jobs.push(self.job_log_jobs[job_id]); } } var body_array = []; for (i = 0; i < sorted_jobs.length; i++) { var row_array = [] var job_id_html = ''; job_id_html += ''; if ("error_status" in sorted_jobs[i]) { job_id_html += ''; } row_array.push(job_id_html) if (sorted_jobs[i].mapper && sorted_jobs[i].mapper.length > self.max_mapper_length) { row_array.push(''+ self.parent.html_escape(sorted_jobs[i].mapper.substring(0, self.max_mapper_length)) + '...'); } else { row_array.push(''+ self.parent.html_escape(sorted_jobs[i].mapper) + ''); } row_array.push('' + sorted_jobs[i].start_time + ''); if (sorted_jobs[i].end_time.match(/^\d+%$/)) { var percent = sorted_jobs[i].end_time.replace("%",""); row_array.push('
'); } else { row_array.push('' + sorted_jobs[i].end_time + ''); } row_array.push(sorted_jobs[i].elapsed_time); body_array.push(row_array); } self.$job_log_table.fnAddData(body_array); self.update_progress_bar(); self.parent.activityOff(function(){ self.$main_tab.tabs("option", "disabled", false) }); self.valid_last_job_id = true; self.reload_job_log_type = "update"; self.job_log_ajax_requested = false; }).fail(function(XMLHttpRequest, textStatus, errorThrown) { self.parent.open_dialog("job log の読み込みに失敗しました。"); self.parent.activityOff(function(){ self.$main_tab.tabs("option", "disabled", false) }); self.job_log_ajax_requested = false; }); self.job_log_ajax_requested = true; }; pmux_logview.index.reload_dispatcher_log = function() { if (!this.parent.can_reload) { return; } if (this.dispatcher_log_ajax_requested) { return; } var self = this; this.parent.ajax_base("log/dispatcher", "GET", {}).done(function(data, textStatus, XMLHttpRequest) { self.$dispatcher_log_table.fnClearTable(); var body_array = []; for (var i = data.length - 1; i >= 0; i--) { body_array.push([data[i]]); } self.$dispatcher_log_table.fnAddData(body_array); self.parent.activityOff(function(){ self.$main_tab.tabs("option", "disabled", false) }); self.dispatcher_log_ajax_requested = false; }).fail(function(XMLHttpRequest, textStatus, errorThrown) { self.parent.open_dialog("dispatcher log の読み込みに失敗しました。"); self.parent.activityOff(function(){ self.$main_tab.tabs("option", "disabled", false) }); self.dispatcher_log_ajax_requested = false; }); this.dispatcher_log_ajax_requested = true; }; pmux_logview.index.reload = function() { var self = this; if (this.need_reload_job_log) { if (this.reload_job_log_timer_id == null) { this.reload_job_log_timer_id = setInterval(function(){ self.reload_job_log(false); }, 3000); } if (!this.reload_job_log_initialized) { this.parent.activityOn(function(){ self.$main_tab.tabs("option", "disabled", true) }); this.reload_job_log_type = "archive"; this.reload_job_log(true); this.reload_job_log_initialized = true; } } else { if (this.reload_job_log_timer_id != null) { clearInterval(this.reload_job_log_timer_id); this.reload_job_log_timer_id = null; } } if (this.need_reload_dispatcher_log) { if (this.reload_dispatcher_log_timer_id == null) { this.reload_dispatcher_log_timer_id = setInterval(function(){ self.reload_dispatcher_log(); }, 3000); } if (!this.reload_dispatcher_log_initialized) { this.parent.activityOn(function(){ self.$main_tab.tabs("option", "disabled", true) }); this.reload_dispatcher_log(); this.reload_dispatcher_log_initialized = true; } } else { if (this.reload_dispatcher_log_timer_id != null) { clearInterval(this.reload_dispatcher_log_timer_id); this.reload_dispatcher_log_timer_id = null; } } }; pmux_logview.index.draw_invoke = function() { if (this.tab_active_index == 2) { this.draw_job_chart(); } if (this.draw_invoke_timer_id != null) { clearInterval(this.draw_invoke_timer_id); this.draw_invoke_timer_id = null; } } pmux_logview.index.initialize = function() { var self = this; this.parent.initialize(); this.$main_tab = $("#main-tabs").tabs({ active: this.tab_active_index, activate: function(event, ui) { self.tab_active_index = self.$main_tab.tabs("option", "active"); if (self.tab_active_index == 0) { self.need_reload_job_log = true; self.need_reload_dispatcher_log = false; } else if (self.tab_active_index == 1) { self.need_reload_job_log = false; self.need_reload_dispatcher_log = true; } else if (self.tab_active_index == 2) { self.draw_job_chart(); } self.reload(); } }); this.$job_log_table = $("#job-log-table").dataTable({ aaSorting: [], bPaginate: false, bScrollCollapse: true, bSort: true, bFilter: true, bJQueryUI: true, bAutoWidth: true, sPaginationType: "full_numbers", fnRowCallback: function(nRow) { if (nRow.cells[0]) nRow.cells[0].noWrap = true; if (nRow.cells[1]) nRow.cells[1].noWrap = true; return nRow }, fnDrawCallback: function() { self.update_progress_bar(); var $this = (this) if ($this.fnSettings().aaSorting.length != 0) { var sort_key = self.job_log_sort_keys[$this.fnSettings().aaSorting[0][0]]; var sort_order = $this.fnSettings().aaSorting[0][1]; if (self.job_log_sort_key != sort_key || self.job_log_sort_order != sort_order) { self.job_log_sort_key = sort_key; self.job_log_sort_order = sort_order; self.job_log_page = 0; self.reload_job_log_type = "archive"; self.reload_job_log(true); } } self.$error_button = $(".error-button").click(function(event) { var html = ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += '
status:' + $(event.currentTarget).attr("data-error-status") +'
message:' + $(event.currentTarget).attr("data-error-message") +'
'; self.parent.open_tooltip(html, event.target, event); }); self.$detail_button = $(".detail-button").click(function(event) { self.open_detail($(event.currentTarget).attr("data-job-id")); }); } }); this.$dispatcher_log_table = $("#dispatcher-log-table").dataTable({ aaSorting: [], bPaginate: false, bScrollCollapse: true, bSort: false, bFilter: true, bJQueryUI: true, bAutoWidth: true }); this.$more_button = $("#more-button").click(function() { self.job_log_page += 1; self.reload_job_log_type = "archive"; self.parent.activityOn(function(){ self.$main_tab.tabs("option", "disabled", true) }); self.reload_job_log(true); }); this.$job_chart_tchart = $("#job-chart-tchart").tchart({ onTaskClick: function(task, target, event) { var html = ''; html += ''; for (key in task) { html += ''; if (key == "job_id") { html += ''; } else { html += ''; } } html += '
' + key +'
' + task[key] +'
'; self.parent.open_tooltip(html, target, event); } }); $(window).resize(function() { if (self.draw_invoke_timer_id == null) { self.draw_invoke_timer_id = setInterval(function() { self.draw_invoke() }, 1000); } }); this.reload(); }; $(document).ready(function(){ pmux_logview.index.initialize(); });