bin/riemann-apache-status in riemann-tools-1.1.1 vs bin/riemann-apache-status in riemann-tools-1.2.0

- old
+ new

@@ -1,113 +1,8 @@ #!/usr/bin/env ruby # frozen_string_literal: true Process.setproctitle($PROGRAM_NAME) -# Collects Apache metrics and submits them to Riemann -# More information can be found at http://httpd.apache.org/docs/2.4/mod/mod_status.html - -# Removes whitespace from 'Total Accesses' and 'Total kBytes' for output to graphite - -require File.expand_path('../lib/riemann/tools', __dir__) - -module Riemann - module Tools - class ApacheStatus - include Riemann::Tools - require 'net/http' - require 'uri' - - opt :uri, 'Apache Server Status URI', default: 'http://localhost/server-status' - - def initialize - @uri = "#{URI.parse(opts[:uri])}?auto" - # Sample Response with ExtendedStatus On - # Total Accesses: 20643 - # Total kBytes: 36831 - # CPULoad: .0180314 - # Uptime: 43868 - # ReqPerSec: .470571 - # BytesPerSec: 859.737 - # BytesPerReq: 1827.01 - # BusyWorkers: 6 - # IdleWorkers: 94 - # Scoreboard: ___K_____K____________W_ - - @scoreboard_map = { - '_' => 'waiting', - 'S' => 'starting', - 'R' => 'reading', - 'W' => 'sending', - 'K' => 'keepalive', - 'D' => 'dns', - 'C' => 'closing', - 'L' => 'logging', - 'G' => 'graceful', - 'I' => 'idle', - '.' => 'open', - } - end - - def get_scoreboard_metrics(response) - results = Hash.new(0) - - response.slice! 'Scoreboard: ' - response.each_char do |char| - results[char] += 1 - end - results.transform_keys { |k| @scoreboard_map[k] } - end - - def report_metrics(metrics) - metrics.each do |k, v| - report( - service: "httpd #{k}", - metric: v.to_f, - state: 'ok', - tags: ['httpd'], - ) - end - end - - def connection - response = nil - begin - response = Net::HTTP.get(@uri) - rescue StandardError => e - report( - service: 'httpd health', - state: 'critical', - description: "Httpd connection error: #{e.class} - #{e.message}", - tags: ['httpd'], - ) - else - report( - service: 'httpd health', - state: 'ok', - description: 'Httpd connection status ok', - tags: ['httpd'], - ) - end - response - end - - def tick - return if (response = connection).nil? - - response.each_line do |line| - metrics = {} - - if line =~ /Scoreboard/ - metrics = get_scoreboard_metrics(line.strip) - else - key, value = line.strip.split(':') - metrics[key.gsub(/\s/, '')] = value - end - report_metrics(metrics) - end - end - end - end -end +require 'riemann/tools/apache_status' Riemann::Tools::ApacheStatus.run