Sha256: 298cc1b23cb9f3a12d26aaa4a32eee3f58249dee83a322a6f968c0dd16ac38e6

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require 'riemann/tools'

# Checks for open tcp ports.
# (c) Max Voit 2017
module Riemann
  module Tools
    class Portcheck
      include Riemann::Tools
      require 'socket'

      opt :hostname, 'Host, defaults to localhost', default: `hostname`.chomp
      opt :ports, "List of ports to check, e.g. '-r 80 443'", type: :ints

      def initialize
        super

        @hostname = opts.fetch(:hostname)
        @ports = opts.fetch(:ports)
      end

      def tick
        @ports.each do |thisport|
          # try opening tcp connection with 5s timeout;
          # if this fails, the port is considered closed
          portopen = begin
            Socket.tcp(@hostname, thisport, connect_timeout: 5) { true }
          rescue StandardError
            false
          end
          state = if portopen
                    'ok'
                  else
                    'critical'
                  end
          report(
            host: @hostname.to_s,
            service: "port #{thisport}",
            state: state.to_s,
            tags: ['portcheck'],
          )
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
riemann-tools-1.11.0 lib/riemann/tools/portcheck.rb