rjobs 0.1.0.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ {
2
+ "PHP": {
3
+ "php": '/usr/bin/php',
4
+ "phpExtraPaths": [],
5
+ "phpConfigFile": 'php.ini'
6
+ },
7
+ "JavaScript": {
8
+ "javascriptExtraPaths": []
9
+ },
10
+ "Perl": {
11
+ "perl": "/usr/bin/perl",
12
+ "perlExtraPaths": []
13
+ },
14
+ "Ruby": {
15
+ "ruby": "/Users/merlin/.rvm/rubies/ruby-1.9.2-p290/bin/ruby",
16
+ "rubyExtraPaths": []
17
+ },
18
+ "Python": {
19
+ "python": '/usr/bin/python',
20
+ "pythonExtraPaths": []
21
+ },
22
+ "Python3": {
23
+ "python": '/usr/bin/python3',
24
+ "pythonExtraPaths": []
25
+ }
26
+ }
@@ -0,0 +1,7 @@
1
+ *.swp
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
6
+ tmp/*
7
+ vendor/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rjobs.gemspec
4
+ gemspec
@@ -0,0 +1,15 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'cucumber' do
5
+ watch(%r{^features/.+\.feature$})
6
+ watch(%r{^features/support/.+$}) { 'features' }
7
+ watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
8
+ end
9
+
10
+
11
+ guard 'rspec' do
12
+ watch(%r{^spec/.+_spec\.rb$})
13
+ watch(%r{^lib/(.+)\.rb$}) {|m| "spec/lib/#{m[1]}_spec.rb" }
14
+ watch('spec/spec_helper.rb') { "spec" }
15
+ end
@@ -0,0 +1 @@
1
+ This is the readme file
@@ -0,0 +1,34 @@
1
+ require "bundler/gem_tasks"
2
+
3
+
4
+ desc 'List all defined steps'
5
+ task :steps do
6
+ require 'hirb'
7
+ extend Hirb::Console
8
+ puts "CUCUMBER steps:"
9
+ puts ""
10
+ #step_definition_dir = "features/step_definitions"
11
+ step_definition_dir = "."
12
+ #step_definition_dir = "/Users/merlin/.rvm/gems/ruby-1.9.2-p290/gems/aruba-0.4.7/lib/aruba/"
13
+
14
+ Dir.glob(File.join(step_definition_dir,'**/*.rb')).each do |step_file|
15
+
16
+ puts "File: #{step_file}"
17
+ puts ""
18
+ results = []
19
+ File.new(step_file).read.each_line.each_with_index do |line, number|
20
+
21
+ next unless line =~ /^\s*(?:Given|When|Then)\s+|\//
22
+ res = /(?:Given|When|Then)[\s\(]*\/(.*)\/([imxo]*)[\s\)]*do\s*(?:$|\|(.*)\|)/.match(line)
23
+ next unless res
24
+ matches = res.captures
25
+ results << OpenStruct.new(
26
+ :steps => matches[0],
27
+ :modifier => matches[1],
28
+ :args => matches[2]
29
+ )
30
+ end
31
+ table results, :resize => false, :fields=>[:steps, :modifier, :args]
32
+ puts ""
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib') unless $LOAD_PATH.include?(File.dirname(__FILE__) + '/../lib')
4
+
5
+ require 'trollop'
6
+ require "rjobs/jobs_file"
7
+ require "rjobs/job"
8
+ require "rjobs/job_handler"
9
+ require 'rjobs/cli_helper'
10
+ include Rjobs::CliHelper
11
+
12
+ p = Trollop::Parser.new do
13
+ banner <<-EOS
14
+ Harvest all finished jobs described in the jobs file.
15
+
16
+ Usage:
17
+ rjharvest [options] <filename>
18
+ where [options] are:
19
+ EOS
20
+
21
+ end
22
+
23
+ opts = Trollop::with_standard_exception_handling p do
24
+ o = p.parse ARGV
25
+ raise Trollop::HelpNeeded if ARGV.empty? # show help screen
26
+ end
27
+
28
+ jobs_file = ARGV[0]
29
+
30
+ jobs = get_jobs_info(jobs_file)
31
+ jobs.each do |job|
32
+ Rjobs::JobHandler.get_job_results(job)
33
+ end
34
+
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib') unless $LOAD_PATH.include?(File.dirname(__FILE__) + '/../lib')
4
+
5
+ require 'trollop'
6
+ require "rjobs/jobs_file"
7
+ require "rjobs/job"
8
+ require "rjobs/job_handler"
9
+ require 'rjobs/cli_helper'
10
+ include Rjobs::CliHelper
11
+
12
+ p = Trollop::Parser.new do
13
+ banner <<-EOS
14
+ Get the status of jobs described in the jobs file.
15
+
16
+ Usage:
17
+ rjstatus [options] <filename>
18
+ where [options] are:
19
+ EOS
20
+
21
+ end
22
+
23
+ opts = Trollop::with_standard_exception_handling p do
24
+ o = p.parse ARGV
25
+ raise Trollop::HelpNeeded if ARGV.empty? # show help screen
26
+ end
27
+
28
+ jobs_file = ARGV[0]
29
+
30
+ jobs = get_jobs_info(jobs_file)
31
+
32
+ jobs.each do |job|
33
+ puts "#{job.name} - #{job.status_with_color}"
34
+ end
35
+
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib') unless $LOAD_PATH.include?(File.dirname(__FILE__) + '/../lib')
4
+
5
+ require 'trollop'
6
+ require "rjobs/jobs_file"
7
+ require "rjobs/job_input_file"
8
+ require "rjobs/job"
9
+ require "rjobs/job_handler"
10
+ require 'rjobs/cli_helper'
11
+ include Rjobs::CliHelper
12
+
13
+ p = Trollop::Parser.new do
14
+ banner <<-EOS
15
+ Submit jobs described in the YAML input file.
16
+
17
+ Usage:
18
+ rjsubmit [options] <filename>
19
+ where [options] are:
20
+ EOS
21
+
22
+ end
23
+
24
+ opts = Trollop::with_standard_exception_handling p do
25
+ o = p.parse ARGV
26
+ raise Trollop::HelpNeeded if ARGV.empty? # show help screen
27
+ end
28
+
29
+
30
+ jobs_input_file = ARGV[0]
31
+
32
+ jif = Rjobs::JobInputFile.new(jobs_input_file)
33
+ jobs = []
34
+ length = jif.jobIdTo.length
35
+ (jif.jobIdFrom .. jif.jobIdTo).each do |id|
36
+ j = Rjobs::Job.new()
37
+ j.name = "%s%0#{length}d" % [jif.jobName,id]
38
+ j.command = jif.command
39
+ jobs << j
40
+ end
41
+
42
+ jobs.each do |job|
43
+ Rjobs::JobHandler.submit_job(job)
44
+ end
45
+
46
+ jf = Rjobs::JobsFile.new()
47
+ jf.write(jif.jobName+".rjobs",jobs)
48
+
49
+ puts "#{jobs.count} job(s) submited.".green
@@ -0,0 +1,32 @@
1
+ Feature: Submit
2
+ As a user
3
+ I want to harvest jobs' results
4
+ So that I can analyse it later
5
+
6
+ Scenario: Have a harvest command
7
+ When I successfully run `rjharvest`
8
+ Then the output should contain "rjharvest [options] <filename>"
9
+
10
+
11
+
12
+ Scenario: Submit a job input files will return a jobs result file
13
+ Given a file named "VAA.rjobs" with:
14
+ """
15
+ VAA1 1
16
+ VAA2 2
17
+ VAA3 3
18
+ VAA4 4
19
+ VAA5 5
20
+ VAA6 6
21
+ VAA7 7
22
+ """
23
+ When I successfully run `rjharvest VAA.rjobs`
24
+ Then show me the output
25
+ Then a file named "VAA1.out" should exist
26
+ And the file "VAA1.out" should match /Hello world/
27
+ # And a file named "VAA.out" should exist
28
+ # And the file "VAA.out" should match /Hello World/
29
+
30
+
31
+
32
+
@@ -0,0 +1,22 @@
1
+ Feature: List Jobs
2
+ As a user
3
+ I want to have a function to list all jobs
4
+ So as I can see a list of jobs
5
+
6
+ Background:
7
+
8
+
9
+ Scenario: list all jobs
10
+ Given a file named "test_jobs.rjob" with:
11
+ """
12
+ VAA1 1
13
+ VAA2 2
14
+ VAA3 3
15
+ VAA4 4
16
+ VAA5 5
17
+ VAA6 6
18
+ VAA7 7
19
+ """
20
+ When I successfully run `rjstatus test_jobs.rjob`
21
+ Then each line of the output should match /VAA\d+ - (Finished|Failed|Not Exist)/
22
+ And show me the output
@@ -0,0 +1,19 @@
1
+ require 'rjobs/process'
2
+ require 'rjobs/job_handler'
3
+ require 'cucumber/rspec/doubles'
4
+ require 'aruba/api'
5
+ require 'aruba/hooks'
6
+ require 'aruba/reporting'
7
+
8
+ World(Aruba::Api)
9
+
10
+ Then /^show me the output$/ do
11
+ puts all_stdout
12
+ end
13
+
14
+ Then /^each line of the output should match \/([^\/]*)\/$/ do |expected|
15
+ all_stdout.split("\n").each do |line|
16
+ # puts line
17
+ line.should match expected
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ Feature: Submit
2
+ As a user
3
+ I want to submit jobs
4
+ So that jobs can be run on the xgrid
5
+
6
+ Scenario: Have a submit command
7
+ When I successfully run `rjsubmit`
8
+ Then the output should contain "rjsubmit [options] <filename>"
9
+
10
+
11
+
12
+ Scenario: Submit a job input files will return a jobs file
13
+ Given a file named "VAA.myJobs" with:
14
+ """
15
+ JobName: VAA
16
+ JobId: 1-10
17
+ Command: ~/plays/cpp/testGrid/a.out
18
+ """
19
+ When I successfully run `rjsubmit VAA.myJobs`
20
+ Then show me the output
21
+ Then a file named "VAA.rjobs" should exist
22
+ And the file "VAA.rjobs" should match /(VAA\d+\t\d+\n)+/
23
+
24
+
25
+
26
+
27
+
@@ -0,0 +1,6 @@
1
+ require 'aruba'
2
+ require 'cucumber/rspec/doubles'
3
+
4
+ ENV["RAILS_ENV"] ||= "cucumber"
5
+ ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib') unless $LOAD_PATH.include?(File.dirname(__FILE__) + '/../../lib')
@@ -0,0 +1 @@
1
+ require 'aruba/cucumber'
@@ -0,0 +1,5 @@
1
+ require "rjobs/version"
2
+
3
+ module Rjobs
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,14 @@
1
+ module Rjobs
2
+ module CliHelper
3
+ def get_jobs_info(jobs_file)
4
+ jf = JobsFile.new(jobs_file)
5
+ jobs= []
6
+ jf.ids.each_with_index do |jobId,index|
7
+ job = Rjobs::Job.new(jobId, Rjobs::JobHandler.get_job_attributes(jobId))
8
+ job.name = jf.job_names[index]
9
+ jobs << job
10
+ end
11
+ jobs
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ class String
2
+ def colorize(text, color_code)
3
+ "#{color_code}#{text}e[0m"
4
+ end
5
+
6
+ def red
7
+ colorize(self, "e[31m")
8
+ end
9
+ def green
10
+ colorize(self, "e[32m")
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ module Rjobs
2
+ class CommandBuilder
3
+ attr_accessor :command, :params
4
+ def initialize(command = "", params = "")
5
+ @command = command
6
+ @params = params
7
+ end
8
+
9
+ def build()
10
+ cmd = []
11
+ cmd << @command
12
+ @params.each do |key, value|
13
+ if value == ""
14
+ cmd << "#{key}"
15
+ else
16
+ cmd << "-#{key}"
17
+ cmd << value
18
+ end
19
+ end
20
+ cmd.join(" ")
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,53 @@
1
+ require 'plist'
2
+ require 'rjobs/command_builder'
3
+ require 'colorize'
4
+
5
+ module Rjobs
6
+ class Job
7
+ attr_accessor :id, :name, :status
8
+ attr_writer :params, :command
9
+
10
+ def initialize(id=0,xml="")
11
+ @id = id
12
+ parse(xml)
13
+ @params= {}
14
+ @command = ""
15
+ end
16
+
17
+ def xml=(xml)
18
+ parse(xml)
19
+ end
20
+
21
+ def command
22
+ cb = Rjobs::CommandBuilder.new(@command,@params)
23
+ cb.build
24
+ end
25
+
26
+ def status_with_color
27
+ case @status
28
+ when /Finished/
29
+ @status.green
30
+ when /Failed/
31
+ @status.light_red
32
+ when /Not Exist/
33
+ @status.red
34
+ else
35
+ @status
36
+ end
37
+ end
38
+
39
+
40
+ private
41
+ def parse(xml)
42
+ return if xml.empty?
43
+ result = Plist::parse_xml(xml)
44
+ @name = result['jobAttributes'].nil? ? "" : result['jobAttributes']['name']
45
+ @status = result['jobAttributes'].nil? ? "Not Exist" : result['jobAttributes']['jobStatus']
46
+
47
+ end
48
+
49
+
50
+
51
+ end
52
+ end
53
+