Sha256: a91a28a7125d0b674f7bfef322b070194516338f1c14608dac316eb9edb63fe5

Contents?: true

Size: 1.3 KB

Versions: 10

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

require 'riemann/tools'
require 'riemann/tools/mdstat_parser.tab'

module Riemann
  module Tools
    class Md
      include Riemann::Tools

      opt :devices, 'Devices to monitor', type: :strings, default: []
      opt :ignore_devices, 'Devices to ignore', type: :strings, default: []

      def mdstat_parser
        @mdstat_parser ||= MdstatParser.new
      end

      def tick
        status = File.read('/proc/mdstat')
        res = mdstat_parser.parse(status)

        res.each do |device, member_status|
          next unless report_device?(device)

          report(
            service: "mdstat #{device}",
            description: member_status,
            state: member_status =~ /\AU+\z/ ? 'ok' : 'critical',
          )
        end
      rescue Racc::ParseError => e
        report(
          service: 'mdstat',
          description: "Error parsing mdstat: #{e.message}",
          state: 'critical',
        )
      rescue Errno::ENOENT => e
        report(
          service: 'mdstat',
          description: e.message,
          state: 'critical',
        )
      end

      def report_device?(device)
        if !opts[:devices].empty?
          opts[:devices].include?(device)
        else
          !opts[:ignore_devices].include?(device)
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
riemann-tools-1.12.0 lib/riemann/tools/md.rb
riemann-tools-1.11.0 lib/riemann/tools/md.rb
riemann-tools-1.10.0 lib/riemann/tools/md.rb
riemann-tools-1.9.1 lib/riemann/tools/md.rb
riemann-tools-1.9.0 lib/riemann/tools/md.rb
riemann-tools-1.8.2 lib/riemann/tools/md.rb
riemann-tools-1.8.1 lib/riemann/tools/md.rb
riemann-tools-1.8.0 lib/riemann/tools/md.rb
riemann-tools-1.7.1 lib/riemann/tools/md.rb
riemann-tools-1.7.0 lib/riemann/tools/md.rb