indy 0.2.0 → 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.
@@ -4,8 +4,8 @@ describe Indy do
4
4
 
5
5
  context "common logging format" do
6
6
 
7
- common_log_pattern = {
8
- :name => 'common_log_pattern',
7
+ common_log_format = {
8
+ :name => 'common_log_format',
9
9
  :source => ["127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb1.gif HTTP/1.0\" 200 2326",
10
10
  "127.0.0.1 - louie [10/Oct/2000:13:55:37 -0700] \"GET /apache_pb2.gif HTTP/1.0\" 200 2327",
11
11
  "127.0.0.1 - frank [10/Oct/2000:13:55:38 -0700] \"GET /apache_pb3.gif HTTP/1.0\" 404 300"].join("\n"),
@@ -14,8 +14,8 @@ describe Indy do
14
14
  :test_field => :authuser
15
15
  }
16
16
 
17
- combined_log_pattern = {
18
- :name => 'combined_log_pattern',
17
+ combined_log_format = {
18
+ :name => 'combined_log_format',
19
19
  :source => ["127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb1.gif HTTP/1.0\" 200 2326 \"http://www.example.com/start.html\" \"Mozilla/4.08 [en] (Win98; I ;Nav)\"",
20
20
  "127.0.0.1 - louie [10/Oct/2000:13:55:37 -0700] \"GET /apache_pb2.gif HTTP/1.0\" 200 2327 \"http://www.example.com/start.html\" \"Mozilla/4.08 [en] (Win98; I ;Nav)\"",
21
21
  "127.0.0.1 - frank [10/Oct/2000:13:55:38 -0700] \"GET /apache_pb3.gif HTTP/1.0\" 404 300 \"http://www.example.com/start.html\" \"Mozilla/4.08 [en] (Win98; I ;Nav)\""].join("\n"),
@@ -24,8 +24,8 @@ describe Indy do
24
24
  :test_field => :authuser
25
25
  }
26
26
 
27
- log4r_default_pattern = {
28
- :name => 'log4r_default_pattern',
27
+ log4r_default_format = {
28
+ :name => 'log4r_default_format',
29
29
  :source => ["DEBUG mylog: This is a message with level DEBUG",
30
30
  " INFO mylog: This is a message with level INFO",
31
31
  " WARN louie: This is a message with level WARN",
@@ -36,18 +36,18 @@ describe Indy do
36
36
  :test_field => :application
37
37
  }
38
38
 
39
- [ common_log_pattern,
40
- combined_log_pattern,
41
- log4r_default_pattern ].each do |format|
39
+ [ common_log_format,
40
+ combined_log_format,
41
+ log4r_default_format ].each do |format|
42
42
 
43
43
  it "#{format[:name]} should work" do
44
- indy = Indy.new(:source => format[:source], :pattern => [format[:regexp],format[:fields]].flatten)
44
+ indy = Indy.new(:source => format[:source], :log_format => [format[:regexp],format[:fields]].flatten)
45
45
  result = indy.for(format[:test_field] => 'louie')
46
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
- indy = Indy.new(:source => format[:source], :pattern => eval('Indy::' + format[:name].upcase))
50
+ indy = Indy.new(:source => format[:source], :log_format => eval('Indy::' + format[:name].upcase))
51
51
  result = indy.for(format[:test_field] => 'louie')
52
52
  result.length.should == 1
53
53
 
@@ -0,0 +1,10 @@
1
+ 2000-09-07 14:07:41 INFO MyApp - Entering application with data:
2
+ multi-line data.
3
+ 2001-09-07 14:07:41 INFO MyApp - Initializing application
4
+ 2002-09-07 14:07:42 INFO MyApp - Exiting application with data:
5
+ multi-line data (2003-09-07 14:07:42) ....
6
+
7
+ 2004-09-07 14:07:42 even more data
8
+ end of multi-line data
9
+ 2005-09-07 14:07:43 INFO MyApp - Entering application with data:
10
+ multi-line data.
@@ -24,40 +24,17 @@ describe Indy do
24
24
 
25
25
  end
26
26
 
27
- context "file operations" do
28
-
29
- before(:all) do
30
- end
31
-
32
- it "should open and close file once per search" do
33
- file_path = File.join( File.dirname(__FILE__), 'data.log')
34
- file_io1 = File.open(file_path)
35
- file_io2 = File.open(file_path)
36
-
37
- File.should_receive( :exist? ).with(file_path).ordered.and_return(true)
38
- File.should_receive( :open ).ordered.and_return( file_io1 )
39
- file_io1.should_receive( :close ).ordered
40
- File.should_receive( :open ).ordered.and_return( file_io2 )
41
- file_io2.should_receive( :close ).ordered
42
-
43
- @indy = Indy.search(file_path)
44
- @indy.for(:all).length.should == 2
45
- @indy.for(:all).length.should == 2
46
- end
47
-
48
- end
49
-
50
27
  context "search file" do
51
28
 
52
29
  before(:all) do
53
30
  @file = Tempfile.new('file_search_spec')
54
- @file_path = @file.path
55
31
  @file.write([ "2000-09-07 14:07:41 INFO MyApp - Entering APPLICATION.",
56
32
  "2000-09-07 14:08:41 INFO MyOtherApp - Exiting APPLICATION.",
57
33
  "2000-09-07 14:10:55 INFO MyApp - Exiting APPLICATION."
58
34
  ].join("\n"))
59
35
  @file.flush
60
- @indy = Indy.search(@file_path)
36
+ @file.rewind
37
+ @indy = Indy.search(:file => @file)
61
38
  end
62
39
 
63
40
  it "should return 2 records" do
@@ -0,0 +1,85 @@
1
+ require "#{File.dirname(__FILE__)}/helper"
2
+
3
+ class Indy
4
+
5
+ describe Source do
6
+
7
+ it "should raise without parameter" do
8
+ lambda{ Source.new }.should raise_error( ArgumentError )
9
+ end
10
+
11
+ it "should raise with nil parameter" do
12
+ lambda{ Source.new(nil) }.should raise_error( Indy::Source::Invalid )
13
+ end
14
+
15
+ it "should raise with bad parameter" do
16
+ class NotString;end
17
+ lambda{ Source.new(NotString.new) }.should raise_error( Indy::Source::Invalid )
18
+ end
19
+
20
+ it "should return Indy::Source object" do
21
+ Source.new('logdata').class.should == Indy::Source
22
+ end
23
+
24
+ it "should respond to :open" do
25
+ Source.new('logdata').should respond_to(:open)
26
+ end
27
+
28
+ it "should respond to :num_lines" do
29
+ Source.new('logdata').should respond_to(:num_lines)
30
+ end
31
+
32
+ it "should respond to :lines" do
33
+ Source.new('logdata').should respond_to(:num_lines)
34
+ end
35
+
36
+ it "should handle Files" do
37
+ require 'tempfile'
38
+ Source.new(Tempfile.new('x')).class.should == Indy::Source
39
+ end
40
+
41
+ context "instance" do
42
+
43
+ before(:each) do
44
+ log = [ "2000-09-07 14:07:41 INFO MyApp - Entering APPLICATION.",
45
+ "2000-09-07 14:07:42 DEBUG MyApp - Initializing APPLICATION.",
46
+ "2000-09-07 14:07:43 INFO MyApp - Exiting APPLICATION."
47
+ ].join("\n")
48
+ @source = Source.new(log)
49
+ end
50
+
51
+ it "should return StringIO from :open" do
52
+ @source.open.class.should == StringIO
53
+ end
54
+
55
+ it "should return lines array from :lines" do
56
+ @source.lines.class.should == Array
57
+ @source.lines.length.should == 3
58
+ end
59
+
60
+ it "should return 3 from :num_lines" do
61
+ @source.num_lines.should == 3
62
+ end
63
+
64
+ end
65
+
66
+ it "should handle a :file hash key with File object value" do
67
+ require 'tempfile'
68
+ file = Tempfile.new('x')
69
+ Source.new(:file => file).class.should == Indy::Source
70
+ end
71
+
72
+ it "should handle a bare File object" do
73
+ require 'tempfile'
74
+ file = Tempfile.new('y')
75
+ Source.new(file).class.should == Indy::Source
76
+ end
77
+
78
+ it "should handle a real file" do
79
+ log_file = "#{File.dirname(__FILE__)}/data.log"
80
+ Indy.search(:file => File.open(log_file, 'r')).for(:application => 'MyApp').length.should == 2
81
+ end
82
+
83
+ end
84
+
85
+ end
@@ -23,7 +23,9 @@ describe Indy do
23
23
  "15-03-2000 message7",
24
24
  "16-03-2000 message8\r\n",
25
25
  "17-03-2000 message9"].join("\n")
26
- @indy = Indy.new(:source => logdata, :pattern => ['^(\d[^\s]+\d) (.+)$', :time, :message])
26
+ @indy = Indy.new(
27
+ :source => logdata,
28
+ :log_format => ['^(\d[^\s]+\d) (.+)$', :time, :message])
27
29
  @indy.after(:time => '13-03-2000')
28
30
  @indy.for(:all).length.should == 4
29
31
  end
@@ -157,7 +159,8 @@ describe Indy do
157
159
 
158
160
  before(:all) do
159
161
  pattern = "(\w+) (\d{4}-\d{2}-\d{2}) (\w+) - (.*)"
160
- @indy = Indy.new(:source => "INFO 2000-09-07 MyApp - Entering APPLICATION.", :pattern => [pattern, :severity, :time, :application, :message])
162
+ @indy = Indy.new(:source => "INFO 2000-09-07 MyApp - Entering APPLICATION.",
163
+ :log_format => [pattern, :severity, :time, :application, :message])
161
164
  end
162
165
 
163
166
  it "should parse a non-standard date" do
@@ -171,7 +174,9 @@ describe Indy do
171
174
 
172
175
  before(:each) do
173
176
  pattern = "^([^\s]+) (.*)$"
174
- @indy = Indy.new(:time_format => '%m-%d-%Y', :source => "1-13-2002 message\n1-14-2002 another message\n1-15-2002 another message", :pattern => [pattern, :time, :message])
177
+ @indy = Indy.new(:time_format => '%m-%d-%Y',
178
+ :source => "1-13-2002 message\n1-14-2002 another message\n1-15-2002 another message",
179
+ :log_format => [pattern, :time, :message])
175
180
  end
176
181
 
177
182
  it "should parse a US style date when given a time format by using DateTime" do
@@ -198,7 +203,7 @@ describe Indy do
198
203
  @time_search_result = Indy.search(log_string).before(:time => "2020-09-07").for(:application => 'MyApp')
199
204
  end
200
205
 
201
- it "should not exist as an attribute when unless performing a time search" do
206
+ it "should not exist as an attribute unless performing a time search" do
202
207
  @search_result.first._time.class.should == NilClass
203
208
  @time_search_result.first._time.class.should == Time
204
209
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
5
+ version: 0.3.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Franklin Webber
@@ -16,8 +11,7 @@ autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
13
 
19
- date: 2011-03-08 00:00:00 -08:00
20
- default_executable:
14
+ date: 2011-08-03 00:00:00 Z
21
15
  dependencies:
22
16
  - !ruby/object:Gem::Dependency
23
17
  name: activesupport
@@ -27,11 +21,6 @@ dependencies:
27
21
  requirements:
28
22
  - - ">="
29
23
  - !ruby/object:Gem::Version
30
- hash: 9
31
- segments:
32
- - 2
33
- - 3
34
- - 5
35
24
  version: 2.3.5
36
25
  type: :runtime
37
26
  version_requirements: *id001
@@ -43,11 +32,6 @@ dependencies:
43
32
  requirements:
44
33
  - - ">="
45
34
  - !ruby/object:Gem::Version
46
- hash: 55
47
- segments:
48
- - 0
49
- - 10
50
- - 0
51
35
  version: 0.10.0
52
36
  type: :development
53
37
  version_requirements: *id002
@@ -59,12 +43,7 @@ dependencies:
59
43
  requirements:
60
44
  - - ">="
61
45
  - !ruby/object:Gem::Version
62
- hash: 15
63
- segments:
64
- - 0
65
- - 6
66
- - 4
67
- version: 0.6.4
46
+ version: 0.7.2
68
47
  type: :development
69
48
  version_requirements: *id003
70
49
  - !ruby/object:Gem::Dependency
@@ -75,11 +54,6 @@ dependencies:
75
54
  requirements:
76
55
  - - ">="
77
56
  - !ruby/object:Gem::Version
78
- hash: 15
79
- segments:
80
- - 2
81
- - 0
82
- - 0
83
57
  version: 2.0.0
84
58
  type: :development
85
59
  version_requirements: *id004
@@ -91,11 +65,6 @@ dependencies:
91
65
  requirements:
92
66
  - - ">="
93
67
  - !ruby/object:Gem::Version
94
- hash: 31
95
- segments:
96
- - 2
97
- - 4
98
- - 0
99
68
  version: 2.4.0
100
69
  type: :development
101
70
  version_requirements: *id005
@@ -107,11 +76,6 @@ dependencies:
107
76
  requirements:
108
77
  - - ">="
109
78
  - !ruby/object:Gem::Version
110
- hash: 31
111
- segments:
112
- - 2
113
- - 4
114
- - 0
115
79
  version: 2.4.0
116
80
  type: :development
117
81
  version_requirements: *id006
@@ -123,46 +87,42 @@ dependencies:
123
87
  requirements:
124
88
  - - ">="
125
89
  - !ruby/object:Gem::Version
126
- hash: 25
127
- segments:
128
- - 0
129
- - 0
130
- - 3
131
90
  version: 0.0.3
132
91
  type: :development
133
92
  version_requirements: *id007
134
93
  - !ruby/object:Gem::Dependency
135
- name: rcov
94
+ name: simplecov
136
95
  prerelease: false
137
96
  requirement: &id008 !ruby/object:Gem::Requirement
138
97
  none: false
139
98
  requirements:
140
99
  - - ">="
141
100
  - !ruby/object:Gem::Version
142
- hash: 41
143
- segments:
144
- - 0
145
- - 9
146
- - 9
147
- version: 0.9.9
101
+ version: 0.4.0
148
102
  type: :development
149
103
  version_requirements: *id008
150
104
  - !ruby/object:Gem::Dependency
151
- name: flog
105
+ name: ruby-debug19
152
106
  prerelease: false
153
107
  requirement: &id009 !ruby/object:Gem::Requirement
154
108
  none: false
155
109
  requirements:
156
110
  - - ">="
157
111
  - !ruby/object:Gem::Version
158
- hash: 27
159
- segments:
160
- - 2
161
- - 5
162
- - 0
163
- version: 2.5.0
112
+ version: 0.11.0
164
113
  type: :development
165
114
  version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
116
+ name: flog
117
+ prerelease: false
118
+ requirement: &id010 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: 2.5.0
124
+ type: :development
125
+ version_requirements: *id010
166
126
  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
127
  email: brandon@faloona.net
168
128
  executables: []
@@ -205,10 +165,13 @@ files:
205
165
  - features/within_time.feature
206
166
  - indy.gemspec
207
167
  - lib/indy.rb
168
+ - lib/indy/formats.rb
208
169
  - lib/indy/indy.rb
209
170
  - lib/indy/log_formats.rb
210
- - lib/indy/patterns.rb
171
+ - lib/indy/notes.txt
211
172
  - lib/indy/result_set.rb
173
+ - lib/indy/source.rb
174
+ - lib/scanf.rb
212
175
  - performance/helper.rb
213
176
  - performance/profile_spec.rb
214
177
  - spec/data.log
@@ -216,14 +179,15 @@ files:
216
179
  - spec/indy_spec.rb
217
180
  - spec/last_spec.rb
218
181
  - spec/log_format_spec.rb
182
+ - spec/multiline.log
219
183
  - spec/result_set_spec.rb
220
184
  - spec/search_spec.rb
185
+ - spec/source_spec.rb
221
186
  - spec/time_spec.rb
222
- has_rdoc: true
223
187
  homepage: http://github.com/burtlo/Indy
224
188
  licenses:
225
189
  - MIT
226
- post_install_message: "\n [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>]\n\n Thank you for installing Indy 0.2.0 / 2011-03-08.\n\n Changes:\n \n * Support for Multiline log entries. See README.md\n * Time scopes now respect inclusive flag\n * #last() no longer supports number of rows as a parameter. Use :span => minutes.\n * Fixes for Ruby 1.9.2\n \n\n [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>]\n\n "
190
+ post_install_message: "\n [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>]\n\n Thank you for installing Indy 0.3.0 / 2011-08-02.\n\n Changes:\n \n * To search a file, specify a File object as the source.\n (Support for file paths will be restored in the future.)\n * Use :log_format as the key to specify your custom format and fields (:pattern is deprecated).\n \n\n [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>] [<>]\n\n "
227
191
  rdoc_options:
228
192
  - --charset=UTF-8
229
193
  require_paths:
@@ -233,25 +197,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
233
197
  requirements:
234
198
  - - ">="
235
199
  - !ruby/object:Gem::Version
236
- hash: 61
237
- segments:
238
- - 1
239
- - 8
240
- - 5
241
200
  version: 1.8.5
242
201
  required_rubygems_version: !ruby/object:Gem::Requirement
243
202
  none: false
244
203
  requirements:
245
204
  - - ">="
246
205
  - !ruby/object:Gem::Version
247
- hash: 3
248
- segments:
249
- - 0
250
206
  version: "0"
251
207
  requirements: []
252
208
 
253
209
  rubyforge_project:
254
- rubygems_version: 1.4.2
210
+ rubygems_version: 1.8.6
255
211
  signing_key:
256
212
  specification_version: 3
257
213
  summary: Log Search Library