nagios_parser 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.md CHANGED
@@ -1,7 +1,15 @@
1
1
  nagios_parser - ChangeLog
2
2
  =========================
3
3
 
4
- # next
4
+ # 1.2.0
5
+ * Add NagiosParser::Resource parser to parse Nagios resource
6
+ macro files.
7
+ * Add NagiosParser::Config parser to parse the Nagios main
8
+ configuration file.
9
+ * Ignore inline comments starting with ';' in the object
10
+ configuration files.
11
+
12
+ # 1.1.0
5
13
  * Remove hardcoded status types to make the parser less strict.
6
14
  * More Nagios 2.x/3.x status types. (mariussturm)
7
15
 
data/README.md CHANGED
@@ -8,6 +8,8 @@ files and a parser for the Nagios object definition files.
8
8
 
9
9
  * NagiosParser::Status::Parser
10
10
  * NagiosParser::Object::Parser
11
+ * NagiosParser::Config::Parser
12
+ * NagiosParser::Resource::Parser
11
13
 
12
14
  Both parsers return plain hashes and arrays. There are no special
13
15
  Nagios objects or something like that. That means you can create
@@ -100,6 +102,42 @@ This will print a data structure that looks like this.
100
102
  "host_name"=>"server1",
101
103
  "alias"=>"server1.example.com"}]}
102
104
 
105
+ ## Config Parser
106
+
107
+ require 'nagios_parser/config/parser'
108
+ require 'pp'
109
+
110
+ config = <<-CONFIG
111
+ log_file=/var/log/nagios3/nagios.log
112
+ status_update_interval=10
113
+ CONFIG
114
+
115
+ data = NagiosParser::Config::Parser.parse(config)
116
+ pp data
117
+
118
+ This will print a data structure that looks like this.
119
+
120
+ {"log_file"=>"/var/log/nagios3/nagios.log",
121
+ "status_update_interval"=>10}
122
+
123
+ ## Resource macro parser
124
+
125
+ require 'nagios_parser/resource/parser'
126
+ require 'pp'
127
+
128
+ resource = <<-RESOURCE
129
+ $USER1$=/usr/lib/nagios/plugins
130
+ $USER10$=mysqluser
131
+ RESOURCE
132
+
133
+ data = NagiosParser::Resource::Parser.parse(resource)
134
+ pp data
135
+
136
+ This will print a data structure that looks like this.
137
+
138
+ {"$USER10$"=>"mysqluser",
139
+ "$USER1$"=>"/usr/lib/nagios/plugins"}
140
+
103
141
  # Development
104
142
 
105
143
  The parsers are based on the racc parser generator. racc is needed
@@ -111,6 +149,8 @@ the Ruby files afterwards. There are two rake tasks to help with that.
111
149
 
112
150
  * `rake parser::status`
113
151
  * `rake parser::object`
152
+ * `rake parser::config`
153
+ * `rake parser::resource`
114
154
 
115
155
  The bundler gem is used to handle the development dependencies.
116
156
  Run `bundle install` to install them.
data/Rakefile CHANGED
@@ -14,6 +14,12 @@ namespace :parser do
14
14
  desc 'Generate the object parser with racc'
15
15
  task :object => [ 'lib/nagios_parser/object/parser.rb' ]
16
16
 
17
+ desc 'Generate the resource parser with racc'
18
+ task :resource => [ 'lib/nagios_parser/resource/parser.rb' ]
19
+
20
+ desc 'Generate the main config parser with racc'
21
+ task :config => [ 'lib/nagios_parser/config/parser.rb' ]
22
+
17
23
  rule '.rb' => '.y' do |target|
18
24
  sh "racc -o #{target.name} #{target.source}"
19
25
  end
