# File lib/snmp2mkr/discoverer.rb, line 37 def primary_vhost @primary_vhost ||= Vhost.new( name: host.name, roles: host.definition.roles, metrics: host.metric_definitions + discover_metrics(host.metric_discoveries), mib: mib ) end
class Snmp2mkr::Discoverer
Attributes
host[R]
host_manager[R]
logger[R]
mib[R]
Public Class Methods
new(host, host_manager: nil, logger: Logger.new(File::NULL), mib: Mib.default)
click to toggle source
# File lib/snmp2mkr/discoverer.rb, line 9 def initialize(host, host_manager: nil, logger: Logger.new(File::NULL), mib: Mib.default) @host = host @host_manager = host_manager @logger = logger @mib = mib end
Public Instance Methods
inspect()
click to toggle source
# File lib/snmp2mkr/discoverer.rb, line 16 def inspect "#<#{self.class}:#{'%x' % __id__}, #{host.name.inspect}>" end
perform!()
click to toggle source
# File lib/snmp2mkr/discoverer.rb, line 22 def perform! if host_manager host_manager.set_vhosts(host.name, vhosts) end vhosts end
primary_vhost()
click to toggle source
snmp_trees()
click to toggle source
# File lib/snmp2mkr/discoverer.rb, line 46 def snmp_trees @snmp_trees ||= host.snmp do |snmp| oids = [*host.metric_discoveries.values, *host.vhost_discoveries.values]. compact. flat_map { |_| _.keys.values.map(&:evaluate) }. uniq. map { |_| Snmp2mkr::Oid.new(mib.name_to_oid(_), name: _) }. uniq. sort_by { |_| -_.to_a.size } oids.map do |oid| [oid.to_s, snmp.subtree(oid).to_a] end.to_h end end
vhosts()
click to toggle source
# File lib/snmp2mkr/discoverer.rb, line 30 def vhosts @vhosts ||= [ primary_vhost, *discover_vhosts(host.vhost_discoveries), ] end
Private Instance Methods
discover_metrics(rules)
click to toggle source
# File lib/snmp2mkr/discoverer.rb, line 64 def discover_metrics(rules) rules.each_value.flat_map do |rule| rule_keys = rule.keys.map { |k, confoid| [k, Snmp2mkr::Oid.new(confoid.evaluate, mib: mib)] } primary_oid = rule_keys.first.last.to_s snmp_trees[primary_oid].flat_map do |index_vb| index = index_vb.oid.index_of(primary_oid) keys = rule_keys.map do |k, oid| [k, snmp_trees[oid.to_s].find{ |vb| vb.oid.index_of(oid) == index }.value.to_s] end.to_h keys['index'] = index rule.metrics.bind_context(keys).evaluate.values end end end
discover_vhosts(rules)
click to toggle source
# File lib/snmp2mkr/discoverer.rb, line 81 def discover_vhosts(rules) rules.each.flat_map do |rule_name, rule| rule_keys = rule.keys.map { |k, confoid| [k, Snmp2mkr::Oid.new(confoid.evaluate, mib: mib)] } primary_oid = rule_keys.first.last.to_s snmp_trees[primary_oid].flat_map do |index_vb| index = index_vb.oid.index_of(primary_oid) keys = rule_keys.map do |k, oid| [k, snmp_trees[oid.to_s].find{ |vb| vb.oid.index_of(oid) == index }.value.to_s] end.to_h keys['index'] = index bind_rule = rule.bind_context(keys) Vhost.new( name: bind_rule.name.evaluate, roles: bind_rule.roles.map(&:evaluate), metrics: bind_rule.metrics.evaluate.values, discovery_name: rule_name, ) end end end