class Riemann::Tools::Storm

Constants

CLUSTER_KEYS
TOPOLOGY_KEYS

Public Instance Methods

storm_api(path) click to toggle source
# File bin/riemann-storm, line 64
def storm_api(path)
    return get_json("#{opts[:storm_ui]}#{path}")
end
tick() click to toggle source
# File bin/riemann-storm, line 20
def tick
    begin
        storm_host = URI(opts[:storm_ui]).host
        summary = storm_api '/api/v1/cluster/summary'
        CLUSTER_KEYS.each do |key|
            if summary.key?(key)
                state = 'ok'
                state = 'warning' if key == 'slotsUsed' && (summary[key].to_f / summary['slotsTotal'].to_f >= 0.9)
                report({
                    :service => "storm #{key}",
                    :metric => summary[key],
                    :state => state,
                    :host => storm_host
                })
            end
        end

        topologies = storm_api '/api/v1/topology/summary'
        topologies['topologies'].each do |topology|
            svc = "storm-topology #{topology['name']}"
            if topology['status'] == 'ACTIVE'
                state = 'ok'
            elsif topology['status'] == 'KILLED'
                state = 'critical'
            else
                state = 'warning'
            end
            report({
                :service => "#{svc} status",
                :state => state,
                :host => storm_host
            })

            TOPOLOGY_KEYS.each do |key|
                report({
                    :service => "#{svc} #{key}",
                    :metric => topology[key],
                    :host => storm_host
                })
            end
        end
    end
end