Sha256: 7c76dbe5810588582546de71643306a54c92630b60401394cbc73371c753cc00

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

module Telemetry
  module Snmp
    module Collector
      class << self
        def loop_devices
          count = 0
          Telemetry::Snmp::Data::Model::Device.where(:active).order(:last_polled).each do |row|
            break if count >= 10
            next if row.values[:last_polled].to_i + row.values[:frequency] > Time.now.to_i
            next if device_locked?(row.values[:id])

            Telemetry::Logger.info "Grabbing metrics for #{row.values[:hostname]}"
            device = Telemetry::Snmp::DeviceCollector.new(row.values[:hostname])
            device.async.collect
            count += 1
          end
        end

        def poll_next_device
          Telemetry::Snmp::Data::Model::Device.where(:active).order(:last_polled).each do |row|
            next if row.values[:last_polled].to_i + row.values[:frequency] > Time.now.to_i
            next if device_locked?(row.values[:id])

            Telemetry::Logger.info "Grabbing metrics for #{row.values[:hostname]}"
            collect(row.values[:id])
            break
          rescue StandardError => e
            Telemetry::Logger.exception(e, level: 'error')
          end
        end

        def unlock_expired_devices
          Telemetry::Snmp::Data::Model::DeviceLock.each do |row|
            next if row.values[:expires] < Sequel::CURRENT_TIMESTAMP

            Telemetry::Logger.warn "removing lock for #{row.values[:hostname]}"
            row.delete
          end
        end

        def device_locked?(device_id)
          Telemetry::Snmp::Data::Model::DeviceLock.where(device_id: device_id).count.positive?
        end

        def device_unlocked?(device_id)
          !device_locked?(device_id)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
telemetry-snmp-0.3.0 lib/telemetry/snmp/collector.rb