Sha256: eaaa5cce87d78710eae559f3c1bad8eecf33644ee84766d128ccac5fd18cfc83

Contents?: true

Size: 1.92 KB

Versions: 61

Compression:

Stored size: 1.92 KB

Contents

#!/usr/bin/env ruby

require 'rbbt/workflow'

require 'rbbt-util'
require 'fileutils'
require 'rbbt/util/simpleopt'
require 'rbbt/workflow/step'
require 'rbbt/util/misc'

require 'rbbt-util'
require 'rbbt/util/simpleopt'

$0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands

options = SOPT.setup <<EOF
Examine the provenance of a job result

$ rbbt workflow prov <job-result>

-h--help Help
EOF

SOPT.usage if options[:help]

file = ARGV.shift

$seen = []
def get_step(file)
  file = file.sub(/\.(info|files)/,'')
  $seen << file
  Step.new file
end

def status_msg(status)
  color = case status
          when :error, :aborted, :missing
            :red
          when :streaming
            :yellow
          when :done
            :green
          else
            nil
          end
  Log.color(color, status)
end

def report_msg(status, name, path)

  parts = path.sub(/#{Regexp.quote(name)}$/,'').split "/"

  task = Log.color(:yellow, parts.pop)
  workflow = Log.color(:magenta, parts.pop)

  if $main_mtime and ($main_mtime - File.mtime(path)) < 0
    status_msg(status) << " " << [workflow, task, path] * " " << " (#{Log.color(:red, "Mtime out of sync") })\n"
  else
    status_msg(status) << " " << [workflow, task, path] * " " << "\n"
  end
end

def report(step, offset = 0)
  info = step.info || {}
  path  = step.path
  status = info[:status] || :missing
  name = info[:name] || File.basename(path)
  status = :unsync if status == :done and not File.exists? path
  str = " " * offset
  str << report_msg(status, name, path)
  info[:dependencies].each do |task,name,path|
    new = ! $seen.include?(path)
    dep = get_step path
    if new
      str << report(dep, offset + 1)
    else
      str << Log.color(:blue, Log.uncolor(report(dep, offset+1)))
    end
  end if info[:dependencies]
  str
end

step = get_step file
$main_mtime = File.exists?(step.path) ? File.mtime(step.path) : nil

puts report(step).strip

Version data entries

61 entries across 61 versions & 1 rubygems

Version Path
rbbt-util-5.17.69 share/rbbt_commands/workflow/prov
rbbt-util-5.17.68 share/rbbt_commands/workflow/prov
rbbt-util-5.17.67 share/rbbt_commands/workflow/prov
rbbt-util-5.17.66 share/rbbt_commands/workflow/prov
rbbt-util-5.17.65 share/rbbt_commands/workflow/prov
rbbt-util-5.17.64 share/rbbt_commands/workflow/prov
rbbt-util-5.17.63 share/rbbt_commands/workflow/prov
rbbt-util-5.17.62 share/rbbt_commands/workflow/prov
rbbt-util-5.17.61 share/rbbt_commands/workflow/prov
rbbt-util-5.17.60 share/rbbt_commands/workflow/prov
rbbt-util-5.17.59 share/rbbt_commands/workflow/prov
rbbt-util-5.17.58 share/rbbt_commands/workflow/prov
rbbt-util-5.17.57 share/rbbt_commands/workflow/prov
rbbt-util-5.17.56 share/rbbt_commands/workflow/prov
rbbt-util-5.17.55 share/rbbt_commands/workflow/prov
rbbt-util-5.17.54 share/rbbt_commands/workflow/prov
rbbt-util-5.17.53 share/rbbt_commands/workflow/prov
rbbt-util-5.17.52 share/rbbt_commands/workflow/prov
rbbt-util-5.17.51 share/rbbt_commands/workflow/prov
rbbt-util-5.17.50 share/rbbt_commands/workflow/prov