rubylogparser 0.1.0 → 0.1.1
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/EXAMPLES.txt +9 -3
- data/GUIDE.txt +3 -2
- data/History.txt +6 -0
- data/examples/event_log.rb +3 -1
- data/examples/files.rb +6 -3
- data/examples/queryinfo.rb +1 -1
- data/examples/registry.rb +4 -2
- data/lib/rubylogparser.rb +87 -98
- data/test/test_rubylogparser.rb +99 -5
- metadata +3 -3
data/EXAMPLES.txt
CHANGED
@@ -25,10 +25,13 @@ Time) are also printed.
|
|
25
25
|
lp = RubyLogParser.new
|
26
26
|
lp.open_query('FS', 'Select Top 10 name, size INTO STDOUT from c:/win*.* ORDER BY size DESC', 'CSV', nil)
|
27
27
|
|
28
|
-
while hash = lp.
|
28
|
+
while hash = lp.data_hash(lp.process_array_line(lp.readline)) do
|
29
29
|
p "#{hash['Name'].ljust(60)} #{hash['Size'].rjust(12)}\n"
|
30
30
|
end
|
31
31
|
|
32
|
+
lp.parse_errors_and_stats(lp.read)
|
33
|
+
|
34
|
+
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
32
35
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
33
36
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
34
37
|
p "Time: " + (lp.execution_time.nil? ? "0" : "#{lp.execution_time}") + " seconds\n"
|
@@ -62,10 +65,13 @@ In this example, each line of data is read into an array for further processing
|
|
62
65
|
"
|
63
66
|
|
64
67
|
lp.open_query('EVT', sql, 'CSV', nil)
|
65
|
-
while array = lp.
|
68
|
+
while array = lp.process_array_line(lp.readline) do
|
66
69
|
p "#{array[0].ljust(35)} #{array[1].rjust(8)}\n"
|
67
70
|
end
|
71
|
+
|
72
|
+
lp.parse_errors_and_stats(lp.read)
|
68
73
|
|
74
|
+
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
69
75
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
70
76
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
71
77
|
p "Time: " + (lp.execution_time.nil? ? "0" : "#{lp.execution_time}") + " seconds\n"
|
@@ -99,7 +105,7 @@ printing the query statistics.
|
|
99
105
|
|
100
106
|
lp.open_query('REG', sql, 'CSV', {'e' => 100})
|
101
107
|
|
102
|
-
while array = lp.
|
108
|
+
while array = lp.process_array_line(lp.readline) do
|
103
109
|
p "#{array[0].ljust(80)} #{array[1].rjust(25)}\n"
|
104
110
|
end
|
105
111
|
|
data/GUIDE.txt
CHANGED
@@ -84,13 +84,14 @@ Next we read the Log Parser output line by line into an array and format the
|
|
84
84
|
output to be printed to the screen. See the examples/files.rb example for using
|
85
85
|
a hash to retrieve output.
|
86
86
|
|
87
|
-
while array = lp.
|
87
|
+
while array = lp.process_array_line(lp.readline) do
|
88
88
|
p "#{array[0].ljust(35)} #{array[1].rjust(8)}\n"
|
89
89
|
end
|
90
90
|
|
91
91
|
Once all output has been processed, the query statistics and any warnings/errors
|
92
|
-
are available.
|
92
|
+
are read from the remaining Log Parser output in the pipe and made available.
|
93
93
|
|
94
|
+
lp.parse_errors_and_stats(lp.read)
|
94
95
|
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
95
96
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
96
97
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
data/History.txt
CHANGED
data/examples/event_log.rb
CHANGED
@@ -19,11 +19,13 @@ ORDER BY number_of_events desc
|
|
19
19
|
lp.open_query('EVT', sql, 'CSV', nil)
|
20
20
|
|
21
21
|
i=1
|
22
|
-
while array = lp.
|
22
|
+
while array = lp.process_array_line(lp.readline) do
|
23
23
|
p "#{i}.".ljust(4) + " #{array[0].ljust(35)} #{array[1].rjust(8)}\n"
|
24
24
|
i += 1
|
25
25
|
end
|
26
26
|
|
27
|
+
lp.parse_errors_and_stats(lp.read)
|
28
|
+
|
27
29
|
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
28
30
|
p "\nProcessed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
29
31
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
data/examples/files.rb
CHANGED
@@ -6,14 +6,17 @@ require 'rubylogparser.rb'
|
|
6
6
|
lp = RubyLogParser.new
|
7
7
|
|
8
8
|
# Note: This query may take several minutes to run
|
9
|
-
lp.open_query('FS', 'Select Top 10 name, size INTO STDOUT from c:/
|
9
|
+
lp.open_query('FS', 'Select Top 10 name, size INTO STDOUT from c:/rubylogparser/*.* ORDER BY size DESC', 'CSV', nil)
|
10
10
|
|
11
11
|
i=1
|
12
|
-
while hash = lp.
|
13
|
-
p "#{i}.
|
12
|
+
while hash = lp.data_hash(lp.process_array_line(lp.readline)) do
|
13
|
+
p "#{i}. #{hash['Name'].ljust(60)} #{hash['Size'].rjust(12)}\n"
|
14
14
|
i += 1
|
15
15
|
end
|
16
16
|
|
17
|
+
lp.parse_errors_and_stats(lp.read)
|
18
|
+
|
19
|
+
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
17
20
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
18
21
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
19
22
|
p "Time: " + (lp.execution_time.nil? ? "0" : "#{lp.execution_time}") + " seconds\n"
|
data/examples/queryinfo.rb
CHANGED
data/examples/registry.rb
CHANGED
@@ -18,11 +18,13 @@ WHERE LastWriteTime >= SUB(SYSTEM_TIMESTAMP(), TIMESTAMP('0000-01-02', 'yyyy-M
|
|
18
18
|
lp.open_query('REG', sql, 'CSV', {'e' => 100})
|
19
19
|
|
20
20
|
i=1
|
21
|
-
while array = lp.
|
22
|
-
p "#{i}.
|
21
|
+
while array = lp.process_array_line(lp.readline) do
|
22
|
+
p "#{i}. #{array[0].ljust(80)} #{array[1].rjust(25)}\n"
|
23
23
|
i += 1
|
24
24
|
end
|
25
25
|
|
26
|
+
lp.parse_errors_and_stats(lp.read)
|
27
|
+
|
26
28
|
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
27
29
|
p "Statistics:\n"
|
28
30
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
data/lib/rubylogparser.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
# Author: James A. Clark (jimclark at ieee dot org)
|
7
7
|
#
|
8
|
-
# Copyright (c)
|
8
|
+
# Copyright (c) 2008, All Rights Reserved.
|
9
9
|
#
|
10
10
|
# This is free software. You may modify and redistribute this freely under
|
11
11
|
# your choice of the GNU General Public License or the Ruby License.
|
@@ -16,7 +16,7 @@
|
|
16
16
|
require 'csv'
|
17
17
|
|
18
18
|
class RubyLogParser
|
19
|
-
VERSION = "0.1.
|
19
|
+
VERSION = "0.1.1"
|
20
20
|
|
21
21
|
# Stores the various options that will be used to build the command line that
|
22
22
|
# the process is eventually started with
|
@@ -25,6 +25,10 @@ class RubyLogParser
|
|
25
25
|
# The command line string that IO.popen uses to open the LogParser parser
|
26
26
|
attr_accessor :cmd_string
|
27
27
|
|
28
|
+
# A flag which is nil until remaining log parser output is statistics, errors
|
29
|
+
# or other non-data related output
|
30
|
+
attr_accessor :error_flag
|
31
|
+
|
28
32
|
# The pipe to the IO.popen process to read LogParser output data
|
29
33
|
attr_accessor :logparser_pipe
|
30
34
|
|
@@ -55,9 +59,7 @@ class RubyLogParser
|
|
55
59
|
# Initialize is used to check that the Log Parser executable can be found
|
56
60
|
# and to config the various command line defaults.
|
57
61
|
def initialize(lp_executable = nil)
|
58
|
-
|
59
|
-
raise "The LogParser executable file cannot be found."
|
60
|
-
end
|
62
|
+
self.valid_executable(lp_executable)
|
61
63
|
self.set_defaults
|
62
64
|
end
|
63
65
|
|
@@ -67,7 +69,7 @@ class RubyLogParser
|
|
67
69
|
# If an executable path is provided, this is tried instead allowing the user to
|
68
70
|
# pick the desired path if one or more LogParser versions are installed.
|
69
71
|
def valid_executable(lp_executable = nil)
|
70
|
-
|
72
|
+
@logparser_exe = nil
|
71
73
|
if lp_executable.nil? then
|
72
74
|
file_locations = ['c:\Program Files\IIS Resources\Log Parser 2.2\LogParser.exe', 'c:\Program Files\Log Parser 2.2\LogParser.exe', 'LogParser.exe']
|
73
75
|
else
|
@@ -76,11 +78,14 @@ class RubyLogParser
|
|
76
78
|
|
77
79
|
file_locations.each {|location|
|
78
80
|
if File::executable? location then
|
79
|
-
found = true
|
80
81
|
@logparser_exe = location
|
81
82
|
end
|
82
83
|
}
|
83
|
-
|
84
|
+
if @logparser_exe.nil?
|
85
|
+
raise RuntimeError, "The Log Parser executable could not be found."
|
86
|
+
end
|
87
|
+
|
88
|
+
return @logparser_exe
|
84
89
|
end
|
85
90
|
|
86
91
|
# LogParser has a variety of switches to control the input, output, SQL and
|
@@ -163,67 +168,51 @@ class RubyLogParser
|
|
163
168
|
return @cmd_string
|
164
169
|
end
|
165
170
|
|
166
|
-
# LogParser needs a data input source, a SQL selection query, and an output
|
167
|
-
# location. A hash can also be passed to override default values or provide
|
168
|
-
# additional command line switches. An interesting exception that needs to be
|
169
|
-
# handled is LogParser's "-queryInfo" switch which makes LogParser evaluate
|
170
|
-
# the input parameters and return info on the various column datatypes.
|
171
|
-
def open_query(input, query, output, options)
|
172
|
-
@cmd_options['i'] = input
|
173
|
-
@cmd_options['sql'] = query
|
174
|
-
@cmd_options['o'] = output
|
175
|
-
@cmd_string = self.build_command_string(options)
|
176
|
-
|
177
|
-
self.create_process
|
178
|
-
|
179
|
-
if @cmd_options['queryInfo'] == true then
|
180
|
-
@queryInfo = []
|
181
|
-
@logparser_pipe.each do |line|
|
182
|
-
@queryInfo << line
|
183
|
-
end
|
184
|
-
elsif @cmd_options['q'] == false then
|
185
|
-
self.field_definitions
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
171
|
# The LogParser process is created using IO.popen and then subsequent output
|
190
172
|
# from LogParser is read via a pipe.
|
191
173
|
def create_process
|
174
|
+
@logparser_pipe = nil
|
175
|
+
msg = nil
|
192
176
|
begin
|
193
177
|
@logparser_pipe = IO.popen(@cmd_string, "rb")
|
194
178
|
rescue Exception => e
|
195
|
-
|
179
|
+
msg = e.to_s
|
180
|
+
# puts msg # when debugging
|
196
181
|
end
|
182
|
+
return @logparser_pipe
|
197
183
|
end
|
198
184
|
|
199
|
-
#
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
185
|
+
# Return everything that remains in the Log Parser pipe
|
186
|
+
def read
|
187
|
+
@logparser_pipe.read
|
188
|
+
end
|
189
|
+
|
190
|
+
# Reads a single line of output from the LogParser pipe.
|
204
191
|
def readline
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
192
|
+
self.process_line(@logparser_pipe.readline)
|
193
|
+
end
|
194
|
+
|
195
|
+
# When Log Parser outputs the first blank line ("\r\n"), it indicates that
|
196
|
+
# the data output is complete and anything that will follow are the errors
|
197
|
+
# or query statistics.
|
198
|
+
def process_line(line)
|
199
|
+
if line == "\r\n" then
|
200
|
+
self.error_flag = true # remaining output should now be error
|
214
201
|
return nil
|
202
|
+
else
|
203
|
+
return line.chomp!
|
215
204
|
end
|
216
205
|
end
|
217
|
-
|
206
|
+
|
218
207
|
# The first line of output contains the field names (by default). This
|
219
208
|
# information is used to name the various hash keys when data is returned in
|
220
209
|
# a hash.
|
221
|
-
def field_definitions
|
210
|
+
def field_definitions(names_line)
|
222
211
|
@field_names = Array.new
|
223
|
-
names_line = self.readline
|
224
212
|
if !names_line.nil? then
|
225
213
|
@field_names = names_line.split(/,/)
|
226
214
|
end
|
215
|
+
return @field_names
|
227
216
|
end
|
228
217
|
|
229
218
|
# The output from LogParser is return in comma separated value (CSV) format.
|
@@ -232,8 +221,7 @@ class RubyLogParser
|
|
232
221
|
# a field in two. In cases where the actual number of fields returned by split
|
233
222
|
# does not match the expected number, the CSV library is called to try the
|
234
223
|
# split. This usually fixes the problem.
|
235
|
-
def
|
236
|
-
next_line = self.readline
|
224
|
+
def process_array_line(next_line)
|
237
225
|
if !next_line.nil? then
|
238
226
|
array_line = next_line.split(/,/)
|
239
227
|
if array_line.length == @field_names.length then
|
@@ -243,7 +231,6 @@ class RubyLogParser
|
|
243
231
|
if row.length == @field_names.length then
|
244
232
|
return row
|
245
233
|
else
|
246
|
-
line_errors_and_stats(next_line)
|
247
234
|
return nil
|
248
235
|
end
|
249
236
|
}
|
@@ -252,54 +239,56 @@ class RubyLogParser
|
|
252
239
|
return nil
|
253
240
|
end
|
254
241
|
|
255
|
-
#
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
while 1 > 0
|
262
|
-
case line_input
|
263
|
-
when /Task completed with parse errors/
|
264
|
-
@parse_errors = Array.new
|
265
|
-
until ((line_input = @logparser_pipe.readline) == "\r\n")
|
266
|
-
@parse_errors.push(line_input)
|
267
|
-
end
|
268
|
-
when /Statistics:/
|
269
|
-
while line = @logparser_pipe.readline
|
270
|
-
case line
|
271
|
-
when /Elements processed:\s*([\d,]+)\n*/i
|
272
|
-
@elements_processed = $1
|
273
|
-
when /Elements output:\s*([\d,]+)\n*/i
|
274
|
-
@elements_output = $1
|
275
|
-
when /Execution time:\s*([\d\.]+) seconds\n*/i
|
276
|
-
@execution_time = $1
|
277
|
-
end
|
278
|
-
end
|
279
|
-
end
|
280
|
-
line_input = @logparser_pipe.readline
|
281
|
-
end
|
282
|
-
rescue EOFError
|
283
|
-
return nil
|
242
|
+
# Extract statistics and any parse errors from output
|
243
|
+
def parse_errors_and_stats(text_input)
|
244
|
+
if text_input =~ /Statistics:\r\n(.*)/ then
|
245
|
+
@elements_processed = $1 if text_input =~ /^Elements processed:\s*([\d,]+)\r\n/i
|
246
|
+
@elements_output = $1 if text_input =~ /^Elements output:\s*([\d,]+)\r\n/i
|
247
|
+
@execution_time = $1 if text_input =~ /^Execution time:\s*([\d\.]+) seconds\r\n/i
|
284
248
|
end
|
249
|
+
|
250
|
+
if text_input =~ /Task completed with parse errors.*?\r\n(.*)/ims then
|
251
|
+
@parse_errors = $1
|
252
|
+
if @parse_errors =~ /(.*?)Statistics:\r\n/ims then
|
253
|
+
@parse_errors = $1
|
254
|
+
end
|
255
|
+
end
|
285
256
|
end
|
286
257
|
|
287
258
|
# To return the data in a hash, the data line is first read into an array.
|
288
259
|
# Then the field keys (initially loaded by the field_definitions method when
|
289
260
|
# the LogParser process was created), are matched up with the respective data
|
290
261
|
# values.
|
291
|
-
def
|
292
|
-
data_hash =
|
293
|
-
data_array
|
294
|
-
|
262
|
+
def data_hash(data_array)
|
263
|
+
data_hash = nil
|
264
|
+
if !data_array.nil? then
|
265
|
+
data_hash = Hash.new
|
295
266
|
@field_names.each_index {|x|
|
296
267
|
data_hash[@field_names[x]] = data_array[x]
|
297
268
|
}
|
298
|
-
return data_hash
|
299
|
-
else
|
300
|
-
return nil
|
301
269
|
end
|
270
|
+
return data_hash
|
302
271
|
end
|
272
|
+
|
273
|
+
# LogParser needs a data input source, a SQL selection query, and an output
|
274
|
+
# location. A hash can also be passed to override default values or provide
|
275
|
+
# additional command line switches. An interesting exception that needs to be
|
276
|
+
# handled is LogParser's "-queryInfo" switch which makes LogParser evaluate
|
277
|
+
# the input parameters and return info on the various column datatypes.
|
278
|
+
def open_query(input, query, output, options)
|
279
|
+
@cmd_options['i'] = input
|
280
|
+
@cmd_options['sql'] = query
|
281
|
+
@cmd_options['o'] = output
|
282
|
+
@cmd_string = self.build_command_string(options)
|
283
|
+
|
284
|
+
self.create_process
|
285
|
+
|
286
|
+
if @cmd_options['queryInfo'] == true then
|
287
|
+
@queryInfo = self.read
|
288
|
+
elsif @cmd_options['q'] == false then
|
289
|
+
self.field_definitions(self.readline)
|
290
|
+
end
|
291
|
+
end
|
303
292
|
|
304
293
|
# When data is best processed all at once, this method will return an array
|
305
294
|
# of arrays. The array will have a header row with the field names by default
|
@@ -311,20 +300,20 @@ class RubyLogParser
|
|
311
300
|
data_array[i] = @field_names
|
312
301
|
i += 1
|
313
302
|
end
|
314
|
-
while array = self.
|
303
|
+
while array = self.process_array_line(self.readline) do
|
315
304
|
data_array[i] = array
|
316
305
|
i += 1
|
317
306
|
end
|
318
307
|
return data_array
|
319
308
|
end
|
320
309
|
|
321
|
-
# A simple convenience method when running LogParser using the -queryInfo
|
322
|
-
# switch. The resulting output is combined into a single string for easier
|
323
|
-
# printing.
|
324
|
-
def formatted_queryInfo
|
325
|
-
temp = String.new
|
326
|
-
@queryInfo.each{|line| temp << line}
|
327
|
-
return temp
|
328
|
-
end
|
329
|
-
|
330
310
|
end
|
311
|
+
=begin
|
312
|
+
@logparser = RubyLogParser.new
|
313
|
+
@logparser.open_query('EVT','SELECT Top 2 SourceName INTO STDOUT From System','CSV',nil)
|
314
|
+
temp = @logparser.read_array(true)
|
315
|
+
p temp.length
|
316
|
+
p "Stat info:"
|
317
|
+
p @logparser.read_all
|
318
|
+
|
319
|
+
=end
|
data/test/test_rubylogparser.rb
CHANGED
@@ -8,10 +8,19 @@ class Test_RubyLogParser < Test::Unit::TestCase
|
|
8
8
|
def setup
|
9
9
|
@logparser = RubyLogParser.new
|
10
10
|
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
if @logparser.logparser_pipe.respond_to?("readline") then
|
14
|
+
@logparser.logparser_pipe.read
|
15
|
+
end
|
16
|
+
@logparser = nil
|
17
|
+
end
|
11
18
|
|
12
19
|
def test_valid_executable
|
13
|
-
|
14
|
-
|
20
|
+
assert_not_equal nil, @logparser.valid_executable(nil)
|
21
|
+
assert_raise RuntimeError do
|
22
|
+
@logparser.valid_executable('c:\someotherfilename.exe')
|
23
|
+
end
|
15
24
|
end
|
16
25
|
|
17
26
|
def test_set_defaults
|
@@ -20,13 +29,14 @@ class Test_RubyLogParser < Test::Unit::TestCase
|
|
20
29
|
assert_equal false, test_defaults['queryInfo']
|
21
30
|
end
|
22
31
|
|
23
|
-
def
|
32
|
+
def test_valid_input_format
|
24
33
|
assert_equal true, @logparser.valid_input_format("CSV")
|
25
34
|
assert_equal true, @logparser.valid_input_format("csv")
|
26
|
-
assert_equal false, @logparser.valid_input_format("xxx")
|
35
|
+
assert_equal false, @logparser.valid_input_format("xxx")
|
36
|
+
assert_equal true, @logparser.valid_input_format(nil)
|
27
37
|
end
|
28
38
|
|
29
|
-
def
|
39
|
+
def test_valid_output_format
|
30
40
|
assert_equal true, @logparser.valid_output_format("CSV")
|
31
41
|
assert_equal true, @logparser.valid_output_format("csv")
|
32
42
|
assert_equal false, @logparser.valid_output_format("xxx")
|
@@ -39,5 +49,89 @@ class Test_RubyLogParser < Test::Unit::TestCase
|
|
39
49
|
@logparser.logparser_exe = 'LogParser.exe'
|
40
50
|
assert_equal '"LogParser.exe" -i:EVT "SQL Test" -o:CSV -queryInfo', @logparser.build_command_string({'queryInfo' => true})
|
41
51
|
end
|
52
|
+
|
53
|
+
def test_create_process
|
54
|
+
@logparser.cmd_options['i'] = 'EVT'
|
55
|
+
@logparser.cmd_options['sql'] = 'SELECT Top 2 SourceName INTO STDOUT From System'
|
56
|
+
@logparser.cmd_options['o'] = 'CSV'
|
57
|
+
@logparser.cmd_string = @logparser.build_command_string(nil)
|
58
|
+
@logparser.create_process
|
59
|
+
assert_equal true, @logparser.logparser_pipe.respond_to?("readline")
|
60
|
+
@logparser.cmd_string = ' '
|
61
|
+
assert_equal nil, @logparser.create_process
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_process_line
|
65
|
+
assert_equal "test", @logparser.process_line("test\r\n")
|
66
|
+
assert_equal nil, @logparser.process_line("\r\n")
|
67
|
+
assert_equal true, @logparser.error_flag
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_field_definitions
|
71
|
+
assert_equal [], @logparser.field_definitions(nil)
|
72
|
+
assert_equal ["A"], @logparser.field_definitions("A")
|
73
|
+
assert_equal ["A","B"], @logparser.field_definitions("A,B")
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_process_array_line
|
77
|
+
assert_equal ["A","B","C"], @logparser.field_definitions("A,B,C")
|
78
|
+
assert_equal 3, @logparser.process_array_line('data1,data2,data3').length
|
79
|
+
assert_equal 3, @logparser.process_array_line('data1,"da,ta2",data3').length
|
80
|
+
assert_equal nil, @logparser.process_array_line('data1,"da,ta2",data3,"data4"')
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_parse_errors_and_stats
|
84
|
+
text = "Task completed with parse errors.\r\nHere are the errors...\r\nStatistics:\r\n-----------\r\nElements processed: 2\r\nElements output: 2\r\nExecution time: 0.01 seconds\r\n\r\n"
|
85
|
+
@logparser.parse_errors_and_stats(text)
|
86
|
+
assert_equal '2', @logparser.elements_processed
|
87
|
+
assert_equal '2', @logparser.elements_output
|
88
|
+
assert_equal '0.01', @logparser.execution_time
|
89
|
+
assert_match "Here are the errors\.\.\.", @logparser.parse_errors
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_readall
|
93
|
+
@logparser.cmd_options['i'] = 'EVT'
|
94
|
+
@logparser.cmd_options['sql'] = 'SELECT Top 2 SourceName INTO STDOUT From System'
|
95
|
+
@logparser.cmd_options['o'] = 'CSV'
|
96
|
+
@logparser.build_command_string(nil)
|
97
|
+
@logparser.create_process
|
98
|
+
assert_equal true, @logparser.logparser_pipe.respond_to?("read")
|
99
|
+
assert_equal true, @logparser.read.length > 100
|
100
|
+
assert_equal "", @logparser.read
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_data_hash
|
104
|
+
assert_equal nil, @logparser.data_hash(nil)
|
105
|
+
assert_equal ["A","B","C"], @logparser.field_definitions("A,B,C")
|
106
|
+
temp = @logparser.data_hash(['data1','data2','data3'])
|
107
|
+
assert_equal 3, temp.length
|
108
|
+
assert_equal 'data1', temp.fetch("A")
|
109
|
+
assert_equal 'data2', temp.fetch("B")
|
110
|
+
assert_equal 'data3', temp.fetch("C")
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_open_query_queryInfo
|
114
|
+
@logparser.open_query('EVT','SELECT * INTO STDOUT From System','CSV',{'queryInfo' => true})
|
115
|
+
assert_match "Input format: EVT", @logparser.queryInfo
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_open_query_field_names
|
119
|
+
@logparser.open_query('EVT','SELECT TimeGenerated INTO STDOUT From System','CSV',nil)
|
120
|
+
assert_equal 'TimeGenerated', @logparser.field_names[0]
|
121
|
+
assert_equal 1, @logparser.field_names.length
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_read_array_with_header
|
125
|
+
@logparser.open_query('EVT','SELECT Top 2 SourceName INTO STDOUT From System','CSV',nil)
|
126
|
+
temp = @logparser.read_array(true)
|
127
|
+
assert_equal temp[0][0], 'SourceName'
|
128
|
+
assert_equal 3, temp.length
|
129
|
+
end
|
42
130
|
|
131
|
+
def test_read_array_without_header
|
132
|
+
@logparser.open_query('EVT','SELECT Top 2 SourceName INTO STDOUT From System','CSV',nil)
|
133
|
+
temp = @logparser.read_array(false)
|
134
|
+
assert_equal 2, temp.length
|
135
|
+
end
|
136
|
+
|
43
137
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rubylogparser
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2008-
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2008-06-06 00:00:00 -07:00
|
8
8
|
summary: RubyLogParser provides a wrapper around Microsoft's Log Parser executable.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -66,5 +66,5 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
69
|
+
version: 1.5.3
|
70
70
|
version:
|