lib/splash/logs.rb in prometheus-splash-0.5.0 vs lib/splash/logs.rb in prometheus-splash-0.5.2

- old
+ new

@@ -1,68 +1,70 @@ # coding: utf-8 module Splash - class LogScanner - include Splash::Constants - include Splash::Config + module Logs + class LogScanner + include Splash::Constants + include Splash::Config - # LogScanner Constructor - # return [LogScanner] - def initialize - @logs_target = get_config.logs - @config = get_config - @registry = Prometheus::Client.registry - @metric_count = Prometheus::Client::Gauge.new(:logerrors, docstring: 'SPLASH metric log error', labels: [:log ]) - @metric_missing = Prometheus::Client::Gauge.new(:logmissing, docstring: 'SPLASH metric log missing', labels: [:log ]) - @metric_lines = Prometheus::Client::Gauge.new(:loglines, docstring: 'SPLASH metric log lines numbers', labels: [:log ]) - @registry.register(@metric_count) - @registry.register(@metric_missing) - @registry.register(@metric_lines) - end + # LogScanner Constructor + # return [LogScanner] + def initialize + @logs_target = get_config.logs + @config = get_config + @registry = Prometheus::Client::Registry::new + @metric_count = Prometheus::Client::Gauge.new(:logerrors, docstring: 'SPLASH metric log error', labels: [:log ]) + @metric_missing = Prometheus::Client::Gauge.new(:logmissing, docstring: 'SPLASH metric log missing', labels: [:log ]) + @metric_lines = Prometheus::Client::Gauge.new(:loglines, docstring: 'SPLASH metric log lines numbers', labels: [:log ]) + @registry.register(@metric_count) + @registry.register(@metric_missing) + @registry.register(@metric_lines) + end - # start log analyse for log target in config - def analyse - @logs_target.each do |record| - record[:count]=0 if record[:count].nil? - record[:status] = :clean if record[:status].nil? - if File.exist?(record[:log]) then - record[:count] = File.readlines(record[:log]).grep(/#{record[:pattern]}/).size - record[:status] = :matched if record[:count] > 0 - record[:lines] = `wc -l "#{record[:log]}"`.strip.split(/\s+/)[0].to_i unless record[:status] == :missing - else - record[:status] = :missing + # start log analyse for log target in config + def analyse + @logs_target.each do |record| + record[:count]=0 if record[:count].nil? + record[:status] = :clean if record[:status].nil? + if File.exist?(record[:log]) then + record[:count] = File.readlines(record[:log]).grep(/#{record[:pattern]}/).size + record[:status] = :matched if record[:count] > 0 + record[:lines] = `wc -l "#{record[:log]}"`.strip.split(/\s+/)[0].to_i unless record[:status] == :missing + else + record[:status] = :missing + end end + return {:case => :quiet_exit } end - return {:case => :quiet_exit } - end - # pseudo-accessor on @logs_target - def output - return @logs_target - end + # pseudo-accessor on @logs_target + def output + return @logs_target + end - # start notification on prometheus for metric logerrors, logmissing; loglines - def notify(options = {}) - log = get_logger - unless verify_service host: @config.prometheus_pushgateway_host ,port: @config.prometheus_pushgateway_port then - return { :case => :service_dependence_missing, :more => "Prometheus Notification not send." } + # start notification on prometheus for metric logerrors, logmissing; loglines + def notify(options = {}) + log = get_logger + unless verify_service host: @config.prometheus_pushgateway_host ,port: @config.prometheus_pushgateway_port then + return { :case => :service_dependence_missing, :more => "Prometheus Notification not send." } + end + session = (options[:session]) ? options[:session] : log.get_session + log.info "Sending metrics to Prometheus Pushgateway", session + @logs_target.each do |item| + missing = (item[:status] == :missing)? 1 : 0 + log.item "Sending metrics for #{item[:log]}", session + @metric_count.set(item[:count], labels: { log: item[:log] }) + @metric_missing.set(missing, labels: { log: item[:log] }) + lines = (item[:lines])? item[:lines] : 0 + @metric_lines.set(lines, labels: { log: item[:log] }) + end + hostname = Socket.gethostname + url = "http://#{@config.prometheus_pushgateway_host}:#{@config.prometheus_pushgateway_port}" + Prometheus::Client::Push.new('Splash',hostname, url).add(@registry) + log.ok "Sending to Prometheus PushGateway done.", session + return {:case => :quiet_exit } end - session = (options[:session]) ? options[:session] : log.get_session - log.info "Sending metrics to Prometheus Pushgateway", session - @logs_target.each do |item| - missing = (item[:status] == :missing)? 1 : 0 - log.item "Sending metrics for #{item[:log]}", session - @metric_count.set(item[:count], labels: { log: item[:log] }) - @metric_missing.set(missing, labels: { log: item[:log] }) - lines = (item[:lines])? item[:lines] : 0 - @metric_lines.set(lines, labels: { log: item[:log] }) - end - hostname = Socket.gethostname - url = "http://#{@config.prometheus_pushgateway_host}:#{@config.prometheus_pushgateway_port}" - Prometheus::Client::Push.new('Splash',hostname, url).add(@registry) - log.ok "Sending to Prometheus PushGateway done.", session - return {:case => :quiet_exit } - end + end end end