Sha256: 0a06eba1d9b7de4b5945601d5161959f75e01f3833a8c2f901cd3b114ed28f56

Contents?: true

Size: 1.52 KB

Versions: 4

Compression:

Stored size: 1.52 KB

Contents

require 'sinatra'
require 'json'

$job_status = {
  "eta" => "(unknown)"
}
Thread.new do
  loop do
    status = $transport.status
    $job_status['assigned'] = status[:assigned]
    $job_status['nodes'] = status[:clients].keys.sort_by {|x| status[:clients][x] }
                                           .reverse
    $job_status['node_times'] = status[:clients]
    $job_status['completed_count'] = status[:completed_count]
    $job_status['task_count'] = status[:task_count]
    $job_status['assigned_count'] = status[:assigned_count]
    $job_status['name'] = status[:name]
    $job_status['result'] = $transport.result || "(incomplete)"

    sleep 1
  end
end

def seconds_to_units(seconds)
  '%d days, %d h, %d m, %d s' %
    [24,60,60].reverse.inject([seconds]) {|result, unitsize|
      result[0,0] = result.shift.divmod(unitsize)
      result
    }
end

$prev = $transport.status[:completed_count]
Thread.new do
  loop do
    sleep 10
    status = $transport.status
    current = status[:completed_count]
    jobs_per_sec = (current - $prev).to_f / 10.0
    seconds_left = (status[:task_count] - status[:completed_count]) / jobs_per_sec
    if seconds_left == 1.0 / 0
      $job_status["eta"] = "infinity";
    else
      $job_status["eta"] = seconds_to_units seconds_left
    end
    $prev = current
  end
end

class Dashboard < Sinatra::Base
  set :logging, false

  get '/' do
    File.read(File.join(settings.public_folder, 'index.html'))
  end

  get '/status' do
    $job_status.to_json
  end
end

puts ">>> Starting dashboard."
Dashboard.run!

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
stormy-cloud-0.2.0 dashboard/dash.rb
stormy-cloud-0.1.3 dashboard/dash.rb
stormy-cloud-0.1.2 dashboard/dash.rb
stormy-cloud-0.1.1 dashboard/dash.rb