logpos 1.0.1 → 1.0.2
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/README.txt +1 -1
- data/lib/logpos.rb +15 -13
- metadata +26 -11
data/README.txt
CHANGED
data/lib/logpos.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Logpos
|
2
|
-
VERSION = '1.0.
|
2
|
+
VERSION = '1.0.2'
|
3
3
|
|
4
4
|
begin; require 'chronic'; rescue LoadError; end
|
5
5
|
TIME_PARSER_CLASS = if defined? Chronic
|
@@ -15,21 +15,22 @@ class Logpos
|
|
15
15
|
@time_parser = proc {|line| line.match(/^Started/) && TIME_PARSER_CLASS.parse(line.split(/for [0-9\.]* at /)[-1]) }
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.seek_pos_before
|
19
|
-
Logpos.new.seek_pos_before
|
18
|
+
def self.seek_pos_before file_path, lastest_visited_at
|
19
|
+
Logpos.new.seek_pos_before file_path, lastest_visited_at
|
20
20
|
end
|
21
21
|
|
22
|
-
def seek_pos_before
|
22
|
+
def seek_pos_before file_path, lastest_visited_at
|
23
23
|
ta = TripleArray.new lastest_visited_at
|
24
24
|
|
25
|
-
|
26
|
-
|
25
|
+
@file ||= File.open(file_path)
|
26
|
+
@file.reopen(file_path)
|
27
|
+
pos_start, pos_end = 0, File.size(@file)
|
27
28
|
pos_mid = pos_end / 2
|
28
29
|
time = Time.at(0)
|
29
30
|
between = -1.0/0
|
30
31
|
|
31
32
|
loop do
|
32
|
-
pos_mid, time = seek_log_pos(
|
33
|
+
pos_mid, time = seek_log_pos(@file, pos_mid)
|
33
34
|
break if time.nil? || (pos_mid == pos_end)
|
34
35
|
|
35
36
|
time_valid = lastest_visited_at >= time
|
@@ -45,20 +46,21 @@ class Logpos
|
|
45
46
|
pos_mid = (pos_mid + pos_start) / 2
|
46
47
|
end
|
47
48
|
end
|
49
|
+
@file.close
|
48
50
|
|
49
51
|
return ta.oldest.pos
|
50
52
|
end
|
51
53
|
|
52
54
|
private
|
53
|
-
def seek_log_pos
|
54
|
-
|
55
|
-
|
55
|
+
def seek_log_pos file, pos
|
56
|
+
file.seek pos
|
57
|
+
file_size = File.size(file)
|
56
58
|
|
57
59
|
loop do
|
58
|
-
line =
|
59
|
-
return
|
60
|
+
line = file.gets.to_s.strip!.to_s
|
61
|
+
return file_size if file.pos >= file_size
|
60
62
|
next if (time = @time_parser.call(line)).nil?
|
61
|
-
return [
|
63
|
+
return [file.pos, time]
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logpos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- mvj3
|
@@ -15,24 +15,39 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-03-27 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: rdoc
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
25
25
|
requirements:
|
26
26
|
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
28
|
+
hash: 19
|
29
29
|
segments:
|
30
|
-
-
|
31
|
-
-
|
32
|
-
version: "
|
30
|
+
- 3
|
31
|
+
- 10
|
32
|
+
version: "3.10"
|
33
33
|
type: :development
|
34
34
|
version_requirements: *id001
|
35
|
-
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: hoe
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 31
|
44
|
+
segments:
|
45
|
+
- 2
|
46
|
+
- 14
|
47
|
+
version: "2.14"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
description: Use binary search to seek a position in logs.
|
36
51
|
email:
|
37
52
|
- mvjome@gmail.com
|
38
53
|
executables:
|
@@ -86,6 +101,6 @@ rubyforge_project: logpos
|
|
86
101
|
rubygems_version: 1.8.10
|
87
102
|
signing_key:
|
88
103
|
specification_version: 3
|
89
|
-
summary: Use binary search to seek a position in logs
|
104
|
+
summary: Use binary search to seek a position in logs.
|
90
105
|
test_files:
|
91
106
|
- test/test_logpos.rb
|