tools/riemann-mesos/bin/riemann-mesos in riemann-tools-1.1.1 vs tools/riemann-mesos/bin/riemann-mesos in riemann-tools-1.2.0
- old
+ new
@@ -1,146 +1,8 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
Process.setproctitle($PROGRAM_NAME)
-require 'riemann/tools'
+require 'riemann/tools/mesos'
-module Riemann
- module Tools
- class Mesos
- include Riemann::Tools
-
- require 'faraday'
- require 'json'
- require 'uri'
-
- opt :read_timeout, 'Faraday read timeout', type: :int, default: 2
- opt :open_timeout, 'Faraday open timeout', type: :int, default: 1
- opt :path_prefix,
- 'Mesos path prefix for proxied installations e.g. "mesos" for target http://localhost/mesos/metrics/snapshot', default: '/'
- opt :mesos_host, 'Mesos host', default: 'localhost'
- opt :mesos_port, 'Mesos port', type: :int, default: 5050
-
- # Handles HTTP connections and GET requests safely
- def safe_get(uri)
- # Handle connection timeouts
- response = nil
- begin
- connection = Faraday.new(uri)
- response = connection.get do |req|
- req.options[:timeout] = options[:read_timeout]
- req.options[:open_timeout] = options[:open_timeout]
- end
- rescue StandardError => e
- report(
- host: uri.host,
- service: 'mesos health',
- state: 'critical',
- description: "HTTP connection error: #{e.class} - #{e.message}",
- )
- end
- response
- end
-
- def health_url
- path_prefix = options[:path_prefix]
- path_prefix[0] = '' if path_prefix[0] == '/'
- path_prefix[path_prefix.length - 1] = '' if path_prefix[path_prefix.length - 1] == '/'
- "http://#{options[:mesos_host]}:#{options[:mesos_port]}#{path_prefix.length.positive? ? '/' : ''}#{path_prefix}/metrics/snapshot"
- end
-
- def slaves_url
- path_prefix = options[:path_prefix]
- path_prefix[0] = '' if path_prefix[0] == '/'
- path_prefix[path_prefix.length - 1] = '' if path_prefix[path_prefix.length - 1] == '/'
- "http://#{options[:mesos_host]}:#{options[:mesos_port]}#{path_prefix.length.positive? ? '/' : ''}#{path_prefix}/master/slaves"
- end
-
- def tick
- tick_slaves
- uri = URI(health_url)
- response = safe_get(uri)
-
- return if response.nil?
-
- if response.status != 200
- report(
- host: uri.host,
- service: 'mesos health',
- state: 'critical',
- description: "HTTP connection error: #{response.status} - #{response.body}",
- )
- else
- # Assuming that a 200 will give json
- json = JSON.parse(response.body)
- state = 'ok'
-
- report(
- host: uri.host,
- service: 'mesos health',
- state: state,
- )
-
- json.each_pair do |k, v|
- report(
- host: uri.host,
- service: "mesos #{k}",
- metric: v,
- )
- end
- end
- end
-
- def tick_slaves
- uri = URI(slaves_url)
- response = safe_get(uri)
-
- return if response.nil?
-
- if response.status != 200
- report(
- host: uri.host,
- service: 'mesos health',
- state: 'critical',
- description: "HTTP connection error: #{response.status} - #{response.body}",
- )
- else
- # Assuming that a 200 will give json
- json = JSON.parse(response.body)
- state = 'ok'
-
- report(
- host: uri.host,
- service: 'mesos health',
- state: state,
- )
-
- json['slaves'].each do |slave|
- next unless slave.respond_to? 'each_pair'
-
- slave.each_pair do |k, v|
- if v.respond_to? 'each_pair'
- v.each_pair do |k1, v1|
- next unless v1.is_a? Numeric
-
- report(
- host: slave['hostname'],
- service: "mesos slave/#{k}/#{k1}",
- metric: v1,
- )
- end
- elsif v.is_a? Numeric
- report(
- host: slave['hostname'],
- service: "mesos slave/#{k}",
- metric: v,
- )
- end
- end
- end
- end
- end
- end
- end
-end
Riemann::Tools::Mesos.run