Class Nagios::Base
In: lib/puppet/external/nagios/base.rb
Parent: Object

The base class for all of our Nagios object types. Everything else is mostly just data.

Methods

[]   []=   attach   camelcase   create   decamelcase   each   eachtype   map   mapping   method_missing   name   name=   namevar   namevar   new   newtype   paramattr   parameter?   parammap   parent   setnamevar   setparameters   setsuperior   suppress   suppress?   to_ldif   to_s   to_s   type   type  

Included Modules

Enumerable

Classes and Modules

Class Nagios::Base::UnknownNagiosType

Attributes

att  [RW] 
derivatives  [RW] 
ldapbase  [RW] 
name  [RW] 
namevar  [W] 
ocs  [RW] 
parameters  [RW] 
superior  [R] 

Public Class methods

Attach one class to another.

[Source]

    # File lib/puppet/external/nagios/base.rb, line 20
20:     def self.attach(hash)
21:         @attach ||= {}
22:         hash.each do |n, v| @attach[n] = v end
23:     end

Convert a parameter to camelcase

[Source]

    # File lib/puppet/external/nagios/base.rb, line 26
26:     def self.camelcase(param)
27:         param.gsub(/_./) do |match|
28:             match.sub(/_/,'').capitalize
29:         end
30:     end

Create a new instance of a given class.

[Source]

    # File lib/puppet/external/nagios/base.rb, line 40
40:     def self.create(name, args = {})
41:         name = name.intern if name.is_a? String
42: 
43:         if @types.include?(name)
44:             @types[name].new(args)
45:         else
46:             raise UnknownNagiosType, "Unknown type %s" % name
47:         end
48:     end

Uncamelcase a parameter.

[Source]

    # File lib/puppet/external/nagios/base.rb, line 33
33:     def self.decamelcase(param)
34:         param.gsub(/[A-Z]/) do |match|
35:             "_" + match.downcase
36:         end
37:     end

Yield each type in turn.

[Source]

    # File lib/puppet/external/nagios/base.rb, line 51
51:     def self.eachtype
52:         @types.each do |name, type|
53:             yield [name, type]
54:         end
55:     end

Create a mapping.

[Source]

    # File lib/puppet/external/nagios/base.rb, line 58
58:     def self.map(hash)
59:         @map ||= {}
60:         hash.each do |n, v| @map[n] = v end
61:     end

Return a mapping (or nil) for a param

[Source]

    # File lib/puppet/external/nagios/base.rb, line 64
64:     def self.mapping(name)
65:         name = name.intern if name.is_a? String
66:         if defined? @map
67:             @map[name]
68:         else
69:             nil
70:         end
71:     end

Return the namevar for the canonical name.

[Source]

    # File lib/puppet/external/nagios/base.rb, line 74
74:     def self.namevar
75:         if defined? @namevar
76:             return @namevar
77:         else
78:             if parameter?(:name)
79:                 return :name
80:             elsif tmp = (self.name.to_s + "_name").intern and parameter?(tmp)
81:                 @namevar = tmp
82:                 return @namevar
83:             else
84:                 raise "Type %s has no name var" % self.name
85:             end
86:         end
87:     end

Initialize our object, optionally with a list of parameters.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 193
193:     def initialize(args = {})
194:         @parameters = {}
195: 
196:         args.each { |param,value|
197:             self[param] = value
198:         }
199:         if @namevar == :_naginator_name
200:           self['_naginator_name'] = self['name']
201:         end
202:     end

Create a new type.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 90
 90:     def self.newtype(name, &block)
 91:         name = name.intern if name.is_a? String
 92: 
 93:         @types ||= {}
 94: 
 95:         # Create the class, with the correct name.
 96:         t = Class.new(self)
 97:         t.name = name
 98: 
 99:         # Everyone gets this.  There should probably be a better way, and I
100:         # should probably hack the attribute system to look things up based on
101:         # this "use" setting, but, eh.
102:         t.parameters = [:use]
103: 
104:         const_set(name.to_s.capitalize,t)
105: 
106:         # Evaluate the passed block.  This should usually define all of the work.
107:         t.class_eval(&block)
108: 
109:         @types[name] = t
110:     end

Define both the normal case and camelcase method for a parameter

[Source]

     # File lib/puppet/external/nagios/base.rb, line 113
113:     def self.paramattr(name)
114:         camel = camelcase(name)
115:         param = name
116: 
117:         [name, camel].each do |method|
118:             define_method(method) do
119:                 @parameters[param]
120:             end
121: 
122:             define_method(method.to_s + "=") do |value|
123:                 @parameters[param] = value
124:             end
125:         end
126: 
127:     end

Is the specified name a valid parameter?

[Source]

     # File lib/puppet/external/nagios/base.rb, line 130
130:     def self.parameter?(name)
131:         name = name.intern if name.is_a? String
132:         return @parameters.include?(name)
133:     end

Manually set the namevar

[Source]

     # File lib/puppet/external/nagios/base.rb, line 136
