rubylogparser 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/EXAMPLES.txt +7 -10
- data/GUIDE.txt +2 -2
- data/History.txt +8 -4
- data/README.txt +4 -2
- data/Rakefile +1 -0
- data/examples/event_log.rb +2 -2
- data/examples/files.rb +3 -4
- data/examples/registry.rb +1 -1
- data/lib/rubylogparser.rb +16 -11
- data/test/test_rubylogparser.rb +22 -0
- metadata +54 -46
data/EXAMPLES.txt
CHANGED
@@ -25,13 +25,11 @@ 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.read_hash do
|
29
29
|
p "#{hash['Name'].ljust(60)} #{hash['Size'].rjust(12)}\n"
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
lp.parse_errors_and_stats(lp.read)
|
33
|
-
|
34
|
-
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
35
33
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
36
34
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
37
35
|
p "Time: " + (lp.execution_time.nil? ? "0" : "#{lp.execution_time}") + " seconds\n"
|
@@ -65,13 +63,11 @@ In this example, each line of data is read into an array for further processing
|
|
65
63
|
"
|
66
64
|
|
67
65
|
lp.open_query('EVT', sql, 'CSV', nil)
|
68
|
-
while array = lp.
|
66
|
+
while array = lp.read_array_line do
|
69
67
|
p "#{array[0].ljust(35)} #{array[1].rjust(8)}\n"
|
70
68
|
end
|
71
69
|
|
72
70
|
lp.parse_errors_and_stats(lp.read)
|
73
|
-
|
74
|
-
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
75
71
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
76
72
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
77
73
|
p "Time: " + (lp.execution_time.nil? ? "0" : "#{lp.execution_time}") + " seconds\n"
|
@@ -105,10 +101,11 @@ printing the query statistics.
|
|
105
101
|
|
106
102
|
lp.open_query('REG', sql, 'CSV', {'e' => 100})
|
107
103
|
|
108
|
-
while array = lp.
|
104
|
+
while array = lp.read_array_line do
|
109
105
|
p "#{array[0].ljust(80)} #{array[1].rjust(25)}\n"
|
110
106
|
end
|
111
|
-
|
107
|
+
|
108
|
+
lp.parse_errors_and_stats(lp.read)
|
112
109
|
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
113
110
|
p "Statistics:\n"
|
114
111
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
@@ -140,4 +137,4 @@ open_query method as {'queryInfo' => true, 'iw' => true}.
|
|
140
137
|
|
141
138
|
lp.open_query('EVT', sql, nil, {'queryInfo' => true})
|
142
139
|
|
143
|
-
puts "#{lp.
|
140
|
+
puts "#{lp.queryInfo}"
|
data/GUIDE.txt
CHANGED
@@ -84,12 +84,12 @@ 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.read_array_line 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
|
92
|
+
are available.
|
93
93
|
|
94
94
|
lp.parse_errors_and_stats(lp.read)
|
95
95
|
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
data/History.txt
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
== 0.1.
|
1
|
+
== 0.1.3 / 2008-12-27
|
2
2
|
|
3
|
-
* Updated to
|
4
|
-
*
|
5
|
-
*
|
3
|
+
* Updated paths to find LogParser for 64-bit Windows installs (tested on Windows Server 2008)
|
4
|
+
* Added methods read_hash and read_array_line back in that were unintentionally dropped and broke the documentation / examples
|
5
|
+
* Updated documentation
|
6
|
+
|
7
|
+
== 0.1.1 / 2008-05-30
|
8
|
+
|
9
|
+
* Added better test coverage (100% coverage according to rcov)
|
6
10
|
|
7
11
|
== 0.1.0 / 2008-01-10
|
8
12
|
|
data/README.txt
CHANGED
@@ -51,8 +51,8 @@ Testing was done in the following environment:
|
|
51
51
|
|
52
52
|
* Microsoft Log Parser 2.2
|
53
53
|
|
54
|
-
Other software versions may work but are completely untested.
|
55
|
-
|
54
|
+
Other software versions may work but are completely untested. I have used and tested
|
55
|
+
the examples on Windows XP and Windows Server 2008.
|
56
56
|
|
57
57
|
== INSTALL:
|
58
58
|
|
@@ -70,6 +70,8 @@ locations:
|
|
70
70
|
|
71
71
|
* c:\Program Files\Log Parser 2.2\LogParser.exe (Default location when downloaded and installed without the IIS Resource kit)
|
72
72
|
|
73
|
+
* c:\Program Files (x86)\Log Parser 2.2\LogParser.exe (Default location for 64-bit Windows Server 2008 install)
|
74
|
+
|
73
75
|
* LogParser.exe on the path somewhere
|
74
76
|
|
75
77
|
If the LogParser.exe executable cannot be found, the "test_valid_executable"
|
data/Rakefile
CHANGED
@@ -5,6 +5,7 @@ require 'rubylogparser'
|
|
5
5
|
|
6
6
|
Hoe.new('rubylogparser', RubyLogParser::VERSION) do |p|
|
7
7
|
p.rubyforge_name = 'rubylogparser'
|
8
|
+
p.version = "0.1.3"
|
8
9
|
p.author = 'Jim Clark'
|
9
10
|
p.email = 'jimclark@ieee.org'
|
10
11
|
p.summary = "RubyLogParser provides a wrapper around Microsoft's Log Parser executable."
|
data/examples/event_log.rb
CHANGED
@@ -19,7 +19,7 @@ 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.read_array_line do
|
23
23
|
p "#{i}.".ljust(4) + " #{array[0].ljust(35)} #{array[1].rjust(8)}\n"
|
24
24
|
i += 1
|
25
25
|
end
|
@@ -27,6 +27,6 @@ end
|
|
27
27
|
lp.parse_errors_and_stats(lp.read)
|
28
28
|
|
29
29
|
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
30
|
-
p "
|
30
|
+
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
31
31
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
32
32
|
p "Time: " + (lp.execution_time.nil? ? "0" : "#{lp.execution_time}") + " seconds\n"
|
data/examples/files.rb
CHANGED
@@ -6,17 +6,16 @@ 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:/win*.* ORDER BY size DESC', 'CSV', nil)
|
10
10
|
|
11
11
|
i=1
|
12
|
-
while hash = lp.
|
13
|
-
p "#{i}. #{hash['Name'].ljust(60)} #{hash['Size'].rjust(12)}\n"
|
12
|
+
while hash = lp.read_hash do
|
13
|
+
p "#{i}.".ljust(4) + " #{hash['Name'].ljust(60)} #{hash['Size'].rjust(12)}\n"
|
14
14
|
i += 1
|
15
15
|
end
|
16
16
|
|
17
17
|
lp.parse_errors_and_stats(lp.read)
|
18
18
|
|
19
|
-
p "Parse errors:\n" + lp.parse_errors.to_s + "\n\n"
|
20
19
|
p "Processed: " + (lp.elements_processed.nil? ? "0" : "#{lp.elements_processed}") + "\n"
|
21
20
|
p "Output: " + (lp.elements_output.nil? ? "0" : "#{lp.elements_output}") + "\n"
|
22
21
|
p "Time: " + (lp.execution_time.nil? ? "0" : "#{lp.execution_time}") + " seconds\n"
|
data/examples/registry.rb
CHANGED
@@ -19,7 +19,7 @@ lp.open_query('REG', sql, 'CSV', {'e' => 100})
|
|
19
19
|
|
20
20
|
i=1
|
21
21
|
while array = lp.process_array_line(lp.readline) do
|
22
|
-
p "#{i}. #{array[0].ljust(80)} #{array[1].rjust(25)}\n"
|
22
|
+
p "#{i}.".ljust(5) + " #{array[0].ljust(80)} #{array[1].rjust(25)}\n"
|
23
23
|
i += 1
|
24
24
|
end
|
25
25
|
|
data/lib/rubylogparser.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
require 'csv'
|
17
17
|
|
18
18
|
class RubyLogParser
|
19
|
-
VERSION = "0.1.
|
19
|
+
VERSION = "0.1.3"
|
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
|
@@ -71,7 +71,7 @@ class RubyLogParser
|
|
71
71
|
def valid_executable(lp_executable = nil)
|
72
72
|
@logparser_exe = nil
|
73
73
|
if lp_executable.nil? then
|
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']
|
74
|
+
file_locations = ['c:\Program Files\IIS Resources\Log Parser 2.2\LogParser.exe', 'c:\Program Files\Log Parser 2.2\LogParser.exe', 'c:\Program Files (x86)\Log Parser 2.2\LogParser.exe', 'LogParser.exe']
|
75
75
|
else
|
76
76
|
file_locations = [ lp_executable ]
|
77
77
|
end
|
@@ -196,7 +196,7 @@ class RubyLogParser
|
|
196
196
|
# the data output is complete and anything that will follow are the errors
|
197
197
|
# or query statistics.
|
198
198
|
def process_line(line)
|
199
|
-
if line == "\r\n" then
|
199
|
+
if (line == "\r\n" || line =~ /Task completed with parse errors/i) then
|
200
200
|
self.error_flag = true # remaining output should now be error
|
201
201
|
return nil
|
202
202
|
else
|
@@ -307,13 +307,18 @@ class RubyLogParser
|
|
307
307
|
return data_array
|
308
308
|
end
|
309
309
|
|
310
|
+
# Often times, the easiest way to use the LogParser output is to parse a single
|
311
|
+
# line into a hash that is keyed by the field names. Once all LogParser output
|
312
|
+
# has been read, this will return nil.
|
313
|
+
def read_hash
|
314
|
+
self.data_hash(self.process_array_line(self.readline))
|
315
|
+
end
|
316
|
+
|
317
|
+
# Similar to read_hash, this method will parse a single return the LogParser
|
318
|
+
# output in an array. If no output remains, this will return nil.
|
319
|
+
def read_array_line
|
320
|
+
self.process_array_line(self.readline)
|
321
|
+
end
|
322
|
+
|
310
323
|
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
324
|
|
319
|
-
=end
|
data/test/test_rubylogparser.rb
CHANGED
@@ -134,4 +134,26 @@ class Test_RubyLogParser < Test::Unit::TestCase
|
|
134
134
|
assert_equal 2, temp.length
|
135
135
|
end
|
136
136
|
|
137
|
+
def test_read_hash
|
138
|
+
@logparser.cmd_options['i'] = 'EVT'
|
139
|
+
@logparser.cmd_options['sql'] = 'SELECT Top 1 SourceName INTO STDOUT From System'
|
140
|
+
@logparser.cmd_options['o'] = 'CSV'
|
141
|
+
@logparser.build_command_string(nil)
|
142
|
+
@logparser.field_definitions("SourceName")
|
143
|
+
@logparser.create_process
|
144
|
+
temp = @logparser.read_hash
|
145
|
+
assert_not_equal nil, temp['SourceName']
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_read_array_line
|
149
|
+
@logparser.cmd_options['i'] = 'EVT'
|
150
|
+
@logparser.cmd_options['sql'] = 'SELECT Top 1 SourceName INTO STDOUT From System'
|
151
|
+
@logparser.cmd_options['o'] = 'CSV'
|
152
|
+
@logparser.build_command_string(nil)
|
153
|
+
@logparser.field_definitions("SourceName")
|
154
|
+
@logparser.create_process
|
155
|
+
temp = @logparser.read_array_line
|
156
|
+
assert_not_equal nil, temp[0]
|
157
|
+
end
|
158
|
+
|
137
159
|
end
|
metadata
CHANGED
@@ -1,33 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: rubylogparser
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2008-06-06 00:00:00 -07:00
|
8
|
-
summary: RubyLogParser provides a wrapper around Microsoft's Log Parser executable.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: jimclark@ieee.org
|
12
|
-
homepage: http://rubyforge.org/projects/rubylogparser/
|
13
|
-
rubyforge_project: rubylogparser
|
14
|
-
description: RubyLogParser enables the output from Microsoft's Log Parser to be processed by Ruby data structures (arrays and hashes).
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.1.3
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Jim Clark
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-12-27 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.2
|
24
|
+
version:
|
25
|
+
description: RubyLogParser enables the output from Microsoft's Log Parser to be processed by Ruby data structures (arrays and hashes).
|
26
|
+
email: jimclark@ieee.org
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- EXAMPLES.txt
|
33
|
+
- GUIDE.txt
|
34
|
+
- History.txt
|
35
|
+
- Manifest.txt
|
36
|
+
- README.txt
|
31
37
|
files:
|
32
38
|
- EXAMPLES.txt
|
33
39
|
- GUIDE.txt
|
@@ -41,30 +47,32 @@ files:
|
|
41
47
|
- examples/registry.rb
|
42
48
|
- lib/rubylogparser.rb
|
43
49
|
- test/test_rubylogparser.rb
|
44
|
-
|
45
|
-
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://rubyforge.org/projects/rubylogparser/
|
52
|
+
post_install_message:
|
46
53
|
rdoc_options:
|
47
54
|
- --main
|
48
55
|
- README.txt
|
49
|
-
|
50
|
-
-
|
51
|
-
|
52
|
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
59
70
|
requirements: []
|
60
71
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 1.5.3
|
70
|
-
version:
|
72
|
+
rubyforge_project: rubylogparser
|
73
|
+
rubygems_version: 1.3.1
|
74
|
+
signing_key:
|
75
|
+
specification_version: 2
|
76
|
+
summary: RubyLogParser provides a wrapper around Microsoft's Log Parser executable.
|
77
|
+
test_files:
|
78
|
+
- test/test_rubylogparser.rb
|