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.
@@ -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
- #begin
322
- #f = File.open(file_path)
323
- #docs = YAML::load_stream(f)
324
- docs = full_parse(file_path)
325
- parse_data = []
326
- for idx in [0, 1, 2]
327
- if idx == 0 && !docs[idx].nil?
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
- #ensure
339
- # f.close() if !f.nil?
340
- #end
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
 
@@ -133,7 +133,7 @@ table.dataTable tr.even td.sorting_3 { background-color: #E9F9FF; }
133
133
  #task-tooltip {
134
134
  position: absolute ! important;
135
135
  opacity: 0.94;
136
- z-index: 10;
136
+ z-index: 100;
137
137
  font-family: sans-serif;
138
138
  font-size: 16px;
139
139
  }
@@ -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
- var target_height = ($target.attr("height") / 2);
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
- this.$task_tooltip.css("top", event.layerY - target_height - doc_height)
66
- .css("left", event.layerX - x_adjust);
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 svg_class = $target.attr("class");
87
- if (svg_class != "actorsSwimlaneChartTaskRect" &&
88
- svg_class != "tasksGanttChartTaskRect" &&
89
- svg_class != "tasksBarChartTaskRect" &&
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">' + data[0][data_key] + '</td>';
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] + '</td>';
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: 60
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" onClick="pmux_logview.index.open_detail(\'' + sorted_jobs[i]["job_id"] + '\')">';
128
- job_id_html += ' <span class="icon-space">' + sorted_jobs[i].job_id + '</span>';
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({
@@ -1,5 +1,5 @@
1
1
  module Pmux
2
2
  module LogView
3
- VERSION = "0.2.2"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
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=${USER-root}
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}
@@ -5,7 +5,7 @@
5
5
  %define ruby_verid %{_ruby_verid}
6
6
  %endif
7
7
  %define rbname pmux-logview
8
- %define version 0.2.2
8
+ %define version 0.3.0
9
9
  %define release 1
10
10
 
11
11
  Summary: Pmux log viewer
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
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-03-15 00:00:00 +09:00
18
+ date: 2013-05-28 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency