pbs_job 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc1d00b54a1f3831231d2298367a8d6c04146b27
4
- data.tar.gz: d3d52813019b0a936c1cbb679f93db234ffb087a
3
+ metadata.gz: f0ed432454ec7d005367c6dbc36829f87e02bd6c
4
+ data.tar.gz: 30d243a63104ea3e728855e75f5c28d853cdbee9
5
5
  SHA512:
6
- metadata.gz: b57061cfd8bc858dce808277bbfe3353b663fd72f4a29f572ce8a01fa7aaa1ae4b99a47713a3b6090d03106aa48d39699b652bd1d10ebbd73649d734a893c8e9
7
- data.tar.gz: d3ba18b5ae94087a58b85210d55923e7467c89814a7378e098ffad66f39f237c69a6c27f3f9581675afc6cfbfc20f8e2ba5f511366321006996e0194831772ec
6
+ metadata.gz: 423426faac483f807ff4bad364efbdcf833d93e678b1f1e648fc6a54cfc1a3ca8ece52abdbbfd36f61840ff690cf8f3aa7d6907d1d12a5d233fdbe7cc8961e56
7
+ data.tar.gz: 01a8abd84949a154d85311ccacc91bf620693aeaec7bbb3915093bfec39ded37071266ee57315c12b12eed23fa9bc65d015cf9c9a3616a6a94884e4b0efa45bc
data/bin/pbs_job CHANGED
@@ -7,6 +7,9 @@ module PbsJob
7
7
  class New < Thor::Group
8
8
  include Thor::Actions
9
9
 
10
+ STREAMS_DIR_NAME = 'streams'
11
+ EXECUTABLE_PERMISSIONS = 0775
12
+
10
13
  argument :name, :desc => 'Name of the new job.'
11
14
  argument :email_address, :desc => 'Email to which to send PBS alerts.'
12
15
 
@@ -22,10 +25,18 @@ module PbsJob
22
25
  :script,
23
26
  {
24
27
  :desc => 'Type of script to make the task script',
25
- :default => '<script type>',
28
+ :default => 'bash',
26
29
  :aliases => 's'
27
30
  }
28
31
  )
32
+ class_option(
33
+ :task_working_dir,
34
+ {
35
+ :desc => 'Working directory in which to run task',
36
+ :default => File.expand_path('~'),
37
+ :aliases => 'w'
38
+ }
39
+ )
29
40
 
30
41
  def self.source_root
31
42
  File.expand_path('../../', __FILE__)
@@ -36,15 +47,15 @@ module PbsJob
36
47
  end
37
48
 
38
49
  def qsub_script
39
- create_file_from_template 'job.qsub'
50
+ create_script_from_template 'job.qsub'
40
51
  end
41
52
 
42
53
  def pbs_script
43
- create_file_from_template 'job.pbs'
54
+ create_script_from_template 'job.pbs'
44
55
  end
45
56
 
46
57
  def task
47
- create_file_from_template 'task'
58
+ create_script_from_template 'task'
48
59
  end
49
60
 
50
61
  def results
@@ -62,13 +73,22 @@ module PbsJob
62
73
 
63
74
  private
64
75
 
76
+ def file_path(script_name)
77
+ File.join full_name, script_name
78
+ end
79
+
65
80
  def create_file_from_template(file_name)
66
81
  template(
67
82
  "templates/#{file_name}.tt",
68
- "#{full_name}/#{file_name}"
83
+ file_path(file_name)
69
84
  )
70
85
  end
71
86
 
87
+ def create_script_from_template(script_name)
88
+ create_file_from_template script_name
89
+ chmod file_path(script_name), EXECUTABLE_PERMISSIONS
90
+ end
91
+
72
92
  # @returns [String] Name with date appended
73
93
  def full_name
74
94
  @full_name ||= -> do
@@ -83,11 +103,11 @@ module PbsJob
83
103
  end
84
104
 
85
105
  def streams_path
86
- @streams_path ||= File.join full_name, 'streams'
106
+ @streams_path ||= File.join full_name, STREAMS_DIR_NAME
87
107
  end
88
108
 
89
109
  def abs_stream_prefix
90
- @abs_stream_prefix ||= File.join abs_job_root, streams_path, full_name
110
+ @abs_stream_prefix ||= File.join abs_job_root, STREAMS_DIR_NAME, full_name
91
111
  end
92
112
  end
93
113
 
@@ -1,3 +1,3 @@
1
- module PbsJob
2
- VERSION = "0.0.1"
1
+ module PbsJob
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/pbs_job_spec.rb CHANGED
@@ -21,6 +21,17 @@ HELP
21
21
  TASK = "#{JOB_ROOT}/task"
22
22
  RESULTS = "#{JOB_ROOT}/results"
23
23
  STREAMS = "#{JOB_ROOT}/streams"
24
+ SUCCESSFUL_OUTPUT = <<-OUT
25
+ \e[1m\e[32m create\e[0m #{JOB_ROOT}
26
+ \e[1m\e[32m create\e[0m #{QSUB_SCRIPT}
27
+ \e[1m\e[32m chmod\e[0m #{QSUB_SCRIPT}
28
+ \e[1m\e[32m create\e[0m #{PBS_SCRIPT}
29
+ \e[1m\e[32m chmod\e[0m #{PBS_SCRIPT}
30
+ \e[1m\e[32m create\e[0m #{TASK}
31
+ \e[1m\e[32m chmod\e[0m #{TASK}
32
+ \e[1m\e[32m create\e[0m #{RESULTS}
33
+ \e[1m\e[32m create\e[0m #{STREAMS}
34
+ OUT
24
35
 
25
36
  it 'prints usage and options without arguments' do
26
37
  pbs_job
@@ -39,9 +50,11 @@ Usage:
39
50
  pbs_job new NAME EMAIL_ADDRESS [OPTIONS]
40
51
 
41
52
  Options:
42
- r, [--link-results=LINK_RESULTS] # Directory to which to redirect results
43
- s, [--script=SCRIPT] # Type of script to make the task script
44
- # Default: <script type>
53
+ r, [--link-results=LINK_RESULTS] # Directory to which to redirect results
54
+ s, [--script=SCRIPT] # Type of script to make the task script
55
+ # Default: bash
56
+ w, [--task-working-dir=TASK_WORKING_DIR] # Working directory in which to run task
57
+ # Default: /home/vagrant
45
58
 
46
59
  Creates a new PBS job with the name NAME and arranges for PBS alerts to be sent to EMAIL_ADDRESS, customized by OPTIONS
47
60
  GEN_HELP
@@ -57,18 +70,12 @@ GEN_HELP
57
70
  it 'creates a file structure for job components' do
58
71
  in_tmp_dir do
59
72
  pbs_job "new #{NAME} #{EMAIL_ADDRESS}"
60
- stdout.must_equal <<-DIR
61
- \e[1m\e[32m create\e[0m #{JOB_ROOT}
62
- \e[1m\e[32m create\e[0m #{QSUB_SCRIPT}
63
- \e[1m\e[32m create\e[0m #{PBS_SCRIPT}
64
- \e[1m\e[32m create\e[0m #{TASK}
65
- \e[1m\e[32m create\e[0m #{RESULTS}
66
- \e[1m\e[32m create\e[0m #{STREAMS}
67
- DIR
73
+
74
+ stdout.must_equal SUCCESSFUL_OUTPUT
68
75
  File.directory?(JOB_ROOT).must_equal true
69
- File.file?(QSUB_SCRIPT).must_equal true
70
- File.file?(PBS_SCRIPT).must_equal true
71
- File.file?(TASK).must_equal true
76
+ check_script QSUB_SCRIPT
77
+ check_script PBS_SCRIPT
78
+ check_script TASK
72
79
  File.directory?(RESULTS).must_equal true
73
80
  File.directory?(STREAMS).must_equal true
74
81
  end
@@ -78,18 +85,12 @@ DIR
78
85
  it '--script allows specification of the script type of task' do
79
86
  in_tmp_dir do
80
87
  pbs_job "new #{NAME} #{EMAIL_ADDRESS} --script=bash"
81
- stdout.must_equal <<-DIR
82
- \e[1m\e[32m create\e[0m #{JOB_ROOT}
83
- \e[1m\e[32m create\e[0m #{QSUB_SCRIPT}
84
- \e[1m\e[32m create\e[0m #{PBS_SCRIPT}
85
- \e[1m\e[32m create\e[0m #{TASK}
86
- \e[1m\e[32m create\e[0m #{RESULTS}
87
- \e[1m\e[32m create\e[0m #{STREAMS}
88
- DIR
88
+
89
+ stdout.must_equal SUCCESSFUL_OUTPUT
89
90
  File.directory?(JOB_ROOT).must_equal true
90
- File.file?(QSUB_SCRIPT).must_equal true
91
- File.file?(PBS_SCRIPT).must_equal true
92
- File.file?(TASK).must_equal true
91
+ check_script QSUB_SCRIPT
92
+ check_script PBS_SCRIPT
93
+ check_script TASK
93
94
  File.directory?(RESULTS).must_equal true
94
95
  File.directory?(STREAMS).must_equal true
95
96
  end
@@ -100,18 +101,12 @@ DIR
100
101
  linked_results = '/scratch/results'
101
102
  in_tmp_dir do
102
103
  pbs_job "new #{NAME} #{EMAIL_ADDRESS} --link-results=#{linked_results}"
103
- stdout.must_equal <<-DIR
104
- \e[1m\e[32m create\e[0m #{JOB_ROOT}
105
- \e[1m\e[32m create\e[0m #{QSUB_SCRIPT}
106
- \e[1m\e[32m create\e[0m #{PBS_SCRIPT}
107
- \e[1m\e[32m create\e[0m #{TASK}
108
- \e[1m\e[32m create\e[0m #{RESULTS}
109
- \e[1m\e[32m create\e[0m #{STREAMS}
110
- DIR
104
+
105
+ stdout.must_equal SUCCESSFUL_OUTPUT
111
106
  File.directory?(JOB_ROOT).must_equal true
112
- File.file?(QSUB_SCRIPT).must_equal true
113
- File.file?(PBS_SCRIPT).must_equal true
114
- File.file?(TASK).must_equal true
107
+ check_script QSUB_SCRIPT
108
+ check_script PBS_SCRIPT
109
+ check_script TASK
115
110
  File.symlink?(RESULTS).must_equal true
116
111
  File.readlink(RESULTS).must_equal linked_results
117
112
  File.directory?(STREAMS).must_equal true
@@ -125,4 +120,9 @@ DIR
125
120
  yield dir if block_given?
126
121
  end
127
122
  end
123
+
124
+ def check_script(script_path)
125
+ File.file?(script_path).must_equal true
126
+ File.executable?(script_path).must_equal true
127
+ end
128
128
  end
data/templates/job.pbs.tt CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
2
  #PBS -m abe -M <%= email_address %>
3
- cd <%= abs_job_root %>
4
- ./task > "<%= abs_stream_prefix %>.out" 2> "<%= abs_stream_prefix %>.err"
3
+ cd <%= options[:task_working_dir] %>
4
+ "<%= abs_job_root %>/task" > "<%= abs_stream_prefix %>.out" 2> "<%= abs_stream_prefix %>.err"
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bash
2
2
  # This script runs job.pbs with qsub. Customize as necessary
3
- qsub job.pbs -N "<%= full_name %>" -e "<%= abs_stream_prefix %>.e" -o "<%= abs_stream_prefix %>.o"
3
+ qsub "<%= abs_job_root %>/job.pbs" -N "<%= full_name %>" -e "<%= abs_stream_prefix %>.e" -o "<%= abs_stream_prefix %>.o"
data/templates/task.tt CHANGED
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pbs_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Morrill