Sha256: b410688f6b444204771b5bb8cdeab4458523f8672e4461e99f0715c0c78eafb6

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

require 'sinatra/base'

module DelayedJobDashboard
  class WebApplication < Sinatra::Base
    set :root, File.dirname(__FILE__)
    set :static, true
    set :public_folder, File.expand_path('../public', __FILE__)
    set :views, File.expand_path('../views', __FILE__)

    get "/" do
      redirect "/delayed_job/overview"
    end

    get '/overview' do
      if defined?(Delayed::Job)
        haml :overview, escape_html: false
      else
        @message = "Delayed::Job is not available"
        haml :error
      end
    end

    get '/enqueued' do
      haml :enqueued, escape_html: false
    end

    get '/pending' do
      haml :pending, escape_html: false
    end

    get '/failed' do
      haml :failed, escape_html: false
    end

    get '/working' do
      haml :working, escape_html: false
    end

    get '/jobs.json' do
      content_type :json

      case params["filter"]
      when "pending"
        @jobs = Delayed::Job.where(locked_at: nil, attempts: 0).order(created_at: :desc)
      when "failed"
        @jobs = Delayed::Job.where.not(failed_at: nil).order(created_at: :desc)
      when "working"
        @jobs = Delayed::Job.where.not(locked_at: nil).order(created_at: :desc)
      when "enqueued"
        @jobs = Delayed::Job.order(created_at: :desc)
      end

      @jobs = Delayed::Job.order(created_at: :desc) if @jobs.nil?

      @jobs_json = @jobs.as_json
      @jobs_json.each_with_index do |job, index|
        job["payload_object"] = @jobs[index].payload_object
      end
      @jobs_json.to_json
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vue_delayed_job_dashboard-0.1.0 lib/delayed_job_dashboard/web/app.rb