@@ -0,0 +1,152 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.6
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+ require 'strscan'
10
+
11
+ module NagiosParser
12
+ module Config
13
+ class Parser < Racc::Parser
14
+
15
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 19)
16
+
17
+ def create_token(string)
18
+ result = []
19
+ scanner = StringScanner.new(string)
20
+
21
+ until scanner.empty?
22
+ case
23
+ when scanner.scan(/\s+/)
24
+ # ignore whitespace
25
+ when scanner.scan(/#[^\n]*/)
26
+ # ignore comments
27
+ when match = scanner.scan(/\w+\=/)
28
+ result << [:KEY, match.chop.gsub(/\s+$/, '')]
29
+ when match = scanner.scan(/\-?\d+$/)
30
+ result << [:VALUE, match.to_i]
31
+ when match = scanner.scan(/[^\n]+$/)
32
+ result << [:VALUE, match.gsub(/\s+$/, '')]
33
+ else
34
+ raise "Can't tokenize <#{scanner.peek(10)}>"
35
+ end
36
+ end
37
+
38
+ result << [false, false]
39
+ end
40
+
41
+ attr_accessor :token
42
+
43
+ def self.parse(string)
44
+ new.parse(string)
45
+ end
46
+
47
+ def parse(string)
48
+ @result = {}
49
+ @token = create_token(string)
50
+ do_parse
51
+ @result
52
+ end
53
+
54
+ def next_token
55
+ @token.shift
56
+ end
57
+ ...end parser.y/module_eval...
58
+ ##### State transition tables begin ###
59
+
60
+ racc_action_table = [
61
+ 5, 1, 1, 4, 7 ]
62
+
63
+ racc_action_check = [
64
+ 2, 0, 2, 1, 5 ]
65
+
66
+ racc_action_pointer = [
67
+ -1, 0, 0, nil, nil, 4, nil, nil ]
68
+
69
+ racc_action_default = [
70
+ -4, -4, -4, -1, -3, -4, -2, 8 ]
71
+
72
+ racc_goto_table = [
73
+ 3, 2, 6 ]
74
+
75
+ racc_goto_check = [
76
+ 2, 1, 2 ]
77
+
78
+ racc_goto_pointer = [
79
+ nil, 1, 0 ]
80
+
81
+ racc_goto_default = [
82
+ nil, nil, nil ]
83
+
84
+ racc_reduce_table = [
85
+ 0, 0, :racc_error,
86
+ 1, 5, :_reduce_none,
87
+ 2, 5, :_reduce_none,
88
+ 2, 6, :_reduce_3 ]
89
+
90
+ racc_reduce_n = 4
91
+
92
+ racc_shift_n = 8
93
+
94
+ racc_token_table = {
95
+ false => 0,
96
+ :error => 1,
97
+ :KEY => 2,
98
+ :VALUE => 3 }
99
+
100
+ racc_nt_base = 4
101
+
102
+ racc_use_result_var = true
103
+
104
+ Racc_arg = [
105
+ racc_action_table,
106
+ racc_action_check,
107
+ racc_action_default,
108
+ racc_action_pointer,
109
+ racc_goto_table,
110
+ racc_goto_check,
111
+ racc_goto_default,
112
+ racc_goto_pointer,
113
+ racc_nt_base,
114
+ racc_reduce_table,
115
+ racc_token_table,
116
+ racc_shift_n,
117
+ racc_reduce_n,
118
+ racc_use_result_var ]
119
+
120
+ Racc_token_to_s_table = [
121
+ "$end",
122
+ "error",
123
+ "KEY",
124
+ "VALUE",
125
+ "$start",
126
+ "assignments",
127
+ "assignment" ]
128
+
129
+ Racc_debug_parser = false
130
+
131
+ ##### State transition tables end #####
132
+
133
+ # reduce 0 omitted
134
+
135
+ # reduce 1 omitted
136
+
137
+ # reduce 2 omitted
138
+
139
+ module_eval(<<'.,.,', 'parser.y', 10)
140
+ def _reduce_3(val, _values, result)
141
+ @result[val[0]] = val[1]
142
+ result
143
+ end
144
+ .,.,
145
+
146
+ def _reduce_none(val, _values, result)
147
+ val[0]
148
+ end
149
+
150
+ end # class Parser
151
+ end # module Config
152
+ end # module NagiosParser
@@ -0,0 +1,59 @@
1
+ class NagiosParser::Config::Parser
2
+ token
3
+ KEY VALUE
4
+
5
+ rule
6
+ assignments
7
+ : assignment
8
+ | assignments assignment
9
+ ;
10
+ assignment
11
+ : KEY VALUE { @result[val[0]] = val[1] }
12
+ ;
13
+ end
14
+
15
+ ---- header
16
+ require 'strscan'
17
+
18
+ ---- inner
19
+
20
+ def create_token(string)
21
+ result = []
22
+ scanner = StringScanner.new(string)
23
+
24
+ until scanner.empty?
25
+ case
26
+ when scanner.scan(/\s+/)
27
+ # ignore whitespace
28
+ when scanner.scan(/#[^\n]*/)
29
+ # ignore comments
30
+ when match = scanner.scan(/\w+\=/)
31
+ result << [:KEY, match.chop.gsub(/\s+$/, '')]
32
+ when match = scanner.scan(/\-?\d+$/)
33
+ result << [:VALUE, match.to_i]
34
+ when match = scanner.scan(/[^\n]+$/)
35
+ result << [:VALUE, match.gsub(/\s+$/, '')]
36
+ else
37
+ raise "Can't tokenize <#{scanner.peek(10)}>"
38
+ end
39
+ end
40
+
41
+ result << [false, false]
42
+ end
43
+
44
+ attr_accessor :token
45
+
46
+ def self.parse(string)
47
+ new.parse(string)
48
+ end
49
+
50
+ def parse(string)
51
+ @result = {}
52
+ @token = create_token(string)
53
+ do_parse
54
+ @result
55
+ end
56
+
57
+ def next_token
58
+ @token.shift
59
+ end
@@ -46,7 +46,8 @@ def create_token(string)
46
46
  when (inside and match = scanner.scan(/\d+$/))
47
47
  result << [:VALUE, match.to_i]
48
48
  when (inside and match = scanner.scan(/[^\n\}]+/))
49
- result << [:VALUE, match.gsub(/\s+$/, '')]
49
+ # Make sure to ignore inline comments starting with ';'.
50
+ result << [:VALUE, match.split(';').first.gsub(/\s+$/, '')]
50
51
  else
51
52
  raise "Can't tokenize <#{scanner.peek(10)}>"
52
53
  end
@@ -64,7 +64,8 @@ def create_token(string)
64
64
  when (inside and match = scanner.scan(/\d+$/))
65
65
  result << [:VALUE, match.to_i]
66
66
  when (inside and match = scanner.scan(/[^\n\}]+/))
