Sha256: 2a01c4053e3d7b3231836d3966d53472793641885a3418096b8d5c0baf6ae46b

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

module JobNotifier
  class Logger < Rails::Rack::Logger
    def initialize(app, opts = {})
      @app = app
      @opts = opts
      super
    end

    def call(env)
      if env["PATH_INFO"] =~ %r{\/job_notifier\/\w+\/jobs\/\w+.json}
        Rails.logger.silence do
          response = @app.call(env)
          log_jobs_info(response[2])
          return response
        end
      end

      super(env)
    end

    def log_jobs_info(response)
      response.each do |resp|
        next if resp.blank?
        result = JSON.parse(resp)
        next if result.blank?
        puts build_log_msg(result)
      end
    end

    def build_log_msg(result)
      msg = ["[#{DateTime.now.strftime('%Y-%m-%d %H:%M:%S')}] UNNOTIFIED JOBS".light_blue]
      grouped_jobs = result.group_by { |job| job["status"].to_sym }
      load_job_status_msg(grouped_jobs, msg, :pending, :yellow)
      load_job_status_msg(grouped_jobs, msg, :finished, :green)
      load_job_status_msg(grouped_jobs, msg, :failed, :red)
      msg.join("  ")
    end

    def load_job_status_msg(grouped_jobs, msg, status, color)
      if grouped_jobs.has_key?(status)
        msg << "#{status.to_s.capitalize}: #{grouped_jobs[status].count}".send(color)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
job_notifier-1.1.0 lib/job_notifier/logger.rb