pmux-logview 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|