pbs_job 0.0.1 → 0.0.2

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.
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