indy 0.1.3 → 0.1.4
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/History.txt +4 -0
- data/indy.gemspec +3 -3
- data/lib/indy/indy.rb +6 -4
- data/spec/indy_spec.rb +3 -3
- data/spec/log_format_spec.rb +2 -2
- data/spec/time_spec.rb +126 -10
- metadata +12 -12
data/History.txt
CHANGED
data/indy.gemspec
CHANGED
@@ -30,14 +30,14 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.name = 'indy'
|
31
31
|
s.version = ::Indy::VERSION
|
32
32
|
s.authors = ["Franklin Webber","Brandon Faloona"]
|
33
|
-
s.description = %{ Indy is a log archelogy
|
34
|
-
s.summary = "Log Search
|
33
|
+
s.description = %{ Indy is a log archelogy library that treats logs like data structures. Search fixed format or custom logs by field and/or time. }
|
34
|
+
s.summary = "Log Search Library"
|
35
35
|
s.email = 'franklin.webber@gmail.com'
|
36
36
|
s.homepage = "http://github.com/burtlo/Indy"
|
37
37
|
s.license = 'MIT'
|
38
38
|
|
39
39
|
s.platform = Gem::Platform::RUBY
|
40
|
-
s.required_ruby_version = '>= 1.8.
|
40
|
+
s.required_ruby_version = '>= 1.8.5'
|
41
41
|
s.add_dependency('activesupport', '>= 2.3.5')
|
42
42
|
|
43
43
|
s.add_development_dependency('cucumber', '>= 0.9.2')
|
data/lib/indy/indy.rb
CHANGED
@@ -3,7 +3,7 @@ require 'active_support/core_ext'
|
|
3
3
|
|
4
4
|
class Indy
|
5
5
|
|
6
|
-
VERSION = "0.1.
|
6
|
+
VERSION = "0.1.4"
|
7
7
|
|
8
8
|
#
|
9
9
|
# hash with one key (:string, :file, or :cmd) set to the string that defines the log
|
@@ -296,7 +296,7 @@ class Indy
|
|
296
296
|
time_search = use_time_criteria?
|
297
297
|
|
298
298
|
source_io = open_source
|
299
|
-
results = source_io.
|
299
|
+
results = source_io.collect do |line|
|
300
300
|
|
301
301
|
hash = parse_line(line)
|
302
302
|
|
@@ -356,8 +356,10 @@ class Indy
|
|
356
356
|
#
|
357
357
|
def parse_line( line )
|
358
358
|
|
359
|
-
|
360
|
-
|
359
|
+
match_data = /#{@log_regexp}/.match(line)
|
360
|
+
|
361
|
+
if match_data
|
362
|
+
values = match_data.captures
|
361
363
|
raise "Field mismatch between log pattern and log data. The data is: '#{values.join(':::')}'" unless values.length == @log_fields.length
|
362
364
|
|
363
365
|
hash = Hash[ *@log_fields.zip( values ).flatten ]
|
data/spec/indy_spec.rb
CHANGED
@@ -30,7 +30,7 @@ describe Indy do
|
|
30
30
|
:source => "1-13-2000 yes",
|
31
31
|
:pattern => ['^([^\s]+) (\w+)$', :time, :message]}
|
32
32
|
lambda{ @indy = Indy.search( hash ) }.should_not raise_error
|
33
|
-
@indy.for(:all).
|
33
|
+
@indy.for(:all).length.should == 1
|
34
34
|
end
|
35
35
|
|
36
36
|
|
@@ -156,7 +156,7 @@ describe Indy do
|
|
156
156
|
end
|
157
157
|
|
158
158
|
it "should find all 3 rows" do
|
159
|
-
@indy.for(:all).
|
159
|
+
@indy.for(:all).length.should == 3
|
160
160
|
end
|
161
161
|
|
162
162
|
end
|
@@ -181,7 +181,7 @@ describe Indy do
|
|
181
181
|
end
|
182
182
|
|
183
183
|
it "with() should use default log pattern when passed :default" do
|
184
|
-
@indy.with(:default).for(:all).
|
184
|
+
@indy.with(:default).for(:all).length.should == 3
|
185
185
|
end
|
186
186
|
|
187
187
|
it "with() should accept no params without error" do
|
data/spec/log_format_spec.rb
CHANGED
@@ -43,13 +43,13 @@ describe Indy do
|
|
43
43
|
it "#{format[:name]} should work" do
|
44
44
|
indy = Indy.new(:source => format[:source], :pattern => [format[:regexp],format[:fields]].flatten)
|
45
45
|
result = indy.for(format[:test_field] => 'louie')
|
46
|
-
result.
|
46
|
+
result.length.should == 1
|
47
47
|
end
|
48
48
|
|
49
49
|
it "#{format[:name]} @pattern can be set to the Indy::LogFormat const" do
|
50
50
|
indy = Indy.new(:source => format[:source], :pattern => eval('Indy::' + format[:name].upcase))
|
51
51
|
result = indy.for(format[:test_field] => 'louie')
|
52
|
-
result.
|
52
|
+
result.length.should == 1
|
53
53
|
|
54
54
|
end
|
55
55
|
end
|
data/spec/time_spec.rb
CHANGED
@@ -15,19 +15,135 @@ describe Indy do
|
|
15
15
|
|
16
16
|
it "should parse dates when log includes non-conforming data" do
|
17
17
|
logdata = [ "12-03-2000 message1",
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
"13-03-2000 message2",
|
19
|
+
"14-03-2000 ",
|
20
|
+
" message4",
|
21
|
+
"a14-03-2000 message5",
|
22
|
+
"14-03-2000 message6\n\n\n\n",
|
23
|
+
"15-03-2000 message7",
|
24
|
+
"16-03-2000 message8\r\n",
|
25
|
+
"17-03-2000 message9"].join("\n")
|
26
26
|
@indy = Indy.new(:source => logdata, :pattern => ['^(\d[^\s]+\d) (.+)$', :time, :message])
|
27
27
|
@indy.after(:time => '13-03-2000')
|
28
|
-
@indy.for(:all).
|
28
|
+
@indy.for(:all).length.should == 4
|
29
29
|
end
|
30
30
|
|
31
|
+
end
|
32
|
+
|
33
|
+
context "search time scope" do
|
34
|
+
|
35
|
+
before(:each) do
|
36
|
+
@indy = Indy.search(
|
37
|
+
[ "2000-09-07 14:07:41 INFO MyApp - Entering APPLICATION.",
|
38
|
+
"2000-09-07 14:07:42 INFO MyApp - Initializing APPLICATION.",
|
39
|
+
"2000-09-07 14:07:43 INFO MyApp - Configuring APPLICATION.",
|
40
|
+
"2000-09-07 14:07:44 INFO MyApp - Running APPLICATION.",
|
41
|
+
"2000-09-07 14:07:45 INFO MyApp - Exiting APPLICATION."
|
42
|
+
].join("\n") )
|
43
|
+
end
|
44
|
+
|
45
|
+
context "after method" do
|
46
|
+
|
47
|
+
it "should find the correct entries" do
|
48
|
+
@indy.after(:time => '2000-09-07 14:07:42').for(:all).count.should == 3
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should find 0 entries with a time that is past the log" do
|
52
|
+
@indy.after(:time => '2000-09-07 14:07:46').for(:all).length.should == 0
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should find all entries with a time that is before the log" do
|
56
|
+
@indy.after(:time => '2000-09-07 14:07:40').for(:all).length.should == 5
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should find entries using inclusive" do
|
60
|
+
@indy.after(:time => '2000-09-07 14:07:42', :inclusive => true).for(:all).length.should == 4
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
context "before method" do
|
66
|
+
|
67
|
+
it "should find the correct entries" do
|
68
|
+
@indy.before(:time => '2000-09-07 14:07:44').for(:all).count.should == 3
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should find 0 entries with a time that is before the log" do
|
72
|
+
@indy.before(:time => '2000-09-07 14:07:40').for(:all).length.should == 0
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should find all entries with a time that is after the log" do
|
76
|
+
@indy.before(:time => '2000-09-07 14:07:47').for(:all).length.should == 5
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should find entries using inclusive" do
|
80
|
+
@indy.before(:time => '2000-09-07 14:07:44', :inclusive => true).for(:all).length.should == 4
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context "within method" do
|
86
|
+
|
87
|
+
it "should find the correct entries" do
|
88
|
+
@indy.within(:time => ['2000-09-07 14:07:41', '2000-09-07 14:07:43']).for(:all).count.should == 1
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should find the correct entries using inclusive" do
|
92
|
+
@indy.within(:time => ['2000-09-07 14:07:41', '2000-09-07 14:07:43'], :inclusive => true).for(:all).count.should == 3
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
context "search time scopes with span" do
|
100
|
+
|
101
|
+
before(:each) do
|
102
|
+
@indy = Indy.search(
|
103
|
+
[ "2000-09-07 14:07:41 INFO MyApp - Entering APPLICATION.",
|
104
|
+
"2000-09-07 14:08:41 INFO MyApp - Initializing APPLICATION.",
|
105
|
+
"2000-09-07 14:09:41 INFO MyApp - Configuring APPLICATION.",
|
106
|
+
"2000-09-07 14:10:50 INFO MyApp - Running APPLICATION.",
|
107
|
+
"2000-09-07 14:11:42 INFO MyApp - Exiting APPLICATION.",
|
108
|
+
"2000-09-07 14:12:15 INFO MyApp - Exiting APPLICATION."
|
109
|
+
].join("\n") )
|
110
|
+
end
|
111
|
+
|
112
|
+
it "using after should find the correct entries" do
|
113
|
+
@indy.after(:time => '2000-09-07 14:07:42', :span => 1).for(:all).count.should == 1
|
114
|
+
end
|
115
|
+
|
116
|
+
it "using before should find the correct entries" do
|
117
|
+
@indy.before(:time => '2000-09-07 14:12:00', :span => 4).for(:all).count.should == 4
|
118
|
+
end
|
119
|
+
|
120
|
+
it "using around should find the correct entries" do
|
121
|
+
puts @indy.around(:time => '2000-09-07 14:11:00', :span => 2).inspect
|
122
|
+
@indy.for(:all).count.should == 3
|
123
|
+
end
|
124
|
+
|
125
|
+
it "using after and inclusive should find the correct entries" do
|
126
|
+
@indy.after(:time => '2000-09-07 14:07:41', :span => 1, :inclusive => true).for(:all).count.should == 1
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
context "multiple time scope methods on the same instance" do
|
132
|
+
|
133
|
+
before(:all) do
|
134
|
+
@indy = Indy.search(
|
135
|
+
[ "2000-09-07 14:07:41 INFO MyApp - Entering APPLICATION.",
|
136
|
+
"2000-09-07 14:07:42 INFO MyApp - Initializing APPLICATION.",
|
137
|
+
"2000-09-07 14:07:43 INFO MyApp - Configuring APPLICATION.",
|
138
|
+
"2000-09-07 14:07:44 INFO MyApp - Running APPLICATION.",
|
139
|
+
"2000-09-07 14:07:45 INFO MyApp - Exiting APPLICATION."
|
140
|
+
].join("\n") )
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should find the correct entries" do
|
144
|
+
@indy.after(:time => '2000-09-07 14:07:42').for(:all).length.should == 3
|
145
|
+
@indy.before(:time => '2000-09-07 14:07:43').for(:all).length.should == 2
|
146
|
+
end
|
31
147
|
|
32
148
|
end
|
33
149
|
|
@@ -58,7 +174,7 @@ describe Indy do
|
|
58
174
|
end
|
59
175
|
|
60
176
|
it "should accept standard time format searches even while using an explicit log time format" do
|
61
|
-
@indy.after(:time => 'Jan 13 2002').for(:all).
|
177
|
+
@indy.after(:time => 'Jan 13 2002').for(:all).length.should == 2
|
62
178
|
@indy.after(:time => 'Jan 14 2002').for(:all).last._time.mday.should == 15
|
63
179
|
end
|
64
180
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: indy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 19
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 4
|
10
|
+
version: 0.1.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Franklin Webber
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-01-
|
19
|
+
date: 2011-01-19 00:00:00 -08:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -163,7 +163,7 @@ dependencies:
|
|
163
163
|
version: 2.5.0
|
164
164
|
type: :development
|
165
165
|
version_requirements: *id009
|
166
|
-
description: " Indy is a log archelogy
|
166
|
+
description: " Indy is a log archelogy library that treats logs like data structures. Search fixed format or custom logs by field and/or time. "
|
167
167
|
email: franklin.webber@gmail.com
|
168
168
|
executables: []
|
169
169
|
|
@@ -221,7 +221,7 @@ has_rdoc: true
|
|
221
221
|
homepage: http://github.com/burtlo/Indy
|
222
222
|
licenses:
|
223
223
|
- MIT
|
224
|
-
post_install_message: "\n [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>]\n\n Thank you for installing Indy 0.1.
|
224
|
+
post_install_message: "\n [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>]\n\n Thank you for installing Indy 0.1.4 / 2011-01-19.\n\n Changes:\n \n * Add support for Ruby 1.8.5\n \n\n [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>]\n\n "
|
225
225
|
rdoc_options:
|
226
226
|
- --charset=UTF-8
|
227
227
|
require_paths:
|
@@ -231,12 +231,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
231
231
|
requirements:
|
232
232
|
- - ">="
|
233
233
|
- !ruby/object:Gem::Version
|
234
|
-
hash:
|
234
|
+
hash: 61
|
235
235
|
segments:
|
236
236
|
- 1
|
237
237
|
- 8
|
238
|
-
-
|
239
|
-
version: 1.8.
|
238
|
+
- 5
|
239
|
+
version: 1.8.5
|
240
240
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
241
|
none: false
|
242
242
|
requirements:
|
@@ -249,9 +249,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
249
|
requirements: []
|
250
250
|
|
251
251
|
rubyforge_project:
|
252
|
-
rubygems_version: 1.
|
252
|
+
rubygems_version: 1.3.7
|
253
253
|
signing_key:
|
254
254
|
specification_version: 3
|
255
|
-
summary: Log Search
|
255
|
+
summary: Log Search Library
|
256
256
|
test_files: []
|
257
257
|
|