pmux-logview 0.3.4 → 0.3.10
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/LICENSE.txt +1 -1
- data/{conf → config/pmux-logview}/config.ru +2 -1
- data/{conf → config/pmux-logview}/password +0 -0
- data/{conf → config/pmux-logview}/pmux-logview.conf +4 -3
- data/lib/pmux-logview/application.rb +9 -0
- data/lib/pmux-logview/controller.rb +9 -5
- data/lib/pmux-logview/log_parser.rb +121 -175
- data/lib/pmux-logview/model.rb +2 -2
- data/lib/pmux-logview/static/css/jquery-ui-timepicker-addon.css +11 -0
- data/lib/pmux-logview/static/css/pmux-logview.css +8 -0
- data/lib/pmux-logview/static/js/jquery-ui-timepicker-addon.js +2134 -0
- data/lib/pmux-logview/static/js/jquery.activity-indicator-1.0.0.min.js +1 -1
- data/lib/pmux-logview/static/js/pmux-logview-index.js +240 -62
- data/lib/pmux-logview/static/js/tchart.js +2 -2
- data/lib/pmux-logview/version.rb +1 -1
- data/lib/pmux-logview/views/index.erb +44 -4
- data/pmux-logview.gemspec +1 -2
- data/rpm/RPMS/noarch/rubygem200-pmux-logview-0.3.10-1.noarch.rpm +0 -0
- data/rpm/SOURCES/pmux-logview +111 -0
- data/rpm/SOURCES/pmux-logview-0.3.10.gem +0 -0
- data/rpm/SRPMS/rubygem200-pmux-logview-0.3.10-1.src.rpm +0 -0
- data/rpm/pmux-logview.spec +1 -2
- metadata +128 -154
data/LICENSE.txt
CHANGED
@@ -11,5 +11,6 @@ Pmux::LogView::Controller.setup({ "default_user" => "pmux",
|
|
11
11
|
"log_dir_path" => "/var/log/pmux-logview",
|
12
12
|
"log_level" => "info",
|
13
13
|
"use_syslog" => true,
|
14
|
-
"syslog_facility" => "user"
|
14
|
+
"syslog_facility" => "user",
|
15
|
+
"cache_expire_time" => 86400 })
|
15
16
|
run Pmux::LogView::Controller
|
File without changes
|
@@ -2,11 +2,12 @@
|
|
2
2
|
host: 0.0.0.0
|
3
3
|
port: 28080
|
4
4
|
pidfile: /var/run/pmux-logview.pid
|
5
|
-
default_user:
|
6
|
-
use_basic_auth:
|
5
|
+
default_user: admin
|
6
|
+
use_basic_auth: false
|
7
7
|
password_file_path: /etc/pmux-logview/password
|
8
8
|
cache_dir_path: /var/tmp/pmux-logview
|
9
9
|
log_dir_path: /var/log/pmux-logview
|
10
10
|
log_level: info
|
11
|
-
use_syslog:
|
11
|
+
use_syslog: false
|
12
12
|
syslog_facility: user
|
13
|
+
cache_expire_time: 86400
|
@@ -51,6 +51,10 @@ module Pmux
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def run
|
54
|
+
|
55
|
+
#require 'ruby-prof'
|
56
|
+
#RubyProf.start
|
57
|
+
|
54
58
|
initialize()
|
55
59
|
parse_args()
|
56
60
|
daemonize()
|
@@ -62,6 +66,11 @@ module Pmux
|
|
62
66
|
@port = @config["port"] if @config["port"]
|
63
67
|
Controller.setup(@config)
|
64
68
|
Controller.run! :bind => @host, :host => @host, :port => @port
|
69
|
+
|
70
|
+
#result = RubyProf.stop
|
71
|
+
#printer = RubyProf::FlatPrinter.new(result)
|
72
|
+
#printer.print(STDOUT)
|
73
|
+
|
65
74
|
end
|
66
75
|
end
|
67
76
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
1
3
|
require 'sinatra'
|
2
4
|
require 'sinatra/base'
|
3
5
|
require 'json'
|
@@ -19,6 +21,7 @@ module Pmux
|
|
19
21
|
@@use_syslog = false
|
20
22
|
@@use_basic_auth = true
|
21
23
|
@@default_user = "pmux"
|
24
|
+
@@cache_expire_time = 86400
|
22
25
|
@@model = nil
|
23
26
|
@@logger = nil
|
24
27
|
@user = nil
|
@@ -48,13 +51,15 @@ module Pmux
|
|
48
51
|
@@syslog_facility = args[key]
|
49
52
|
when "default_user"
|
50
53
|
@@default_user = args[key]
|
54
|
+
when "cache_expire_time"
|
55
|
+
@@cache_expire_time = args[key]
|
51
56
|
end
|
52
57
|
}
|
53
58
|
log_file_path = File.expand_path([@@log_dir_path, @@log_filename].join(File::SEPARATOR))
|
54
59
|
@@logger.foreground(@@foreground)
|
55
60
|
@@logger.open(log_file_path, @@log_level, @@use_syslog, @@syslog_facility)
|
56
61
|
AuthHelper.update(@@password_file_path)
|
57
|
-
@@model = Model.new(@@cache_dir_path)
|
62
|
+
@@model = Model.new(@@cache_dir_path, @@cache_expire_time)
|
58
63
|
end
|
59
64
|
|
60
65
|
configure do
|
@@ -64,7 +69,7 @@ module Pmux
|
|
64
69
|
@@logger.open(log_file_path, @@log_level, @@use_syslog, @@syslog_facility)
|
65
70
|
use Rack::CommonLogger, @@logger
|
66
71
|
AuthHelper.init(@@password_file_path)
|
67
|
-
@@model = Model.new(@@cache_dir_path)
|
72
|
+
@@model = Model.new(@@cache_dir_path, @@cache_expire_time)
|
68
73
|
end
|
69
74
|
|
70
75
|
def logger
|
@@ -92,12 +97,11 @@ module Pmux
|
|
92
97
|
@@logger.info("access user #{@user}")
|
93
98
|
data = {}
|
94
99
|
validations = {
|
95
|
-
"sort_key" => { "default" => "start_time", "type" => String, "values" => [ "job_id", "mapper", "start_time", "end_time", "elapsed_time"] },
|
96
100
|
"sort_order" => { "default" => "desc", "type" => String, "values" => [ "asc", "desc" ] },
|
97
|
-
"type" => { "default" => "archive", "type" => String, "values" => [ "archive", "update" ] },
|
98
101
|
"nitems" => { "default" => 20, "type" => Integer, "values" => nil },
|
99
102
|
"page" => { "default" => 0, "type" => Integer, "values" => nil },
|
100
|
-
"
|
103
|
+
"start_time_msec" => { "default" => nil, "type" => Integer, "values" => nil },
|
104
|
+
"end_time_msec" => { "default" => nil, "type" => Integer, "values" => nil },
|
101
105
|
}
|
102
106
|
validations.each_key{|key|
|
103
107
|
if params.key?(key)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
1
3
|
require 'fileutils'
|
2
4
|
require 'date'
|
3
5
|
require 'yaml'
|
@@ -16,59 +18,77 @@ module Pmux
|
|
16
18
|
@@task_re = Regexp.new(" [a-z_]+:")
|
17
19
|
@@futter_re = Regexp.new("^:[a-z_]+:")
|
18
20
|
@@mapper_re = Regexp.new("^:mapper:")
|
19
|
-
@@
|
20
|
-
@@
|
21
|
-
@@invoked_at_re = Regexp.new("^:invoked_at:")
|
22
|
-
@@map_tasks_re = Regexp.new("^:map_tasks:")
|
21
|
+
@@start_at_re = Regexp.new("^(:job_started_at:)|(:start_time:)|(:invoked_at:)")
|
22
|
+
@@tasks_re = Regexp.new("^(:map_tasks:)|(:reduce_tasks:)")
|
23
23
|
@@tasksize_re = Regexp.new("^:tasksize:")
|
24
|
-
@@reduce_tasks_re = Regexp.new("^:reduce_tasks:")
|
25
24
|
@@params_re = Regexp.new("^:params:")
|
26
25
|
@@task_id_re = Regexp.new("^[0-9]+:")
|
27
|
-
@@
|
28
|
-
@@
|
29
|
-
@@task_elapse_re = Regexp.new("^ elapse:")
|
30
|
-
@@job_finished_at_re = Regexp.new("^:job_finished_at:")
|
26
|
+
@@elapse_re = Regexp.new("^( allocated_at:)|( welapse:)|( elapse:)")
|
27
|
+
@@finish_at_re = Regexp.new("^:job_finished_at:")
|
31
28
|
@@error_status_re = Regexp.new("^:error_status:")
|
32
29
|
@@error_message_re = Regexp.new("^:error_message:")
|
33
30
|
@@quote_re = Regexp.new("^['\"]|['\"]$")
|
34
31
|
|
35
32
|
@logger = nil
|
33
|
+
@cache_expire_time = 86400
|
36
34
|
|
37
|
-
def initialize
|
38
|
-
@
|
35
|
+
def initialize jobs_cache_dir_path, cache_expire
|
36
|
+
@jobs_cache_dir_path = jobs_cache_dir_path
|
37
|
+
@cache_expire_time = cache_expire
|
39
38
|
@logger = LoggerWrapper.instance()
|
40
39
|
end
|
41
40
|
|
42
|
-
def
|
43
|
-
return
|
41
|
+
def get_log_paths
|
42
|
+
return [@@pmux_log_path]
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_files user, log_path, data, now
|
46
|
+
stime = Time.at(0)
|
47
|
+
etime = now
|
48
|
+
need_slice = true
|
49
|
+
if !data["start_time_msec"].nil? || !data["end_time_msec"].nil?
|
50
|
+
need_slice = false
|
51
|
+
stime = Time.at(data["start_time_msec"] / 1000, (data["start_time_msec"] % 1000) * 1000) if !data["start_time_msec"].nil?
|
52
|
+
etime = Time.at(data["end_time_msec"] / 1000, (data["start_time_msec"] % 1000) * 1000) if !data["end_time_msec"].nil?
|
53
|
+
end
|
54
|
+
file_mtime_list = Dir.glob(File.expand_path(["~" + user, log_path, "*.yml"].join(File::SEPARATOR))).map{ |f| [f, File.mtime(f)] }
|
55
|
+
file_list = file_mtime_list.sort_by{ |fm| fm[1] }.reverse.map{ |fm| fm[0] if stime <= fm[1] && fm[1] <= etime }.compact
|
56
|
+
if need_slice
|
57
|
+
item_count = (data["page"] + 1) * data["nitems"]
|
58
|
+
file_list = file_list.slice(0, item_count)
|
59
|
+
end
|
60
|
+
return file_list
|
44
61
|
end
|
45
62
|
|
46
|
-
def fast_parse file, job_id
|
63
|
+
def fast_parse file, job_id, parsed_time
|
47
64
|
cachable = false
|
48
|
-
job = {"end_time" => nil, "elapsed_time" => nil, "finished_tasks" => 0}
|
49
|
-
job["job_id"] = job_id
|
65
|
+
job = {"end_time" => nil, "elapsed_time" => nil, "finished_tasks" => 0, "job_id" => job_id, "parsed_time" => parsed_time}
|
50
66
|
task_cnt = 0
|
51
67
|
start_time = nil
|
52
68
|
end_time = nil
|
53
|
-
|
54
|
-
|
55
|
-
|
69
|
+
doc1_buffer = ""
|
70
|
+
doc_cnt = 0
|
71
|
+
File.open(file) do |f|
|
72
|
+
f.each_line do |ln|
|
56
73
|
if @@document_re =~ ln
|
74
|
+
if doc_cnt == 1
|
75
|
+
new_doc = YAML.load(doc1_buffer)
|
76
|
+
job["mapper"] = new_doc[:mapper].encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8")
|
77
|
+
end
|
57
78
|
doc_cnt += 1
|
58
|
-
elsif doc_cnt == 1 &&
|
79
|
+
elsif doc_cnt == 1 && @@start_at_re =~ ln
|
59
80
|
empty, key, value = ln.split(":", 3)
|
60
81
|
start_time = DateTime::parse(value.strip())
|
61
82
|
job["start_time_msec"] = start_time.strftime("%Q")
|
62
83
|
job["start_time"] = start_time.strftime("%Y-%m-%d %H:%M:%S")
|
63
|
-
elsif doc_cnt == 1 &&
|
84
|
+
elsif doc_cnt == 1 && @@tasks_re =~ ln
|
64
85
|
empty, key, value = ln.split(":", 3)
|
65
86
|
job[key] = value.strip().to_i()
|
66
|
-
elsif doc_cnt == 1
|
67
|
-
|
68
|
-
job[key] = value.strip()
|
87
|
+
elsif doc_cnt == 1
|
88
|
+
doc1_buffer += ln
|
69
89
|
elsif doc_cnt == 2 && @@task_id_re =~ ln
|
70
90
|
task_cnt += 1
|
71
|
-
elsif doc_cnt == 3 && @@
|
91
|
+
elsif doc_cnt == 3 && @@finish_at_re =~ ln
|
72
92
|
empty, key, value = ln.split(":", 3)
|
73
93
|
end_time = DateTime::parse(value.strip())
|
74
94
|
job["end_time_msec"] = end_time.strftime("%Q")
|
@@ -80,10 +100,10 @@ module Pmux
|
|
80
100
|
cachable = true
|
81
101
|
elsif doc_cnt == 3 && @@error_message_re =~ ln
|
82
102
|
empty, key, value = ln.split(":", 3)
|
83
|
-
job[key] = value.strip().gsub(@@quote_re, "")
|
103
|
+
job[key] = value.strip().gsub(@@quote_re, "").encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8")
|
84
104
|
end
|
85
|
-
|
86
|
-
|
105
|
+
end
|
106
|
+
end
|
87
107
|
job["finished_tasks"] = task_cnt
|
88
108
|
job["elapsed_time"] = ((end_time - start_time) * 86400).to_f if !start_time.nil? && !end_time.nil?
|
89
109
|
if end_time.nil?
|
@@ -99,7 +119,7 @@ module Pmux
|
|
99
119
|
end
|
100
120
|
|
101
121
|
def load_cache file_path
|
102
|
-
cache = {}
|
122
|
+
cache = { "jobs" => {} }
|
103
123
|
return cache if !File.exist?(file_path)
|
104
124
|
begin
|
105
125
|
File.open(file_path, "rb") {|f|
|
@@ -114,180 +134,106 @@ module Pmux
|
|
114
134
|
end
|
115
135
|
end
|
116
136
|
|
117
|
-
def save_cache file_path,
|
118
|
-
|
119
|
-
for job_id in cachable_ids
|
120
|
-
cache[job_id] = jobs[job_id]
|
121
|
-
end
|
122
|
-
FileUtils.mkdir_p(@cache_dir_path) if !File.exist?(@cache_dir_path)
|
137
|
+
def save_cache file_path, cache
|
138
|
+
FileUtils.mkdir_p(@jobs_cache_dir_path) if !File.exist?(@jobs_cache_dir_path)
|
123
139
|
begin
|
124
|
-
File.open(file_path, File::RDWR|File::CREAT, 0644)
|
140
|
+
File.open(file_path, File::RDWR|File::CREAT, 0644) do |f|
|
125
141
|
f.flock(File::LOCK_EX)
|
126
142
|
f.rewind()
|
127
143
|
Marshal.dump(cache, f)
|
128
144
|
f.flush()
|
129
145
|
f.truncate(f.pos)
|
130
146
|
f.flock(File::LOCK_UN)
|
131
|
-
|
147
|
+
end
|
132
148
|
rescue
|
133
149
|
@logger.warn("cannot save cache file (#{file_path})")
|
134
150
|
end
|
135
151
|
end
|
136
|
-
|
137
|
-
def
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
if
|
142
|
-
|
143
|
-
|
144
|
-
if job["start_time_msec"].to_i > jobs[id]["start_time_msec"].to_i
|
145
|
-
insert_idx = idx
|
146
|
-
break
|
147
|
-
end
|
148
|
-
when "job_id"
|
149
|
-
if job["job_id"].to_i > jobs[id]["job_id"].to_i
|
150
|
-
insert_idx = idx
|
151
|
-
break
|
152
|
-
end
|
153
|
-
when "mapper"
|
154
|
-
if job["mapper"] > jobs[id]["mapper"]
|
155
|
-
insert_idx = idx
|
156
|
-
break
|
157
|
-
end
|
158
|
-
when "end_time"
|
159
|
-
if !job["error_status"].nil?
|
160
|
-
insert_idx = idx
|
161
|
-
elsif !jobs[id]["error_status"].nil?
|
162
|
-
next
|
163
|
-
elsif job["end_time_msec"].to_i > jobs[id]["end_time_msec"].to_i
|
164
|
-
insert_idx = idx
|
165
|
-
break
|
166
|
-
end
|
167
|
-
when "elapsed_time"
|
168
|
-
if !job["error_status"].nil?
|
169
|
-
insert_idx = idx
|
170
|
-
elsif !jobs[id]["error_status"].nil?
|
171
|
-
next
|
172
|
-
elsif job["elapsed_time"].to_i > jobs[id]["elapsed_time"].to_i
|
173
|
-
insert_idx = idx
|
174
|
-
break
|
175
|
-
end
|
176
|
-
end
|
177
|
-
elsif sort_order == "asc"
|
178
|
-
case sort_key
|
179
|
-
when "start_time"
|
180
|
-
if job["start_time_msec"].to_i < jobs[id]["start_time_msec"].to_i
|
181
|
-
insert_idx = idx
|
182
|
-
break
|
183
|
-
end
|
184
|
-
when "job_id"
|
185
|
-
if job["job_id"].to_i < jobs[id]["job_id"].to_i
|
186
|
-
insert_idx = idx
|
187
|
-
break
|
188
|
-
end
|
189
|
-
when "mapper"
|
190
|
-
if job["mapper"] < jobs[id]["mapper"]
|
191
|
-
insert_idx = idx
|
192
|
-
break
|
193
|
-
end
|
194
|
-
when "end_time"
|
195
|
-
if !job["error_status"].nil?
|
196
|
-
next
|
197
|
-
elsif !jobs[id]["error_status"].nil?
|
198
|
-
insert_idx = idx
|
199
|
-
elsif job["end_time_msec"].to_i < jobs[id]["end_time_msec"].to_i
|
200
|
-
insert_idx = idx
|
201
|
-
break
|
202
|
-
end
|
203
|
-
when "elapsed_time"
|
204
|
-
if !job["elapsed_time"].nil?
|
205
|
-
next
|
206
|
-
elsif !jobs[id]["elapsed_time"].nil?
|
207
|
-
insert_idx = idx
|
208
|
-
elsif job["elapsed_time"].to_i < jobs[id]["elapsed_time"].to_i
|
209
|
-
insert_idx = idx
|
210
|
-
break
|
211
|
-
end
|
212
|
-
end
|
152
|
+
|
153
|
+
def expire_cache cache, now
|
154
|
+
new_cache = { "jobs" => {} }
|
155
|
+
need_save_cache = false
|
156
|
+
cache["jobs"].each do |job_id, job|
|
157
|
+
if job["parsed_time"] + @cache_expire_time < now
|
158
|
+
need_save_cache = true
|
159
|
+
next
|
213
160
|
end
|
161
|
+
new_cache["jobs"][job_id] = cache["jobs"][job_id]
|
214
162
|
end
|
215
|
-
|
216
|
-
cache_ids.insert(insert_idx, job_id);
|
217
|
-
else
|
218
|
-
cache_ids.push(job_id)
|
219
|
-
end
|
163
|
+
return [new_cache, need_save_cache]
|
220
164
|
end
|
221
165
|
|
222
|
-
def
|
223
|
-
|
224
|
-
|
225
|
-
|
166
|
+
def pickup_job src, src_ids, data
|
167
|
+
parse_data = { "jobs" => {} }
|
168
|
+
src_ids = src_ids.sort_by{|id_start| id_start[1] }.map{|id_start| id_start[0]}
|
169
|
+
src_ids = src_ids.reverse if data["sort_order"] == "desc"
|
170
|
+
start_idx = 0;
|
171
|
+
if data["start_time_msec"].nil? && data["end_time_msec"].nil?
|
172
|
+
start_idx = data["page"] * data["nitems"]
|
173
|
+
return parse_data if start_idx >= src_ids.length
|
226
174
|
end
|
227
|
-
for idx in start_idx..
|
228
|
-
|
229
|
-
|
230
|
-
if nitems == 0
|
231
|
-
break
|
232
|
-
end
|
175
|
+
for idx in start_idx..src_ids.length - 1
|
176
|
+
job_id = src_ids[idx]
|
177
|
+
parse_data["jobs"][job_id] = src["jobs"][job_id]
|
233
178
|
end
|
179
|
+
return parse_data
|
234
180
|
end
|
235
181
|
|
236
182
|
def parse_log_job user, data
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
183
|
+
# data structure
|
184
|
+
# {
|
185
|
+
# "jobs" => {
|
186
|
+
# id1 => { <job> },
|
187
|
+
# .
|
188
|
+
# .
|
189
|
+
# },
|
190
|
+
# }
|
191
|
+
new = { "jobs" => {} }
|
192
|
+
ids = []
|
193
|
+
now = Time.now
|
194
|
+
jobs_cache_file_path = [@jobs_cache_dir_path, user].join(File::SEPARATOR)
|
195
|
+
cache = load_cache(jobs_cache_file_path)
|
196
|
+
new_cache, need_save_cache = expire_cache(cache, now.to_i)
|
197
|
+
files = get_files(user, get_log_paths, data, now)
|
198
|
+
files.each do |file|
|
199
|
+
job_id = File::basename(file).sub(".yml", "")
|
200
|
+
if new_cache["jobs"].key?(job_id)
|
201
|
+
new["jobs"][job_id] = new_cache["jobs"][job_id]
|
202
|
+
ids.push([job_id, new["jobs"][job_id]["start_time_msec"]])
|
203
|
+
else
|
204
|
+
job, cachable = fast_parse(file, job_id, now.to_i)
|
205
|
+
if cachable
|
206
|
+
new_cache["jobs"][job_id] = job
|
207
|
+
need_save_cache = true
|
261
208
|
end
|
209
|
+
new["jobs"][job_id] = job
|
210
|
+
ids.push([job_id, new["jobs"][job_id]["start_time_msec"]])
|
262
211
|
end
|
263
212
|
end
|
264
|
-
save_cache(
|
265
|
-
parse_data =
|
266
|
-
if data["type"] == "archive"
|
267
|
-
parse_data_cache_ids(parse_data["jobs"], jobs, new_cache_ids, data["nitems"], data["page"])
|
268
|
-
end
|
269
|
-
for job_id in update_ids
|
270
|
-
parse_data["jobs"][job_id] = jobs[job_id] if jobs.key?(job_id)
|
271
|
-
end
|
213
|
+
save_cache(jobs_cache_file_path, new_cache) if need_save_cache
|
214
|
+
parse_data = pickup_job(new, ids, data)
|
272
215
|
return parse_data
|
273
216
|
end
|
274
217
|
|
275
218
|
def full_parse file_path
|
276
219
|
documents = []
|
277
|
-
File.open(file_path)
|
220
|
+
File.open(file_path) do |f|
|
278
221
|
doc1_buffer = ""
|
279
222
|
doc1_param = {}
|
280
223
|
doc_cnt = 0
|
281
224
|
new_doc = nil
|
282
225
|
task_id = nil
|
283
|
-
f.each_line
|
226
|
+
f.each_line do |ln|
|
284
227
|
if @@document_re =~ ln
|
285
228
|
if doc_cnt == 1
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
229
|
+
new_doc = YAML.load(doc1_buffer)
|
230
|
+
new_doc[:job_started_at] = doc1_param["job_started_at"] if doc1_param["job_started_at"]
|
231
|
+
new_doc[:invoked_at] = doc1_param["invoked_at"] if doc1_param["invoked_at"]
|
232
|
+
new_doc[:start_time] = doc1_param["start_time"] if doc1_param["start_time"]
|
233
|
+
new_doc[:mapper] = new_doc[:mapper].to_s.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8") if new_doc[:mapper]
|
234
|
+
new_doc[:reducer] = new_doc[:reducer].to_s.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8") if new_doc[:reducer]
|
235
|
+
new_doc[:params][:mapper] = new_doc[:params][:mapper].to_s.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8") if new_doc.key?(:params) && new_doc[:params][:mapper]
|
236
|
+
new_doc[:params][:job_name] = new_doc[:params][:job_name].to_s.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8") if new_doc.key?(:params) && new_doc[:params][:job_name]
|
291
237
|
end
|
292
238
|
if !new_doc.nil?
|
293
239
|
new_doc.delete(task_id) if doc_cnt == 2 && !task_id.nil? && new_doc[task_id].length < 5
|
@@ -296,7 +242,7 @@ module Pmux
|
|
296
242
|
doc_cnt += 1
|
297
243
|
new_doc = {}
|
298
244
|
task_id = nil
|
299
|
-
elsif doc_cnt == 1 &&
|
245
|
+
elsif doc_cnt == 1 && @@start_at_re =~ ln
|
300
246
|
empty, key, value = ln.split(":", 3)
|
301
247
|
time = DateTime::parse(value.strip())
|
302
248
|
doc1_param[key] = time
|
@@ -305,13 +251,13 @@ module Pmux
|
|
305
251
|
elsif doc_cnt == 2 && @@task_id_re =~ ln
|
306
252
|
task_id, empty = ln.split(":", 2)
|
307
253
|
new_doc[task_id] = {}
|
308
|
-
elsif doc_cnt == 2 &&
|
254
|
+
elsif doc_cnt == 2 && @@elapse_re =~ ln
|
309
255
|
key, value = ln.split(":", 2)
|
310
256
|
new_doc[task_id][key.strip()] = value.strip().to_f()
|
311
257
|
elsif doc_cnt == 2 && @@task_re =~ ln
|
312
258
|
key, value = ln.split(":", 2)
|
313
259
|
new_doc[task_id][key.strip()] = value.strip().gsub(@@quote_re, "")
|
314
|
-
elsif doc_cnt == 3 && @@
|
260
|
+
elsif doc_cnt == 3 && @@finish_at_re =~ ln
|
315
261
|
empty, key, value = ln.split(":", 3)
|
316
262
|
time = DateTime::parse(value.strip())
|
317
263
|
new_doc[key] = time
|
@@ -319,7 +265,7 @@ module Pmux
|
|
319
265
|
empty, key, value = ln.split(":", 3)
|
320
266
|
new_doc[key] = value.strip().gsub(@@quote_re, "")
|
321
267
|
end
|
322
|
-
|
268
|
+
end
|
323
269
|
if !new_doc.nil?
|
324
270
|
new_doc.delete(task_id) if doc_cnt == 2 && new_doc[task_id].length < 5
|
325
271
|
documents.push(new_doc)
|
@@ -330,7 +276,7 @@ module Pmux
|
|
330
276
|
if documents.length == 2
|
331
277
|
documents.push(nil)
|
332
278
|
end
|
333
|
-
|
279
|
+
end
|
334
280
|
return documents
|
335
281
|
end
|
336
282
|
|
@@ -378,8 +324,8 @@ module Pmux
|
|
378
324
|
return parse_data
|
379
325
|
end
|
380
326
|
|
381
|
-
def
|
382
|
-
@
|
327
|
+
def set_jobs_cache_dir_path jobs_cache_dir_path
|
328
|
+
@jobs_cache_dir_path = jobs_cache_dir_path
|
383
329
|
end
|
384
330
|
end
|
385
331
|
end
|