Sha256: e963cf995c3936236f58f17fb4a9fba765f763ad374a4c462792979e00fb5a19

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

# find and require all check modules
Gem.find_files('hcheck/checks/*.rb').each do |check_file|
  require "hcheck/checks/#{File.basename(check_file)}"
end

module Hcheck
  class Configuration
    # Main service class
    # One to one servcie class is created from hcheck.yml top level keys
    # includes corresponsing check module; which includes status method
    class Service
      attr_reader :name, :check_not_available

      NOT_IMPLEMENTED_MSG = 'Check not implemented for this service'

      def initialize(service, options)
        @name = service.to_s
        @check = options.delete('check')
        @options = options.symbolize_keys
        if mod = load_mod
          singleton_class.send(:include, mod)
        else
          @check_not_available = true
        end
      end

      def check
        {
          name: @name,
          desc: @check,
          status: @check_not_available ? NOT_IMPLEMENTED_MSG : check_status
        }
      end

      private

      def check_status
        status(@options)
        'ok'
      rescue StandardError => e
        Hcheck.logger.error "[HCheck] #{e.class.name} #{e.message}"
        'bad'
      end

      def load_mod
        Hcheck::Checks.const_get(@name.capitalize)
      rescue NameError
        nil
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hcheck-0.1.1 lib/hcheck/configuration/service.rb