67
- result << [:VALUE, match.gsub(/\s+$/, '')]
67
+ # Make sure to ignore inline comments starting with ';'.
68
+ result << [:VALUE, match.split(';').first.gsub(/\s+$/, '')]
68
69
  else
69
70
  raise "Can't tokenize <#{scanner.peek(10)}>"
70
71
  end
@@ -0,0 +1,150 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.6
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+ require 'strscan'
10
+
11
+ module NagiosParser
12
+ module Resource
13
+ class Parser < Racc::Parser
14
+
15
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 19)
16
+
17
+ def create_token(string)
18
+ result = []
19
+ scanner = StringScanner.new(string)
20
+
21
+ until scanner.empty?
22
+ case
23
+ when scanner.scan(/\s+/)
24
+ # ignore whitespace
25
+ when scanner.scan(/#[^\n]*/)
26
+ # ignore comments
27
+ when match = scanner.scan(/\$\w+\$\s*\=/)
28
+ result << [:KEY, match.chop.gsub(/\s+$/, '')]
29
+ when match = scanner.scan(/[^\n]+/)
30
+ result << [:VALUE, match.gsub(/\s+$/, '')]
31
+ else
32
+ raise "Can't tokenize <#{scanner.peek(10)}>"
33
+ end
34
+ end
35
+
36
+ result << [false, false]
37
+ end
38
+
39
+ attr_accessor :token
40
+
41
+ def self.parse(string)
42
+ new.parse(string)
43
+ end
44
+
45
+ def parse(string)
46
+ @result = {}
47
+ @token = create_token(string)
48
+ do_parse
49
+ @result
50
+ end
51
+
52
+ def next_token
53
+ @token.shift
54
+ end
55
+ ...end parser.y/module_eval...
56
+ ##### State transition tables begin ###
57
+
58
+ racc_action_table = [
59
+ 5, 1, 1, 4, 7 ]
60
+
61
+ racc_action_check = [
62
+ 2, 0, 2, 1, 5 ]
63
+
64
+ racc_action_pointer = [
65
+ -1, 0, 0, nil, nil, 4, nil, nil ]
66
+
67
+ racc_action_default = [
68
+ -4, -4, -4, -1, -3, -4, -2, 8 ]
69
+
70
+ racc_goto_table = [
71
+ 3, 2, 6 ]
72
+
73
+ racc_goto_check = [
74
+ 2, 1, 2 ]
75
+
76
+ racc_goto_pointer = [
77
+ nil, 1, 0 ]
78
+
79
+ racc_goto_default = [
80
+ nil, nil, nil ]
81
+
82
+ racc_reduce_table = [
83
+ 0, 0, :racc_error,
84
+ 1, 5, :_reduce_none,
85
+ 2, 5, :_reduce_none,
86
+ 2, 6, :_reduce_3 ]
87
+
88
+ racc_reduce_n = 4
89
+
90
+ racc_shift_n = 8
91
+
92
+ racc_token_table = {
93
+ false => 0,
94
+ :error => 1,
95
+ :KEY => 2,
96
+ :VALUE => 3 }
97
+
98
+ racc_nt_base = 4
99
+
100
+ racc_use_result_var = true
101
+
102
+ Racc_arg = [
103
+ racc_action_table,
104
+ racc_action_check,
105
+ racc_action_default,
106
+ racc_action_pointer,
107
+ racc_goto_table,
108
+ racc_goto_check,
109
+ racc_goto_default,
110
+ racc_goto_pointer,
111
+ racc_nt_base,
112
+ racc_reduce_table,
113
+ racc_token_table,
114
+ racc_shift_n,
115
+ racc_reduce_n,
116
+ racc_use_result_var ]
117
+
118
+ Racc_token_to_s_table = [
119
+ "$end",
120
+ "error",
121
+ "KEY",
122
+ "VALUE",
123
+ "$start",
124
+ "assignments",
125
+ "assignment" ]
126
+
127
+ Racc_debug_parser = false
128
+
129
+ ##### State transition tables end #####
130
+
131
+ # reduce 0 omitted
132
+
133
+ # reduce 1 omitted
134
+
135
+ # reduce 2 omitted
136
+
137
+ module_eval(<<'.,.,', 'parser.y', 10)
138
+ def _reduce_3(val, _values, result)
139
+ @result[val[0]] = val[1]
140
+ result
141
+ end
142
+ .,.,
143
+
144
+ def _reduce_none(val, _values, result)
145
+ val[0]
146
+ end
147
+
148
+ end # class Parser
149
+ end # module Resource
150
+ end # module NagiosParser
@@ -0,0 +1,57 @@
1
+ class NagiosParser::Resource::Parser
2
+ token
3
+ KEY VALUE
4
+
5
+ rule
6
+ assignments
7
+ : assignment
8
+ | assignments assignment
9
+ ;
10
+ assignment
11
+ : KEY VALUE { @result[val[0]] = val[1] }
12
+ ;
13
+ end
14
+
15
+ ---- header
16
+ require 'strscan'
17
+
18
+ ---- inner
19
+
20
+ def create_token(string)
21
+ result = []
22
+ scanner = StringScanner.new(string)
23
+
24
+ until scanner.empty?
25
+ case
26
+ when scanner.scan(/\s+/)
27
+ # ignore whitespace
28
+ when scanner.scan(/#[^\n]*/)
29
+ # ignore comments
30
+ when match = scanner.scan(/\$\w+\$\s*\=/)
31
+ result << [:KEY, match.chop.gsub(/\s+$/, '')]
32
+ when match = scanner.scan(/[^\n]+/)
33
+ result << [:VALUE, match.gsub(/\s+$/, '')]
34
+ else
35
+ raise "Can't tokenize <#{scanner.peek(10)}>"
36
+ end
37
+ end
38
+
39
+ result << [false, false]
40
+ end
41
+
42
+ attr_accessor :token
43
+
44
+ def self.parse(string)
45
+ new.parse(string)
46
+ end
47
+
48
+ def parse(string)
49
+ @result = {}
50
+ @token = create_token(string)
51
+ do_parse
52
+ @result
53
+ end
54
+
55
+ def next_token
56
+ @token.shift
57
+ end
@@ -1,3 +1,3 @@
1
1
  module NagiosParser
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/nagios_parser.rb CHANGED
@@ -1,2 +1,4 @@
1
+ require 'nagios_parser/config/parser'
1
2
  require 'nagios_parser/object/parser'
3
+ require 'nagios_parser/resource/parser'
2
4
  require 'nagios_parser/status/parser'
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+ require 'nagios_parser/config/parser'
3
+
4
+ describe NagiosParser::Config::Parser do
5
+ let(:parser) { NagiosParser::Config::Parser.new }
6
+
7
+ describe ".parse" do
8
+ it "returns a hash of macro definitions" do
9
+ data = parser.parse('log_file=/var/log/nagios3/nagios.log')
10
+ data['log_file'].should == '/var/log/nagios3/nagios.log'
11
+ end
12
+ end
13
+
14
+ describe "#create_token" do
15
+ context "given a valid string" do
16
+ it "creates a valid token list" do
17
+ string = <<-RUBY
18
+ # LOG FILE
19
+ # This is the main log file where service and host events are logged
20
+ # for historical purposes. This should be the first option specified
21
+ # in the config file!!!
22
+
23
+ log_file=/var/log/nagios3/nagios.log
24
+ object_cache_file=/var/cache/nagios3/objects.cache
25
+
26
+ nagios_group=nagios
27
+
28
+ status_update_interval=10
29
+ RUBY
30
+
31
+ parser.create_token(string).should == [
32
+ [:KEY, 'log_file'], [:VALUE, '/var/log/nagios3/nagios.log'],
33
+ [:KEY, 'object_cache_file'], [:VALUE, '/var/cache/nagios3/objects.cache'],
34
+ [:KEY, 'nagios_group'], [:VALUE, 'nagios'],
35
+ [:KEY, 'status_update_interval'], [:VALUE, 10],
36
+ [false, false]
37
+ ]
38
+ end
39
+ end
40
+ end
41
+
42
+ describe "#next_token" do
43
+ it "shifts the next element off the token list" do
44
+ parser.token = [:one, :two, :three]
45
+ parser.next_token
46
+ parser.next_token.should == :two
47
+ end
48
+ end
49
+
50
+ describe "#parse" do
51
+ context "with a valid string" do
52
+ it "returns a hash of config key value pairs" do
53
+ string = <<-RUBY
54
+ external_command_buffer_slots=4096
55
+
56
+
57
+ # LOCK FILE
58
+ # This is the lockfile that Nagios will use to store its PID number
59
+ # in when it is running in daemon mode.
60
+
61
+ lock_file=/var/run/nagios3/nagios3.pid
62
+ event_broker_options=-1
63
+ RUBY
64
+
65
+ data = parser.parse(string)
66
+ data['external_command_buffer_slots'].should == 4096
67
+ data['lock_file'].should == '/var/run/nagios3/nagios3.pid'
68
+ data['event_broker_options'].should == -1
69
+ end
70
+ end
71
+
72
+ context "with an invalid config" do
73
+ it "will raise an exception" do
74
+ expect {
75
+ parser.parse('$foo=bar')
76
+ }.to raise_error
77
+ end
78
+ end
79
+ end
80
+ end
@@ -21,7 +21,7 @@ describe NagiosParser::Object::Parser do
21
21
  }
22
22
  define service {
23
23
  host_name foo.example.com
24
- service_description SUPERD
24
+ service_description SUPERD ; I like that!
25
25
  }
26
26
  RUBY
27
27
 
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+ require 'nagios_parser/resource/parser'
3
+
4
+ describe NagiosParser::Resource::Parser do
5
+ let(:parser) { NagiosParser::Resource::Parser.new }
6
+
7
+ describe ".parse" do
8
+ it "returns a hash of macro definitions" do
9
+ data = parser.parse('$USER1$=/usr/lib/nagios/plugins')
10
+ data['$USER1$'].should == '/usr/lib/nagios/plugins'
11
+ end
12
+ end
13
+
14
+ describe "#create_token" do
15
+ context "given a valid string" do
16
+ it "creates a valid token list" do
17
+ string = <<-RUBY
18
+ # This is the resource configuration
19
+ $USER1$=/usr/lib/nagios/plugins
20
+ $USER10$=mysqluser
21
+
22
+ $USER30$ = /bin
23
+ RUBY
24
+
25
+ parser.create_token(string).should == [
26
+ [:KEY, '$USER1$'], [:VALUE, '/usr/lib/nagios/plugins'],
27
+ [:KEY, '$USER10$'], [:VALUE, 'mysqluser'],
28
+ [:KEY, '$USER30$'], [:VALUE, '/bin'],
29
+ [false, false]
30
+ ]
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "#next_token" do
36
+ it "returns shifts the next element off the token list" do
37
+ parser.token = [:one, :two, :three]
38
+ parser.next_token
39
+ parser.next_token.should == :two
40
+ end
41
+ end
42
+
43
+ describe "#parse" do
44
+ context "with a valid string" do
45
+ it "returns a hash of resource macros" do
46
+ string = <<-RUBY
47
+ # This is the resource configuration
48
+ $USER1$=/usr/lib/nagios/plugins
49
+ $USER10$=mysqluser
50
+
51
+ $USER30$ = /bin
52
+ RUBY
53
+
54
+ data = parser.parse(string)
55
+ data['$USER1$'].should == '/usr/lib/nagios/plugins'
56
+ data['$USER10$'].should == 'mysqluser'
57
+ data['$USER30$'].should == '/bin'
58
+ end
59
+ end
60
+
61
+ context "with invalid resource macro" do
62
+ it "will raise an exception" do
63
+ expect {
64
+ parser.parse('foo=bar')
65
+ }.to raise_error
66
+ end
67
+ end
68
+ end
69
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nagios_parser
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 1.1.0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bernd Ahlers
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-09 00:00:00 +01:00
19
- default_executable:
18
+ date: 2011-06-20 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: rake
@@ -77,16 +76,21 @@ files:
77
76
  - README.md
78
77
  - Rakefile
79
78
  - lib/nagios_parser.rb
79
+ - lib/nagios_parser/config/parser.rb
80
+ - lib/nagios_parser/config/parser.y
80
81
  - lib/nagios_parser/object/parser.rb
81
82
  - lib/nagios_parser/object/parser.y
83
+ - lib/nagios_parser/resource/parser.rb
84
+ - lib/nagios_parser/resource/parser.y
82
85
  - lib/nagios_parser/status/parser.rb
83
86
  - lib/nagios_parser/status/parser.y
84
87
  - lib/nagios_parser/version.rb
85
88
  - nagios_parser.gemspec
89
+ - spec/nagios_parser/config/parser_spec.rb
86
90
  - spec/nagios_parser/object/parser_spec.rb
91
+ - spec/nagios_parser/resource/parser_spec.rb
87
92
  - spec/nagios_parser/status/parser_spec.rb
88
93
  - spec/spec_helper.rb
89
- has_rdoc: true
90
94
  homepage: http://rubygems.org/gems/nagios_parser
91
95
  licenses: []
92
96
 
@@ -116,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
120
  requirements: []
117
121
 
118
122
  rubyforge_project:
119
- rubygems_version: 1.4.2
123
+ rubygems_version: 1.8.5
120
124
  signing_key:
121
125
  specification_version: 3
122
126
  summary: parser lib for parsing Nagios status and config files