136:     def self.setnamevar(name)
137:         name = name.intern if name.is_a? String
138:         @namevar = name
139:     end

Set the valid parameters for this class

[Source]

     # File lib/puppet/external/nagios/base.rb, line 142
142:     def self.setparameters(*array)
143:         @parameters += array
144:     end

Set the superior ldap object class. Seems silly to include this in this class, but, eh.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 148
148:     def self.setsuperior(name)
149:         @superior = name
150:     end

Parameters to suppress in output.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 153
153:     def self.suppress(name)
154:         @suppress ||= []
155:         @suppress << name
156:     end

Whether a given parameter is suppressed.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 159
159:     def self.suppress?(name)
160:         defined? @suppress and @suppress.include?(name)
161:     end

Return our name as the string.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 164
164:     def self.to_s
165:         self.name.to_s
166:     end

Return a type by name.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 169
169:     def self.type(name)
170:         name = name.intern if name.is_a? String
171: 
172:         @types[name]
173:     end

Public Instance methods

Convenience methods.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 176
176:     def [](param)
177:         send(param)
178:     end

Convenience methods.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 181
181:     def []=(param,value)
182:         send(param.to_s + "=", value)
183:     end

Iterate across all ofour set parameters.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 186
186:     def each
187:         @parameters.each { |param,value|
188:             yield(param,value)
189:         }
190:     end

Handle parameters like attributes.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 205
205:     def method_missing(mname, *args)
206:         pname = mname.to_s
207:         pname.sub!(/=/, '')
208: 
209:         if self.class.parameter?(pname)
210:             if pname =~ /A-Z/
211:                 pname = self.class.decamelcase(pname)
212:             end
213:             self.class.paramattr(pname)
214: 
215:             # Now access the parameters directly, to make it at least less
216:             # likely we'll end up in an infinite recursion.
217:             if mname.to_s =~ /=$/
218:                 @parameters[pname] = *args
219:             else
220:                 return @parameters[mname]
221:             end
222:         else
223:             super
224:         end
225:     end

Retrieve our name, through a bit of redirection.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 228
228:     def name
229:         send(self.class.namevar)
230:     end

This is probably a bad idea.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 233
233:     def name=(value)
234:         unless self.class.namevar.to_s == "name" 
235:             send(self.class.namevar.to_s + "=", value) 
236:         end    
237:     end

[Source]

     # File lib/puppet/external/nagios/base.rb, line 239
239:     def namevar
240:         return (self.type + "_name").intern
241:     end

[Source]

     # File lib/puppet/external/nagios/base.rb, line 243
243:     def parammap(param)
244:         unless defined? @map
245:             map = {
246:                 self.namevar => "cn"
247:             }
248:             if self.class.map
249:                 map.update(self.class.map)
250:             end
251:         end
252:         if map.include?(param)
253:             return map[param]
254:         else
255:             return "nagios-" + param.id2name.gsub(/_/,'-')
256:         end
257:     end

[Source]

     # File lib/puppet/external/nagios/base.rb, line 259
259:     def parent
260:         unless defined? self.class.attached
261:             puts "Duh, you called parent on an unattached class"
262:             return
263:         end
264: 
265:         klass,param = self.class.attached
266:         unless @parameters.include?(param)
267:             puts "Huh, no attachment param"
268:             return
269:         end
270:         klass[@parameters[param]]
271:     end

okay, this sucks how do i get my list of ocs?

[Source]

     # File lib/puppet/external/nagios/base.rb, line 275
275:     def to_ldif
276:         base = self.class.ldapbase
277:         str = self.dn + "\n"
278:         ocs = Array.new
279:         if self.class.ocs
280:             # i'm storing an array, so i have to flatten it and stuff
281:             kocs = self.class.ocs
282:             ocs.push(*kocs)
283:         end
284:         ocs.push "top"
285:         oc = self.class.to_s
286:         oc.sub!(/Nagios/,'nagios')
287:         oc.sub!(/::/,'')
288:         ocs.push oc
289:         ocs.each { |oc|
290:             str += "objectclass: " + oc + "\n"
291:         }
292:         @parameters.each { |name,value|
293:             if self.class.suppress.include?(name)
294:                 next
295:             end
296:             ldapname = self.parammap(name)
297:             str += ldapname + ": " + value + "\n"
298:         }
299:         str += "\n"
300:         str
301:     end

[Source]

     # File lib/puppet/external/nagios/base.rb, line 303
303:     def to_s
304:         str = "define #{self.type} {\n"
305: 
306:         self.each { |param,value|
307:             str += %{\t%-30s %s\n} % [ param,
308:                 if value.is_a? Array
309:                     value.join(",")
310:                 else
311:                     value
312:                 end
313:                 ]
314:         }
315: 
316:         str += "}\n"
317: 
318:         str
319:     end

The type of object we are.

[Source]

     # File lib/puppet/external/nagios/base.rb, line 322
322:     def type
323:         self.class.name
324:     end

[Validate]