nagios_config 0.0.1 → 0.0.2
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/lib/nagios_config/formater.rb +2 -2
- data/lib/nagios_config/main.rb +72 -0
- data/lib/nagios_config/parser.rb +67 -63
- data/lib/nagios_config.rb +2 -1
- metadata +5 -4
@@ -47,8 +47,8 @@ module NagiosConfig
|
|
47
47
|
|
48
48
|
def format_Define(define)
|
49
49
|
buffer << "define "
|
50
|
-
name_width = define.variables.map
|
51
|
-
value_width = define.variables.map
|
50
|
+
name_width = define.variables.map {|e| e.name}.map {|e| e.value}.map {|e| e.length}.max || 0
|
51
|
+
value_width = define.variables.map {|e| e.val}.map {|e| e.value}.map {|e| e.length}.max || 0
|
52
52
|
variable_width = define_indent + define_name_width + name_width + value_width
|
53
53
|
|
54
54
|
self.define_name_width += name_width
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module NagiosConfig
|
2
|
+
class Main
|
3
|
+
attr_accessor :variables, :objects
|
4
|
+
|
5
|
+
def initialize(variables={}, objects=[])
|
6
|
+
self.variables = Hash[variables.map {|k,v| [k.to_sym,v]}]
|
7
|
+
self.objects = objects
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.from_node(node)
|
11
|
+
instance = new
|
12
|
+
object_store = instance.objects
|
13
|
+
node.nodes.each do |node|
|
14
|
+
if node.is_a?(NagiosConfig::Variable)
|
15
|
+
name = node.name.value
|
16
|
+
value = node.val.value
|
17
|
+
case instance[name]
|
18
|
+
when nil
|
19
|
+
instance[name] = value
|
20
|
+
when Array
|
21
|
+
instance[name].push(value)
|
22
|
+
else
|
23
|
+
instance[name] = [instance[name], value]
|
24
|
+
end
|
25
|
+
elsif node.is_a?(NagiosConfig::Define)
|
26
|
+
NagiosConfig::Object.from_node(node, object_store)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
instance
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.parse(io, include_comments=false)
|
33
|
+
from_node(NagiosConfig::Parser.new(!include_comments).parse(io))
|
34
|
+
end
|
35
|
+
|
36
|
+
def [](name)
|
37
|
+
variables[name.to_sym]
|
38
|
+
end
|
39
|
+
|
40
|
+
def []=(name, value)
|
41
|
+
variables[name.to_sym] = value
|
42
|
+
end
|
43
|
+
|
44
|
+
def objects(of_type=nil)
|
45
|
+
return @objects unless of_type
|
46
|
+
of_type = of_type.to_sym
|
47
|
+
objects.select {|obj| obj.type == of_type}
|
48
|
+
end
|
49
|
+
|
50
|
+
def ==(other)
|
51
|
+
other.is_a?(self.class) && other.variables == variables &&
|
52
|
+
other.objects == objects
|
53
|
+
end
|
54
|
+
|
55
|
+
def inspect
|
56
|
+
"#<#{self.class.name}:#{object_id} @variables=#{variables.inspect}, " <<
|
57
|
+
"@objects=#{objects.class.name}:#{objects.object_id}" <<
|
58
|
+
"(#{objects.length} items)>"
|
59
|
+
end
|
60
|
+
|
61
|
+
def method_missing(name, *args)
|
62
|
+
if name.to_s !~ /=$/ && args.empty?
|
63
|
+
self[name.to_sym]
|
64
|
+
elsif name.to_s =~ /=$/ && args.length == 1
|
65
|
+
self[name.to_s.chomp("=").to_sym] = args.first
|
66
|
+
else
|
67
|
+
super
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
data/lib/nagios_config/parser.rb
CHANGED
@@ -5,46 +5,50 @@ require 'events'
|
|
5
5
|
|
6
6
|
module NagiosConfig
|
7
7
|
class Parser
|
8
|
-
attr_accessor :scanner, :state
|
8
|
+
attr_accessor :scanner, :state
|
9
9
|
include Events::Emitter
|
10
10
|
|
11
|
-
|
11
|
+
NEWLINE = "\n".freeze
|
12
|
+
EQUALS = "=".freeze
|
13
|
+
OPEN_BRACE = "{".freeze
|
14
|
+
|
15
|
+
def initialize(ignore_comments=false)
|
12
16
|
@state = :body
|
13
|
-
|
14
|
-
|
17
|
+
@scanner = StringScanner.new("")
|
18
|
+
@value_buffer = ""
|
19
|
+
@ignore_comments = ignore_comments
|
15
20
|
end
|
16
21
|
|
17
22
|
def parse(io)
|
18
23
|
root = NagiosConfig::Config.new
|
19
|
-
|
24
|
+
current = root
|
20
25
|
current_variable = nil
|
21
26
|
on(:comment) do |comment|
|
22
|
-
|
23
|
-
end
|
27
|
+
current.add_node(NagiosConfig::Comment.new(comment))
|
28
|
+
end unless @ignore_comments
|
24
29
|
on(:whitespace) do |whitespace|
|
25
|
-
|
26
|
-
end
|
30
|
+
current.add_node(NagiosConfig::Whitespace.new(whitespace))
|
31
|
+
end unless @ignore_comments
|
27
32
|
on(:trailing_comment) do |comment|
|
28
|
-
|
29
|
-
end
|
33
|
+
current.nodes.last.add_node(NagiosConfig::TrailingComment.new(comment))
|
34
|
+
end unless @ignore_comments
|
30
35
|
on(:name) do |name|
|
31
36
|
current_variable = NagiosConfig::Variable.new
|
32
37
|
current_variable.add_node(NagiosConfig::Name.new(name))
|
33
|
-
|
38
|
+
current.add_node(current_variable)
|
34
39
|
end
|
35
40
|
on(:value) do |value|
|
36
41
|
current_variable.add_node(NagiosConfig::Value.new(value))
|
37
|
-
current_variable = nil
|
38
42
|
end
|
39
43
|
on(:begin_define) do
|
40
|
-
|
41
|
-
root.add_node(
|
44
|
+
current = NagiosConfig::Define.new
|
45
|
+
root.add_node(current)
|
42
46
|
end
|
43
47
|
on(:type) do |type|
|
44
|
-
|
48
|
+
current.add_node(NagiosConfig::Type.new(type))
|
45
49
|
end
|
46
50
|
on(:finish_define) do
|
47
|
-
|
51
|
+
current = root
|
48
52
|
end
|
49
53
|
stream_parse(io)
|
50
54
|
root
|
@@ -58,10 +62,8 @@ module NagiosConfig
|
|
58
62
|
end
|
59
63
|
|
60
64
|
def <<(string)
|
61
|
-
scanner
|
62
|
-
|
63
|
-
scanner << string
|
64
|
-
self.state = send(state)
|
65
|
+
@scanner << string
|
66
|
+
@state = send(@state)
|
65
67
|
end
|
66
68
|
|
67
69
|
private
|
@@ -71,59 +73,61 @@ module NagiosConfig
|
|
71
73
|
alias start body
|
72
74
|
|
73
75
|
def empty_line
|
74
|
-
whitespace = scanner.scan(/[ \t]*\n/)
|
76
|
+
whitespace = @scanner.scan(/[ \t]*\n/)
|
75
77
|
if whitespace
|
76
|
-
emit(:whitespace, whitespace)
|
77
|
-
in_define ? definition_body : body
|
78
|
-
elsif in_define && whitespace = scanner.scan(/[ \t]*(?=;)/) && trailing_comment
|
79
|
-
emit(:whitespace, whitespace)
|
78
|
+
emit(:whitespace, whitespace) unless @ignore_comments
|
79
|
+
@in_define ? definition_body : body
|
80
|
+
elsif @in_define && whitespace = @scanner.scan(/[ \t]*(?=;)/) && trailing_comment
|
81
|
+
emit(:whitespace, whitespace) unless @ignore_comments
|
80
82
|
definition_body
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
84
86
|
def leading_whitespace
|
85
|
-
if scanner.
|
87
|
+
if @scanner.skip(/[ \t]+[^\s]/)
|
86
88
|
raise ParseError.new("leading whitespace not allowed")
|
87
89
|
end
|
88
90
|
end
|
89
91
|
|
90
92
|
def comment
|
91
|
-
comment = scanner.scan(/[ \t]
|
93
|
+
comment = @scanner.scan(/[ \t]*#[^\n]*\n/)
|
92
94
|
if comment
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
95
|
+
if !@ignore_comments
|
96
|
+
comment.lstrip!
|
97
|
+
comment.slice!(0)
|
98
|
+
comment.chomp!(NEWLINE)
|
99
|
+
emit(:comment, comment)
|
100
|
+
end
|
101
|
+
@in_define ? definition_body : body
|
102
|
+
elsif @scanner.check(/#/)
|
99
103
|
:comment
|
100
104
|
end
|
101
105
|
end
|
102
106
|
|
103
107
|
def name
|
104
|
-
name = scanner.scan(/[^\s=]+=/)
|
108
|
+
name = @scanner.scan(/[^\s=]+=/)
|
105
109
|
if name
|
106
|
-
name.chomp!(
|
110
|
+
name.chomp!(EQUALS)
|
107
111
|
emit(:name, name)
|
108
112
|
value
|
109
|
-
elsif scanner.
|
113
|
+
elsif @scanner.skip(/[^\n]+\n/)
|
110
114
|
raise ParseError.new("expected variable definition")
|
111
|
-
elsif scanner.check(/[^\s]+/) &&
|
115
|
+
elsif @scanner.check(/[^\s]+/) && !@scanner.check(/d(e(f(i(n(e?))?)?)?)?\Z/)
|
112
116
|
:name
|
113
117
|
end
|
114
118
|
end
|
115
119
|
|
116
120
|
def value
|
117
|
-
value = scanner.scan(
|
121
|
+
value = @scanner.scan(/[^\n]*\n/)
|
118
122
|
if value
|
119
|
-
value = value_buffer + value
|
120
|
-
value.chomp!(
|
123
|
+
value = @value_buffer + value
|
124
|
+
value.chomp!(NEWLINE)
|
121
125
|
raise ParseError.new("value expected") if value.empty?
|
122
126
|
emit(:value, value)
|
123
|
-
|
127
|
+
@value_buffer = ""
|
124
128
|
body
|
125
|
-
elsif value = scanner.scan(/.+/)
|
126
|
-
value_buffer << value
|
129
|
+
elsif value = @scanner.scan(/.+/)
|
130
|
+
@value_buffer << value
|
127
131
|
:value
|
128
132
|
else
|
129
133
|
:value
|
@@ -131,22 +135,22 @@ module NagiosConfig
|
|
131
135
|
end
|
132
136
|
|
133
137
|
def definition
|
134
|
-
if scanner.skip(/define[ \t]/)
|
138
|
+
if @scanner.skip(/define[ \t]/)
|
135
139
|
emit(:begin_define)
|
136
|
-
|
140
|
+
@in_define = true
|
137
141
|
type
|
138
142
|
end
|
139
143
|
end
|
140
144
|
|
141
145
|
def type
|
142
|
-
type = scanner.scan(/[^;{]+[ \t]*\{[ \t]*\n/)
|
146
|
+
type = @scanner.scan(/[^;{]+[ \t]*\{[ \t]*\n/)
|
143
147
|
if type
|
144
148
|
type.strip!
|
145
|
-
type.chomp!(
|
149
|
+
type.chomp!(OPEN_BRACE)
|
146
150
|
type.strip!
|
147
151
|
emit(:type, type)
|
148
152
|
definition_body
|
149
|
-
elsif scanner.check(/([^;{]+[ \t]*(\{[ \t]*)?)?\Z/)
|
153
|
+
elsif @scanner.check(/([^;{]+[ \t]*(\{[ \t]*)?)?\Z/)
|
150
154
|
:type
|
151
155
|
else
|
152
156
|
raise ParseError.new("type expected")
|
@@ -158,29 +162,29 @@ module NagiosConfig
|
|
158
162
|
end
|
159
163
|
|
160
164
|
def definition_name
|
161
|
-
name = scanner.scan(/[ \t]*[^\s;#]+[ \t]+/)
|
165
|
+
name = @scanner.scan(/[ \t]*[^\s;#]+[ \t]+/)
|
162
166
|
if name
|
163
167
|
name.strip!
|
164
168
|
emit(:name, name)
|
165
169
|
definition_value
|
166
|
-
elsif scanner.check(/[ \t]*[^\s#;}]+\Z/)
|
170
|
+
elsif @scanner.check(/[ \t]*[^\s#;}]+\Z/)
|
167
171
|
:definition_name
|
168
|
-
elsif scanner.
|
172
|
+
elsif @scanner.skip(/[ \t]*[^\s#;]+\n/)
|
169
173
|
raise ParseError.new("value expected")
|
170
174
|
end
|
171
175
|
end
|
172
176
|
|
173
177
|
def definition_value
|
174
|
-
value = scanner.scan(/[^\n;#]*(?=(\n|;))/)
|
178
|
+
value = @scanner.scan(/[^\n;#]*(?=(\n|;))/)
|
175
179
|
if value
|
176
|
-
value = value_buffer + value
|
180
|
+
value = @value_buffer + value
|
177
181
|
value.strip!
|
178
182
|
raise ParseError.new("value expected") if value.empty?
|
179
183
|
emit(:value, value)
|
180
|
-
|
184
|
+
@value_buffer = ""
|
181
185
|
after_value
|
182
|
-
elsif value = scanner.scan(/[^\n;#]+/)
|
183
|
-
value_buffer << value
|
186
|
+
elsif value = @scanner.scan(/[^\n;#]+/)
|
187
|
+
@value_buffer << value
|
184
188
|
:definition_value
|
185
189
|
else
|
186
190
|
:definition_value
|
@@ -188,7 +192,7 @@ module NagiosConfig
|
|
188
192
|
end
|
189
193
|
|
190
194
|
def after_value
|
191
|
-
if scanner.skip(/[ \t]*\n/) || trailing_comment
|
195
|
+
if @scanner.skip(/[ \t]*\n/) || trailing_comment
|
192
196
|
definition_body
|
193
197
|
else
|
194
198
|
:after_value
|
@@ -196,18 +200,18 @@ module NagiosConfig
|
|
196
200
|
end
|
197
201
|
|
198
202
|
def finish_definition
|
199
|
-
if scanner.
|
203
|
+
if @scanner.skip(/[ \t]*\}[ \t]*\n/)
|
200
204
|
emit(:finish_define)
|
201
|
-
|
205
|
+
@in_define = false
|
202
206
|
body
|
203
207
|
end
|
204
208
|
end
|
205
209
|
|
206
210
|
def trailing_comment
|
207
|
-
trailing_comment = scanner.scan(/[ \t]
|
208
|
-
if trailing_comment
|
211
|
+
trailing_comment = @scanner.scan(/[ \t]*;[^\n]*\n/)
|
212
|
+
if trailing_comment && !@ignore_comments
|
209
213
|
trailing_comment.strip!
|
210
|
-
trailing_comment.chomp!(
|
214
|
+
trailing_comment.chomp!(NEWLINE)
|
211
215
|
trailing_comment.slice!(0)
|
212
216
|
emit(:trailing_comment, trailing_comment)
|
213
217
|
end
|
data/lib/nagios_config.rb
CHANGED
@@ -4,4 +4,5 @@ require File.dirname(__FILE__) + "/nagios_config/ast"
|
|
4
4
|
require File.dirname(__FILE__) + "/nagios_config/parser"
|
5
5
|
require File.dirname(__FILE__) + "/nagios_config/formater"
|
6
6
|
require File.dirname(__FILE__) + "/nagios_config/builder"
|
7
|
-
require File.dirname(__FILE__) + "/nagios_config/object"
|
7
|
+
require File.dirname(__FILE__) + "/nagios_config/object"
|
8
|
+
require File.dirname(__FILE__) + "/nagios_config/main"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nagios_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matthew Sadler
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-03-31 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -47,6 +47,7 @@ files:
|
|
47
47
|
- lib/nagios_config/builder.rb
|
48
48
|
- lib/nagios_config/errors.rb
|
49
49
|
- lib/nagios_config/formater.rb
|
50
|
+
- lib/nagios_config/main.rb
|
50
51
|
- lib/nagios_config/node.rb
|
51
52
|
- lib/nagios_config/object.rb
|
52
53
|
- lib/nagios_config/parser.rb
|