pmux-logview 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/pmux-logview/log_parser.rb +23 -20
- data/lib/pmux-logview/static/css/pmux-logview.css +1 -1
- data/lib/pmux-logview/static/js/pmux-logview-base.js +23 -8
- data/lib/pmux-logview/static/js/pmux-logview-detail.js +3 -3
- data/lib/pmux-logview/static/js/pmux-logview-index.js +33 -5
- data/lib/pmux-logview/version.rb +1 -1
- data/rpm/pmux-logview +1 -1
- data/rpm/pmux-logview.spec +1 -1
- metadata +4 -4
|
@@ -28,6 +28,8 @@ module Pmux
|
|
|
28
28
|
@@task_welapse_re = Regexp.new("^ welapse:")
|
|
29
29
|
@@task_elapse_re = Regexp.new("^ elapse:")
|
|
30
30
|
@@job_finished_at_re = Regexp.new("^:job_finished_at:")
|
|
31
|
+
@@error_status_re = Regexp.new("^:error_status:")
|
|
32
|
+
@@error_message_re = Regexp.new("^:error_message:")
|
|
31
33
|
@@quote_re = Regexp.new("^['\"]|['\"]$")
|
|
32
34
|
|
|
33
35
|
@logger = nil
|
|
@@ -58,7 +60,7 @@ module Pmux
|
|
|
58
60
|
start_time = DateTime::parse(value.strip())
|
|
59
61
|
job["start_time_msec"] = start_time.strftime("%Q")
|
|
60
62
|
job["start_time"] = start_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
61
|
-
elsif doc_cnt == 1 && @@map_tasks_re =~ ln
|
|
63
|
+
elsif doc_cnt == 1 && (@@map_tasks_re =~ ln || @@reduce_tasks_re =~ ln)
|
|
62
64
|
empty, key, value = ln.split(":", 3)
|
|
63
65
|
job[key] = value.strip().to_i()
|
|
64
66
|
elsif doc_cnt == 1 && @@mapper_re =~ ln
|
|
@@ -72,6 +74,13 @@ module Pmux
|
|
|
72
74
|
job["end_time_msec"] = end_time.strftime("%Q")
|
|
73
75
|
job["end_time"] = end_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
74
76
|
cachable = true
|
|
77
|
+
elsif doc_cnt == 3 && @@error_status_re =~ ln
|
|
78
|
+
empty, key, value = ln.split(":", 3)
|
|
79
|
+
job[key] = value.strip()
|
|
80
|
+
cachable = true
|
|
81
|
+
elsif doc_cnt == 3 && @@error_message_re =~ ln
|
|
82
|
+
empty, key, value = ln.split(":", 3)
|
|
83
|
+
job[key] = value.strip().gsub(@@quote_re, "")
|
|
75
84
|
end
|
|
76
85
|
}
|
|
77
86
|
}
|
|
@@ -318,26 +327,20 @@ module Pmux
|
|
|
318
327
|
return nil
|
|
319
328
|
end
|
|
320
329
|
end
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
docs[idx]["job_started_at_msec"] = docs[idx]["job_started_at"].strftime("%Q") if !docs[idx]["job_started_at"].nil?
|
|
329
|
-
elsif idx == 2 && !docs[idx].nil?
|
|
330
|
-
docs[idx]["job_finished_at_msec"] = docs[idx]["job_finished_at"].strftime("%Q") if !docs[idx]["job_finished_at"].nil?
|
|
331
|
-
end
|
|
332
|
-
if docs[idx].nil?
|
|
333
|
-
parse_data.push({})
|
|
334
|
-
else
|
|
335
|
-
parse_data.push(docs[idx])
|
|
336
|
-
end
|
|
330
|
+
docs = full_parse(file_path)
|
|
331
|
+
parse_data = []
|
|
332
|
+
for idx in [0, 1, 2]
|
|
333
|
+
if idx == 0 && !docs[idx].nil?
|
|
334
|
+
docs[idx]["job_started_at_msec"] = docs[idx]["job_started_at"].strftime("%Q") if !docs[idx]["job_started_at"].nil?
|
|
335
|
+
elsif idx == 2 && !docs[idx].nil?
|
|
336
|
+
docs[idx]["job_finished_at_msec"] = docs[idx]["job_finished_at"].strftime("%Q") if !docs[idx]["job_finished_at"].nil?
|
|
337
337
|
end
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
338
|
+
if docs[idx].nil?
|
|
339
|
+
parse_data.push({})
|
|
340
|
+
else
|
|
341
|
+
parse_data.push(docs[idx])
|
|
342
|
+
end
|
|
343
|
+
end
|
|
341
344
|
return parse_data
|
|
342
345
|
end
|
|
343
346
|
|
|
@@ -19,6 +19,11 @@ pmux_logview.ajax_base = function(url, method, param) {
|
|
|
19
19
|
});
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
+
pmux_logview.html_escape = function(text) {
|
|
23
|
+
var dummy = document.createElement('div');
|
|
24
|
+
return $(dummy).text(text).html().replace(/"/g, """)
|
|
25
|
+
};
|
|
26
|
+
|
|
22
27
|
pmux_logview.get_user_name = function() {
|
|
23
28
|
return this.$user_name.text();
|
|
24
29
|
};
|
|
@@ -53,7 +58,11 @@ pmux_logview.update_reload_button = function() {
|
|
|
53
58
|
|
|
54
59
|
pmux_logview.open_tooltip = function(html, target, event) {
|
|
55
60
|
var $target = $(target);
|
|
56
|
-
|
|
61
|
+
base_height = $target.attr("height");
|
|
62
|
+
if (base_height == undefined) {
|
|
63
|
+
base_height = 0;
|
|
64
|
+
}
|
|
65
|
+
var target_height = (base_height);
|
|
57
66
|
this.$task_tooltip.html(html).show();
|
|
58
67
|
var doc_height = this.$task_tooltip.outerHeight();
|
|
59
68
|
var doc_width = this.$task_tooltip.outerWidth();
|
|
@@ -62,8 +71,13 @@ pmux_logview.open_tooltip = function(html, target, event) {
|
|
|
62
71
|
if (event.pageX + doc_width > window_width) {
|
|
63
72
|
x_adjust = event.pageX + doc_width - window_width + 4;
|
|
64
73
|
}
|
|
65
|
-
|
|
66
|
-
|
|
74
|
+
var base_x = event.layerX;
|
|
75
|
+
var base_y = event.layerY;
|
|
76
|
+
if (base_x == undefined) {
|
|
77
|
+
base_x = event.pageX;
|
|
78
|
+
base_y = event.pageY - 100; // offset
|
|
79
|
+
}
|
|
80
|
+
this.$task_tooltip.css("top", base_y - target_height - doc_height).css("left", base_x - x_adjust);
|
|
67
81
|
};
|
|
68
82
|
|
|
69
83
|
pmux_logview.open_dialog = function(html) {
|
|
@@ -83,11 +97,12 @@ pmux_logview.initialize = function() {
|
|
|
83
97
|
});
|
|
84
98
|
$("body").click(function(e) {
|
|
85
99
|
var $target = $(e.target);
|
|
86
|
-
var
|
|
87
|
-
if (
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
!$target.hasClass("task-tooltip")
|
|
100
|
+
var target_class = $target.attr("class");
|
|
101
|
+
if (target_class != "actorsSwimlaneChartTaskRect" &&
|
|
102
|
+
target_class != "tasksGanttChartTaskRect" &&
|
|
103
|
+
target_class != "tasksBarChartTaskRect" &&
|
|
104
|
+
!$target.hasClass("task-tooltip") &&
|
|
105
|
+
!$target.hasClass("error-info")) {
|
|
91
106
|
self.$task_tooltip.hide();
|
|
92
107
|
}
|
|
93
108
|
});
|
|
@@ -34,14 +34,14 @@ pmux_logview.detail.draw_detail_job_chat = function() {
|
|
|
34
34
|
var params_html = "";
|
|
35
35
|
for (params_key in data[0][data_key]) {
|
|
36
36
|
params_html += '<td class="border">' + params_key + '</td>';
|
|
37
|
-
params_html += '<td class="border">' + data[0][data_key][params_key] + '</td>';
|
|
37
|
+
params_html += '<td class="border">' + this.parent.html_escape(data[0][data_key][params_key]) + '</td>';
|
|
38
38
|
params_html += '</tr><tr>'
|
|
39
39
|
cnt += 1;
|
|
40
40
|
}
|
|
41
41
|
table_html += '<td class="border" rowspan="' + cnt + '">' + data_key + '</td>' + params_html;
|
|
42
42
|
} else {
|
|
43
43
|
table_html += '<td class="border" colspan="2">' + data_key + '</td>';
|
|
44
|
-
table_html += '<td class="border">' +
|
|
44
|
+
table_html += '<td class="border">' + this.parent.html_escape(data[0][data_key]) + '</td>';
|
|
45
45
|
table_html += '</tr><tr>';
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -52,7 +52,7 @@ pmux_logview.detail.draw_detail_job_chat = function() {
|
|
|
52
52
|
}
|
|
53
53
|
for (data_key in data[2]) {
|
|
54
54
|
table_html += '<td class="border" colspan="2">' + data_key + '</td>';
|
|
55
|
-
table_html += '<td class="border">' + data[2][data_key]
|
|
55
|
+
table_html += '<td class="border">' + this.parent.html_escape(data[2][data_key]) + '</td>';
|
|
56
56
|
table_html += '</tr><tr>';
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -24,7 +24,7 @@ pmux_logview.index = {
|
|
|
24
24
|
$dispatcher_log_table: null,
|
|
25
25
|
$more_button: null,
|
|
26
26
|
$job_chart_tchart: null,
|
|
27
|
-
max_mapper_length:
|
|
27
|
+
max_mapper_length: 35
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
pmux_logview.index.draw_job_chart = function() {
|
|
@@ -124,15 +124,24 @@ pmux_logview.index.reload_job_log = function(force) {
|
|
|
124
124
|
for (i = 0; i < sorted_jobs.length; i++) {
|
|
125
125
|
var row_array = []
|
|
126
126
|
var job_id_html = '';
|
|
127
|
-
job_id_html += '<button class="container button-color button-normalize ui-corner-all"
|
|
128
|
-
|
|
127
|
+
job_id_html += '<button class="detail-button container button-color button-normalize ui-corner-all" data-job-id="' + sorted_jobs[i]["job_id"] + '">';
|
|
128
|
+
if ("error_status" in sorted_jobs[i]) {
|
|
129
|
+
job_id_html += ' <span class="icon-space"><font color="red">' + sorted_jobs[i].job_id + '</font></span>';
|
|
130
|
+
} else {
|
|
131
|
+
job_id_html += ' <span class="icon-space">' + sorted_jobs[i].job_id + '</span>';
|
|
132
|
+
}
|
|
129
133
|
job_id_html += ' </span><span class="button-icon-adjust ui-icon ui-icon-info"></span>';
|
|
130
134
|
job_id_html += '</button>';
|
|
135
|
+
if ("error_status" in sorted_jobs[i]) {
|
|
136
|
+
job_id_html += '<button class="error-button error-info button-color button-normalize ui-corner-all" data-error-status="' + sorted_jobs[i].error_status + '" data-error-message="' + self.parent.html_escape(sorted_jobs[i].error_message) + '">';
|
|
137
|
+
job_id_html += '<div class="error-info ui-state-error"><span class="error-info ui-icon ui-icon-alert"></span></div>';
|
|
138
|
+
job_id_html += '</button>';
|
|
139
|
+
}
|
|
131
140
|
row_array.push(job_id_html)
|
|
132
141
|
if (sorted_jobs[i].mapper.length > self.max_mapper_length) {
|
|
133
|
-
row_array.push('<span class="text-ellipsis">'+ sorted_jobs[i].mapper.substring(0, self.max_mapper_length) + '...</span>');
|
|
142
|
+
row_array.push('<span class="text-ellipsis">'+ self.parent.html_escape(sorted_jobs[i].mapper.substring(0, self.max_mapper_length)) + '...</span>');
|
|
134
143
|
} else {
|
|
135
|
-
row_array.push('<span class="text-ellipsis">'+ sorted_jobs[i].mapper + '</span>');
|
|
144
|
+
row_array.push('<span class="text-ellipsis">'+ self.parent.html_escape(sorted_jobs[i].mapper) + '</span>');
|
|
136
145
|
}
|
|
137
146
|
row_array.push('<span class="cell-nowrap">' + sorted_jobs[i].start_time + '</span>');
|
|
138
147
|
if (sorted_jobs[i].end_time.match(/^\d+%$/)) {
|
|
@@ -260,6 +269,11 @@ pmux_logview.index.initialize = function() {
|
|
|
260
269
|
bJQueryUI: true,
|
|
261
270
|
bAutoWidth: true,
|
|
262
271
|
sPaginationType: "full_numbers",
|
|
272
|
+
fnRowCallback: function(nRow) {
|
|
273
|
+
if (nRow.cells[0]) nRow.cells[0].noWrap = true;
|
|
274
|
+
if (nRow.cells[1]) nRow.cells[1].noWrap = true;
|
|
275
|
+
return nRow
|
|
276
|
+
},
|
|
263
277
|
fnDrawCallback: function() {
|
|
264
278
|
self.update_progress_bar();
|
|
265
279
|
var $this = (this)
|
|
@@ -274,6 +288,20 @@ pmux_logview.index.initialize = function() {
|
|
|
274
288
|
self.reload_job_log(true);
|
|
275
289
|
}
|
|
276
290
|
}
|
|
291
|
+
self.$error_button = $(".error-button").click(function(event) {
|
|
292
|
+
var html = '<table class="border task-tooltip"><thead class="task-tooltip"></thead>';
|
|
293
|
+
html += '<tbody class="task-tooltip"><tr class="task-tooltip">';
|
|
294
|
+
html += '<td class="task-tooltip">status</td>';
|
|
295
|
+
html += '<td class="task-tooltip">' + $(event.currentTarget).attr("data-error-status") +'</td>';
|
|
296
|
+
html += '</tr><tr class="task-tooltip">';
|
|
297
|
+
html += '<td class="task-tooltip">status</td>';
|
|
298
|
+
html += '<td class="task-tooltip">' + $(event.currentTarget).attr("data-error-message") +'</td>';
|
|
299
|
+
html += '</tr></tbody></table>';
|
|
300
|
+
self.parent.open_tooltip(html, event.target, event);
|
|
301
|
+
});
|
|
302
|
+
self.$detail_button = $(".detail-button").click(function(event) {
|
|
303
|
+
self.open_detail($(event.currentTarget).attr("data-job-id"));
|
|
304
|
+
});
|
|
277
305
|
}
|
|
278
306
|
});
|
|
279
307
|
this.$dispatcher_log_table = $("#dispatcher-log-table").dataTable({
|
data/lib/pmux-logview/version.rb
CHANGED
data/rpm/pmux-logview
CHANGED
|
@@ -27,7 +27,7 @@ fi
|
|
|
27
27
|
prog=pmux-logview
|
|
28
28
|
exec=${PMUX_LOGVIEW-/usr/local/bin/pmux-logview}
|
|
29
29
|
config=${CONFIG-/etc/pmux-logview/pmux-logview.conf}
|
|
30
|
-
user=${
|
|
30
|
+
user=${PMUX_LOGVIEW_USER-root}
|
|
31
31
|
pidfile=${PIDFILE-/var/run/pmux-logview.pid}
|
|
32
32
|
lockfile=${LOCKFILE-/var/lock/subsys/pmux-logview}
|
|
33
33
|
[ -e /etc/sysconfig/${prog} ] && . /etc/sysconfig/${prog}
|
data/rpm/pmux-logview.spec
CHANGED
metadata
CHANGED
|
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
|
5
5
|
prerelease: false
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
version: 0.
|
|
8
|
+
- 3
|
|
9
|
+
- 0
|
|
10
|
+
version: 0.3.0
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- hiroyuki kakine
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2013-
|
|
18
|
+
date: 2013-05-28 00:00:00 +09:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|