torque_rm 0.1.0 → 0.2.0

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: 06d6fce41705812d8811ac4cf5ed34b2e240dbc9
4
- data.tar.gz: cdff027855a94198d26e746bd7bf4582b093b1a9
3
+ metadata.gz: 53e16eae105bf6988ad355b72030b9aa28571c9e
4
+ data.tar.gz: 57adda4ebf39189379a2ffbe10f7832d957875c2
5
5
  SHA512:
6
- metadata.gz: f98b672b55c96ef7fe2466d3cbf89e644ca429df8a105679c294a4e6c2f5e017ccdbd7d611878d2fa453fff602e9f0701682727d356879391c179c3d65deebc0
7
- data.tar.gz: 32e1699707d447a6d01c9d49bc2d14f7f08c60dd7d6df751e88715d1d80ce6df68f4522df9f79bcb9ad4e3193ecdba152453eb4f91a7be6fde8daff59b5268e1
6
+ metadata.gz: b71f85629a720d80667f6449be6d2b1b528dd36ac284524ee9b23b9ff1035bc6af2d75274d9c60caf34f364ba9133182101abfeb7eb5ff1b49db134a92101bf7
7
+ data.tar.gz: ef01213ebcc576eba3a8175f38347df1aa8be41c4f2e8b0bd6fc07e0fcab506d62a5eb4f3ed82e31015c5369205d8e920f581f2e4cc91c31218d01ff52e86a71
data/Gemfile CHANGED
@@ -11,6 +11,7 @@ gem 'sinatra-contrib'
11
11
  gem 'shotgun'
12
12
  gem 'haml'
13
13
  gem 'sinatra-twitter-bootstrap', :require => 'sinatra/twitter-bootstrap'
14
+ gem 'activesupport'
14
15
  # gem "awesome_print"
15
16
  # gem 'sinatra-twitter-bootstrap', :require => 'sinatra/twitter-bootstrap'
16
17
  # Add dependencies to develop your gem here.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/lib/torque_rm.rb CHANGED
@@ -6,6 +6,7 @@ require 'torque_rm/common'
6
6
  require 'torque_rm/qsub'
7
7
  require 'torque_rm/qstat'
8
8
  require 'torque_rm/qdel'
9
+ require 'active_support/core_ext/hash/conversions'
9
10
 
10
11
  # Try to laod the default configuration
11
12
  TORQUE.load_config
@@ -1,25 +1,78 @@
1
1
  require 'date'
2
+ require 'time'
2
3
  require 'json'
3
4
  require 'json/add/core'
5
+ require 'ostruct'
6
+
4
7
  module TORQUE
5
8
  class Qstat
6
- FIELDS = %w(job_id job_name job_owner resources_used_cput resources_used_mem resources_used_vmem
7
- resources_used_walltime job_state substate queue server checkpoint ctime error_path exec_host
8
- exec_port hold_types join_path keep_files mail_points mail_users mtime output_path
9
- priority qtime rerunable resource_list session_id shell_path_list variable_list
10
- euser egroup hashname queue_rank queue_type comment etime
11
- exit_status submit_args walltime_remaining start_time start_count fault_tolerant comp_time job_radix total_runtime
12
- submit_host nppcu)
13
- Job = Struct.new(:job_id, :job_name, :job_owner, :resources_used_cput, :resources_used_mem, :resources_used_vmem,
14
- :resources_used_walltime, :job_state, :substate, :queue, :server, :checkpoint, :ctime, :error_path, :exec_host,
15
- :exec_port, :hold_types, :join_path, :keep_files, :mail_points, :mail_users, :mtime, :output_path,
16
- :priority, :qtime, :rerunable, :resource_list, :session_id,
17
- :shell_path_list, :variable_list, :euser, :egroup, :hashname, :queue_rank, :queue_type, :comment,
18
- :etime, :exit_status, :submit_args, :walltime_remaining, :start_time,
19
- :start_count, :fault_tolerant, :comp_time, :job_radix, :total_runtime, :submit_host, :nppcu) do
9
+ #DEPRECATED # FIELDS = %w(job_id job_name job_owner resources_used_cput resources_used_mem resources_used_vmem
10
+ # resources_used_walltime job_state substate queue server checkpoint ctime error_path exec_host
11
+ # exec_port hold_types join_path keep_files mail_points mail_users mtime output_path
12
+ # priority qtime rerunable resource_list session_id shell_path_list variable_list
13
+ # euser egroup hashname queue_rank queue_type comment etime
14
+ # exit_status submit_args walltime_remaining start_time start_count fault_tolerant comp_time job_radix total_runtime
15
+ # submit_host nppcu)
16
+ # Job = Struct.new(:job_id, :job_name, :job_owner, :resources_used_cput, :resources_used_mem, :resources_used_vmem,
17
+ # :resources_used_walltime, :job_state, :substate, :queue, :server, :checkpoint, :ctime, :error_path, :exec_host,
18
+ # :exec_port, :hold_types, :join_path, :keep_files, :mail_points, :mail_users, :mtime, :output_path,
19
+ # :priority, :qtime, :rerunable, :resource_list, :session_id,
20
+ # :shell_path_list, :variable_list, :euser, :egroup, :hashname, :queue_rank, :queue_type, :comment,
21
+ # :etime, :exit_status, :submit_args, :walltime_remaining, :start_time,
22
+ # :start_count, :fault_tolerant, :comp_time, :job_radix, :total_runtime, :submit_host, :nppcu) do
23
+ class EnanchedOpenStruct < OpenStruct
24
+ def initialize(*args)
25
+ super(*args)
26
+ casting
27
+ alias_case_insensitive_methods
28
+ end
29
+
30
+ private
31
+
32
+ # Cast generic types from string to most near type selected by pattern matching
33
+ def casting
34
+ each_pair do |k,v| #converting
35
+ if v =~ (/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)
36
+ send "#{k}=", Time.parse(v)
37
+ elsif k.to_s =~ /time/ && v.is_a?(String) && v =~ (/^[0-9]+$/)
38
+ send "#{k}=", Time.at(v.to_i).to_datetime
39
+ elsif v =~ (/(true)$/i)
40
+ send "#{k}=", true
41
+ elsif v =~ (/(false)$/i)
42
+ send "#{k}=", false
43
+ elsif v =~ (/^[0-9]+$/)
44
+ send "#{k}=", v.to_i
45
+ elsif v.is_a? Hash
46
+ send "#{k}=", EnanchedOpenStruct.new(v)
47
+ end
48
+ end #each pair
49
+ end #casting
50
+
51
+ def alias_case_insensitive_methods
52
+ each_pair do |k,v| #adding methods
53
+ unless k == k.downcase
54
+ original=k.to_sym
55
+ newer=k.downcase.to_sym
56
+ class_eval do
57
+ alias_method newer, original
58
+ alias_method "#{newer}=", "#{original}="
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ class Job < EnanchedOpenStruct
20
67
  #add here your custom method for Qstat::Job
21
68
 
22
- alias :id :job_id
69
+
70
+ def initialize(*args)
71
+ super(*args)
72
+ class_eval do
73
+ alias_method :id, :job_id
74
+ end
75
+ end
23
76
 
24
77
  def is_runnig?
25
78
  job_state == 'R'
@@ -43,11 +96,11 @@ module TORQUE
43
96
  alias is_in_queue? is_queued?
44
97
 
45
98
  def time
46
- return (resources_used_walltime) ? resources_used_walltime : "-"
99
+ return (resources_used.walltime) ? resources_used.walltime : "-"
47
100
  end
48
101
 
49
102
  def memory
50
- resources_used_mem ? (resources_used_mem.split("kb").first.to_f/1000).round(1) : "0"
103
+ resources_used.mem ? (resources_used.mem.split("kb").first.to_f/1000).round(1) : "0"
51
104
  end
52
105
 
53
106
  def node
@@ -55,15 +108,13 @@ module TORQUE
55
108
  end
56
109
 
57
110
  def procs
58
- resource_list.each do |r|
59
- resource = r[:resource]
60
- if resource[:name] == "ncpus"
61
- return resource[:value]
62
- elsif resource[:name] == "nodes"
63
- return resource[:value].split("ppn=")[-1]
64
- end
65
- end
66
- return "-"
111
+ if resource_list.ncpus
112
+ return resource_list.ncpus
113
+ elsif resource_list.nodes
114
+ return resource_list.nodes.split("ppn=")[-1]
115
+ else
116
+ return "-"
117
+ end
67
118
  end
68
119
 
69
120
  def fields
@@ -98,108 +149,108 @@ module TORQUE
98
149
 
99
150
  end # Job
100
151
 
101
- class Parser < Parslet::Parser
102
- rule(:newline) { match('\n').repeat(1) }
103
- rule(:space) { match('\s').repeat }
104
- rule(:space?) { space.maybe }
105
- rule(:tab) { match('\t').repeat(1) }
106
- rule(:newline?) { newline.maybe }
107
- rule(:value) { match('[a-zA-Z0-9\.\_\@\/\+ \,\-:=]').repeat }
108
- rule(:qstat) { job_id.repeat }
109
- rule(:resource_list_name) { str("Resource_List") >> str(".") >> (match('[a-zA-Z]').repeat(1).as(:string)).as(:name) }
110
- rule(:split_assignment) { (space >> str("=") >> space).repeat(1) }
111
- root(:qstat)
112
-
113
- rule(:variable_item){ tab >> value >> newline }
114
- rule(:variable_items) { variable_item.repeat }
115
- rule(:variable_list_items) { value >> newline >> variable_items.maybe}
116
-
117
-
118
- rule(:job_id) {(str("Job Id:") >> space >> value.as(:string)).as(:job_id) >> newline? >> fields.maybe >> newline? }
119
- rule(:job_name) {(space >> str("Job_Name = ") >> value.as(:string) >> newline).as(:job_name)}
120
- rule(:job_owner) {(space >> str("Job_Owner = ") >> value.as(:string) >> newline).as(:job_owner)}
121
- rule(:resources_used_cput) {(space >> str("resources_used.cput = ") >> value.as(:string) >> newline).as(:resources_used_cput)}
122
- rule(:resources_used_mem) {(space >> str("resources_used.mem = ") >> value.as(:string) >> newline).as(:resources_used_mem)}
123
- rule(:resources_used_vmem) {(space >> str("resources_used.vmem = ") >> value.as(:string) >> newline).as(:resources_used_vmem)}
124
- rule(:resources_used_walltime) {(space >> str("resources_used.walltime = ") >> value.as(:string) >> newline).as(:resources_used_walltime)}
125
- rule(:job_state) {(space >> str("job_state = ") >> value.as(:string) >> newline).as(:job_state)}
126
- rule(:queue) {(space >> str("queue = ") >> value.as(:string) >> newline).as(:queue)}
127
- rule(:server) {(space >> str("server = ") >> value.as(:string) >> newline).as(:server)}
128
- rule(:checkpoint) {(space >> str("Checkpoint = ") >> value.as(:string) >> newline).as(:checkpoint)}
129
- rule(:ctime) {(space >> str("ctime = ") >> value.as(:datetime) >> newline).as(:ctime)}
130
- rule(:error_path) {(space >> str("Error_Path = ") >> value.as(:string) >> newline).as(:error_path)}
131
- rule(:exec_host) {(space >> str("exec_host = ") >> value.as(:string) >> newline).as(:exec_host)}
132
- rule(:exec_port) {(space >> str("exec_port = ") >> value.as(:string) >> newline).as(:exec_port)}
133
- rule(:hold_types) {(space >> str("Hold_Types = ") >> value.as(:string) >> newline).as(:hold_types)}
134
- rule(:join_path) {(space >> str("Join_Path = ") >> value.as(:string) >> newline).as(:join_path)}
135
- rule(:keep_files) {(space >> str("Keep_Files = ") >> value.as(:string) >> newline).as(:keep_files)}
136
- rule(:mail_points) {(space >> str("Mail_Points = ") >> value.as(:string) >> newline).as(:mail_points)}
137
- rule(:mail_users) {(space >> str("Mail_Users = ") >> value.as(:string) >> newline).as(:mail_users)}
138
- rule(:mail_users?) {mail_users.maybe }
139
- rule(:mtime) {(space >> str("mtime = ") >> value.as(:datetime) >> newline).as(:mtime)}
140
- rule(:output_path) {(space >> str("Output_Path = ") >> value.as(:string) >> newline).as(:output_path)}
141
- rule(:priority) {(space >> str("Priority = ") >> value.as(:integer) >> newline).as(:priority)}
142
- rule(:qtime) {(space >> str("qtime = ") >> value.as(:datetime) >> newline).as(:qtime)}
143
- rule(:rerunable) {(space >> str("Rerunable = ") >> value.as(:boolean) >> newline).as(:rerunable)}
144
-
145
- rule(:resource) {(space >> resource_list_name >> str(" = ") >> (value.as(:string)).as(:value) >> newline).as(:resource)}
146
- rule(:resource_list) { resource.repeat.as(:resource_list)}
147
-
148
- rule(:session_id) {(space >> str("session_id = ") >> value.as(:integer) >> newline?).as(:session_id)}
149
- rule(:substate) {(space >> str("substate = ") >> value.as(:integer) >> newline?).as(:substate)} # Torque 2.4.16
150
- rule(:shell_path_list) {(space >> str("Shell_Path_List = ") >> value.as(:string) >> newline?).as(:shell_path_list)}
151
- rule(:variable_list) {(space >> str("Variable_List = ") >> variable_list_items.as(:string) >> newline?).as(:variable_list)}
152
- rule(:euser) {(space >> str("euser = ") >> value.as(:string) >> newline?).as(:euser)} # Torque 2.4.16
153
- rule(:egroup) {(space >> str("egroup = ") >> value.as(:string) >> newline?).as(:egroup)} # Torque 2.4.16
154
- rule(:hashname) {(space >> str("hashname = ") >> value.as(:string) >> newline?).as(:hashname)} # Torque 2.4.16
155
- rule(:queue_rank) {(space >> str("queue_rank = ") >> value.as(:string) >> newline?).as(:queue_rank)} # Torque 2.4.16
156
- rule(:queue_type) {(space >> str("queue_type = ") >> value.as(:string) >> newline?).as(:queue_type)} # Torque 2.4.16
157
- rule(:comment) {(space >> str("comment = ") >> value.as(:string) >> newline?).as(:comment)} # Torque 2.4.16
158
- rule(:etime) {(space >> str("etime = ") >> value.as(:datetime) >> newline?).as(:etime)}
159
- rule(:exit_status) {(space >> str("exit_status = ") >> value.as(:string) >> newline?).as(:exit_status)}
160
- rule(:submit_args) {(space >> str("submit_args = ") >> value.as(:string) >> newline?).as(:submit_args)}
161
- rule(:start_time) {(space >> str("start_time = ") >> value.as(:datetime) >> newline?).as(:start_time)}
162
- rule(:walltime_remaining) {(space >> str("Walltime.Remaining = ") >> value.as(:integer) >> newline?).as(:walltime_remaining)} # Torque 2.4.16
163
- rule(:start_count) {(space >> str("start_count = ") >> value.as(:integer) >> newline?).as(:start_count)}
164
- rule(:fault_tolerant) {(space >> str("fault_tolerant = ") >> value.as(:boolean) >> newline?).as(:fault_tolerant)}
165
- rule(:comp_time) {(space >> str("comp_time = ") >> value.as(:datetime) >> newline?).as(:comp_time)}
166
- rule(:job_radix) {(space >> str("job_radix = ") >> value.as(:string) >> newline?).as(:job_radix)}
167
- rule(:total_runtime) {(space >> str("total_runtime = ") >> value.as(:string) >> newline?).as(:total_runtime)}
168
- rule(:submit_host) {(space >> str("submit_host = ") >> value.as(:string) >> newline?).as(:submit_host)}
169
- rule(:nppcu) {(space >> str("nppcu = ") >> value.as(:integer) >> newline?).as(:nppcu)} #Torque 4.2.5 / Maui 3.3.1
170
-
171
- # a lot of maybe, maybe everything
172
-
173
- rule(:fields) { job_name.maybe >> job_owner.maybe >> resources_used_cput.maybe >> resources_used_mem.maybe >>
174
- resources_used_vmem.maybe >> resources_used_walltime.maybe >> job_state.maybe >> queue.maybe >> server.maybe >>
175
- checkpoint.maybe >> ctime.maybe >> error_path.maybe >> exec_host.maybe >> exec_port.maybe >> hold_types.maybe >>
176
- join_path.maybe >> keep_files.maybe >> mail_points.maybe >> mail_users.maybe >> mtime.maybe >> output_path.maybe >>
177
- tab.maybe >> newline? >> priority.maybe >> qtime.maybe >> rerunable.maybe >>
178
- resource_list.maybe >> session_id.maybe >> substate.maybe >> shell_path_list.maybe >>
179
- variable_list.maybe >>
180
- euser.maybe >> egroup.maybe >> hashname.maybe >>
181
- queue_rank.maybe >> queue_type.maybe >>
182
- comment.maybe >> etime.maybe >> exit_status.maybe >>
183
- submit_args.maybe >> start_time .maybe >>
184
- walltime_remaining.maybe >> start_count.maybe >> fault_tolerant.maybe >> comp_time.maybe >> job_radix.maybe >> total_runtime.maybe >>
185
- submit_host.maybe >> nppcu.maybe >>
186
- newline?
187
- }
188
-
189
-
190
- end #Parser
191
-
192
- class Trans < Parslet::Transform
193
- rule(:datetime => simple(:datetime)) {DateTime.parse(datetime)}
194
- rule(:string => simple(:string)) {String(string)}
195
- rule(:integer => simple(:integer)) {Integer(integer)}
196
- rule(:boolean => simple(:boolean)) {String(boolean) == "True"}
197
- end #Trans
152
+ # class Parser < Parslet::Parser
153
+ # rule(:newline) { match('\n').repeat(1) }
154
+ # rule(:space) { match('\s').repeat }
155
+ # rule(:space?) { space.maybe }
156
+ # rule(:tab) { match('\t').repeat(1) }
157
+ # rule(:newline?) { newline.maybe }
158
+ # rule(:value) { match('[a-zA-Z0-9\.\_\@\/\+ \,\-:=]').repeat }
159
+ # rule(:qstat) { job_id.repeat }
160
+ # rule(:resource_list_name) { str("Resource_List") >> str(".") >> (match('[a-zA-Z]').repeat(1).as(:string)).as(:name) }
161
+ # rule(:split_assignment) { (space >> str("=") >> space).repeat(1) }
162
+ # root(:qstat)
163
+
164
+ # rule(:variable_item){ tab >> value >> newline }
165
+ # rule(:variable_items) { variable_item.repeat }
166
+ # rule(:variable_list_items) { value >> newline >> variable_items.maybe}
167
+
168
+
169
+ # rule(:job_id) {(str("Job Id:") >> space >> value.as(:string)).as(:job_id) >> newline? >> fields.maybe >> newline? }
170
+ # rule(:job_name) {(space >> str("Job_Name = ") >> value.as(:string) >> newline).as(:job_name)}
171
+ # rule(:job_owner) {(space >> str("Job_Owner = ") >> value.as(:string) >> newline).as(:job_owner)}
172
+ # rule(:resources_used_cput) {(space >> str("resources_used.cput = ") >> value.as(:string) >> newline).as(:resources_used_cput)}
173
+ # rule(:resources_used_mem) {(space >> str("resources_used.mem = ") >> value.as(:string) >> newline).as(:resources_used_mem)}
174
+ # rule(:resources_used_vmem) {(space >> str("resources_used.vmem = ") >> value.as(:string) >> newline).as(:resources_used_vmem)}
175
+ # rule(:resources_used_walltime) {(space >> str("resources_used.walltime = ") >> value.as(:string) >> newline).as(:resources_used_walltime)}
176
+ # rule(:job_state) {(space >> str("job_state = ") >> value.as(:string) >> newline).as(:job_state)}
177
+ # rule(:queue) {(space >> str("queue = ") >> value.as(:string) >> newline).as(:queue)}
178
+ # rule(:server) {(space >> str("server = ") >> value.as(:string) >> newline).as(:server)}
179
+ # rule(:checkpoint) {(space >> str("Checkpoint = ") >> value.as(:string) >> newline).as(:checkpoint)}
180
+ # rule(:ctime) {(space >> str("ctime = ") >> value.as(:datetime) >> newline).as(:ctime)}
181
+ # rule(:error_path) {(space >> str("Error_Path = ") >> value.as(:string) >> newline).as(:error_path)}
182
+ # rule(:exec_host) {(space >> str("exec_host = ") >> value.as(:string) >> newline).as(:exec_host)}
183
+ # rule(:exec_port) {(space >> str("exec_port = ") >> value.as(:string) >> newline).as(:exec_port)}
184
+ # rule(:hold_types) {(space >> str("Hold_Types = ") >> value.as(:string) >> newline).as(:hold_types)}
185
+ # rule(:join_path) {(space >> str("Join_Path = ") >> value.as(:string) >> newline).as(:join_path)}
186
+ # rule(:keep_files) {(space >> str("Keep_Files = ") >> value.as(:string) >> newline).as(:keep_files)}
187
+ # rule(:mail_points) {(space >> str("Mail_Points = ") >> value.as(:string) >> newline).as(:mail_points)}
188
+ # rule(:mail_users) {(space >> str("Mail_Users = ") >> value.as(:string) >> newline).as(:mail_users)}
189
+ # rule(:mail_users?) {mail_users.maybe }
190
+ # rule(:mtime) {(space >> str("mtime = ") >> value.as(:datetime) >> newline).as(:mtime)}
191
+ # rule(:output_path) {(space >> str("Output_Path = ") >> value.as(:string) >> newline).as(:output_path)}
192
+ # rule(:priority) {(space >> str("Priority = ") >> value.as(:integer) >> newline).as(:priority)}
193
+ # rule(:qtime) {(space >> str("qtime = ") >> value.as(:datetime) >> newline).as(:qtime)}
194
+ # rule(:rerunable) {(space >> str("Rerunable = ") >> value.as(:boolean) >> newline).as(:rerunable)}
195
+
196
+ # rule(:resource) {(space >> resource_list_name >> str(" = ") >> (value.as(:string)).as(:value) >> newline).as(:resource)}
197
+ # rule(:resource_list) { resource.repeat.as(:resource_list)}
198
+
199
+ # rule(:session_id) {(space >> str("session_id = ") >> value.as(:integer) >> newline?).as(:session_id)}
200
+ # rule(:substate) {(space >> str("substate = ") >> value.as(:integer) >> newline?).as(:substate)} # Torque 2.4.16
201
+ # rule(:shell_path_list) {(space >> str("Shell_Path_List = ") >> value.as(:string) >> newline?).as(:shell_path_list)}
202
+ # rule(:variable_list) {(space >> str("Variable_List = ") >> variable_list_items.as(:string) >> newline?).as(:variable_list)}
203
+ # rule(:euser) {(space >> str("euser = ") >> value.as(:string) >> newline?).as(:euser)} # Torque 2.4.16
204
+ # rule(:egroup) {(space >> str("egroup = ") >> value.as(:string) >> newline?).as(:egroup)} # Torque 2.4.16
205
+ # rule(:hashname) {(space >> str("hashname = ") >> value.as(:string) >> newline?).as(:hashname)} # Torque 2.4.16
206
+ # rule(:queue_rank) {(space >> str("queue_rank = ") >> value.as(:string) >> newline?).as(:queue_rank)} # Torque 2.4.16
207
+ # rule(:queue_type) {(space >> str("queue_type = ") >> value.as(:string) >> newline?).as(:queue_type)} # Torque 2.4.16
208
+ # rule(:comment) {(space >> str("comment = ") >> value.as(:string) >> newline?).as(:comment)} # Torque 2.4.16
209
+ # rule(:etime) {(space >> str("etime = ") >> value.as(:datetime) >> newline?).as(:etime)}
210
+ # rule(:exit_status) {(space >> str("exit_status = ") >> value.as(:string) >> newline?).as(:exit_status)}
211
+ # rule(:submit_args) {(space >> str("submit_args = ") >> value.as(:string) >> newline?).as(:submit_args)}
212
+ # rule(:start_time) {(space >> str("start_time = ") >> value.as(:datetime) >> newline?).as(:start_time)}
213
+ # rule(:walltime_remaining) {(space >> str("Walltime.Remaining = ") >> value.as(:integer) >> newline?).as(:walltime_remaining)} # Torque 2.4.16
214
+ # rule(:start_count) {(space >> str("start_count = ") >> value.as(:integer) >> newline?).as(:start_count)}
215
+ # rule(:fault_tolerant) {(space >> str("fault_tolerant = ") >> value.as(:boolean) >> newline?).as(:fault_tolerant)}
216
+ # rule(:comp_time) {(space >> str("comp_time = ") >> value.as(:datetime) >> newline?).as(:comp_time)}
217
+ # rule(:job_radix) {(space >> str("job_radix = ") >> value.as(:string) >> newline?).as(:job_radix)}
218
+ # rule(:total_runtime) {(space >> str("total_runtime = ") >> value.as(:string) >> newline?).as(:total_runtime)}
219
+ # rule(:submit_host) {(space >> str("submit_host = ") >> value.as(:string) >> newline?).as(:submit_host)}
220
+ # rule(:nppcu) {(space >> str("nppcu = ") >> value.as(:integer) >> newline?).as(:nppcu)} #Torque 4.2.5 / Maui 3.3.1
221
+
222
+ # # a lot of maybe, maybe everything
223
+
224
+ # rule(:fields) { job_name.maybe >> job_owner.maybe >> resources_used_cput.maybe >> resources_used_mem.maybe >>
225
+ # resources_used_vmem.maybe >> resources_used_walltime.maybe >> job_state.maybe >> queue.maybe >> server.maybe >>
226
+ # checkpoint.maybe >> ctime.maybe >> error_path.maybe >> exec_host.maybe >> exec_port.maybe >> hold_types.maybe >>
227
+ # join_path.maybe >> keep_files.maybe >> mail_points.maybe >> mail_users.maybe >> mtime.maybe >> output_path.maybe >>
228
+ # tab.maybe >> newline? >> priority.maybe >> qtime.maybe >> rerunable.maybe >>
229
+ # resource_list.maybe >> session_id.maybe >> substate.maybe >> shell_path_list.maybe >>
230
+ # variable_list.maybe >>
231
+ # euser.maybe >> egroup.maybe >> hashname.maybe >>
232
+ # queue_rank.maybe >> queue_type.maybe >>
233
+ # comment.maybe >> etime.maybe >> exit_status.maybe >>
234
+ # submit_args.maybe >> start_time .maybe >>
235
+ # walltime_remaining.maybe >> start_count.maybe >> fault_tolerant.maybe >> comp_time.maybe >> job_radix.maybe >> total_runtime.maybe >>
236
+ # submit_host.maybe >> nppcu.maybe >>
237
+ # newline?
238
+ # }
239
+
240
+
241
+ # end #Parser
242
+
243
+ # class Trans < Parslet::Transform
244
+ # rule(:datetime => simple(:datetime)) {DateTime.parse(datetime)}
245
+ # rule(:string => simple(:string)) {String(string)}
246
+ # rule(:integer => simple(:integer)) {Integer(integer)}
247
+ # rule(:boolean => simple(:boolean)) {String(boolean) == "True"}
248
+ # end #Trans
198
249
 
199
250
 
200
251
  def initialize
201
- @parser = Parser.new
202
- @transformer = Trans.new
252
+ # @parser = Parser.new #DEPRECATED
253
+ # @transformer = Trans.new #DEPRECATED
203
254
  @last_query = nil #cache last query, it can be useful to generate some kind of statistics ?
204
255
  end #initialize
205
256
 
@@ -210,45 +261,56 @@ module TORQUE
210
261
  def fields
211
262
  FIELDS
212
263
  end
264
+
213
265
  # hash can contain keys:
214
266
  # type = :raw just print a string
215
267
  # job_id = job.id it will print info only about the specified job
216
268
  # job_ids = ["1.server", "2.server", "3.server"] get an array for requested jobs
269
+ # returns results which is an Array of Job
217
270
  def query(hash={})
218
- result = TORQUE.server.qstat("-f")
219
- results = nil
271
+ # result = TORQUE.server.qstat('-f')
220
272
  if hash[:type] == :raw
221
- result.to_s
273
+ TORQUE.server.qstat('-f').to_s #returns
274
+ elsif hash[:type] == :xml
275
+ TORQUE.server.qstat('-f','-x') #returns
222
276
  else
277
+ # begin
278
+ data_xml = Hash.from_xml(TORQUE.server.qstat('-f','-x').to_s)
279
+ @last_query = if data_xml.nil?
280
+ [] #returns
281
+ else
282
+ data_array = data_xml["Data"]["Job"].is_a?(Hash) ? [data_xml["Data"]["Job"]] : data_xml["Data"]["Job"]
283
+ jobs = data_array.map do |job_xml|
284
+ Job.new job_xml
285
+ end # do
286
+ if hash.key? :job_id
287
+ # if hash[:job_id]..is_a? String
288
+ jobs.select! {|job| (hash[:job_id].to_s == job.job_id || hash[:job_id].to_s == job.job_id.split(".").first)}
289
+ # else
290
+ # warn "You gave me #{hash[:job_id].class}, only String is supported."
291
+ # end
292
+ elsif hash.key? :job_ids
293
+ if hash[:job_ids].is_a? Array
294
+ jobs.select! {|job| (hash[:job_ids].include?(job.job_id) || hash[:job_ids].include?(job.job_id.split(".").first))}
295
+ elsif hash[:job_ids].is_a? String
296
+ warn "To be implemented for String object."
297
+ else
298
+ warm "To be implemented for #{hash[:job_ids].class}"
299
+ end
300
+ else
301
+ jobs
302
+ end
303
+ end # else
223
304
 
224
- begin
225
305
  # puts result.to_s.inspect
226
306
  # puts result.to_s.gsub(/\n\t/,'').inspect
227
- results = @transformer.apply(@parser.parse(result.to_s.gsub(/\n\t/,'')))
228
- rescue Parslet::ParseFailed => failure
229
- puts failure.cause.ascii_tree
230
- end
307
+ # results = @transformer.apply(@parser.parse(result.to_s.gsub(/\n\t/,'')))
308
+ # rescue Parslet::ParseFailed => failure
309
+ # puts failure.cause.ascii_tree
310
+ # end
231
311
 
232
- results = [] if results.is_a?(String) && results.empty?
233
- if hash.key? :job_id
234
- # if hash[:job_id]..is_a? String
235
-
236
- results.select! {|j| (hash[:job_id].to_s == j[:job_id] || hash[:job_id].to_s == j[:job_id].to_s.split(".").first)}
237
- # else
238
- # warn "You gave me #{hash[:job_id].class}, only String is supported."
239
- # end
240
- elsif hash.key? :job_ids
241
- if hash[:job_ids].is_a? Array
242
- results.select! {|j| (hash[:job_ids].include?(j[:job_id].to_s) || hash[:job_ids].include?(j[:job_id].to_s.split(".").first))}
243
- elsif hash[:job_ids].is_a? String
244
- warn "To be implemented for String object."
245
- else
246
- warm "To be implemented for #{hash[:job_ids].class}"
247
- end
248
- else
249
- results
250
- end
251
- @last_query = from_parselet_to_jobs(results)
312
+ # results = [] if results.is_a?(String) && results.empty?
313
+ # @last_query = from_parselet_to_jobs(results)
252
314
  end
253
315
  end #query
254
316
 
@@ -284,19 +346,21 @@ private
284
346
  else
285
347
  jobs_info.each do |job|
286
348
  line = [job.job_id.split(".").first,job.job_name,job.node,job.procs,"#{job.memory} mb","#{job.time}",job.queue,job.job_state]
349
+ # puts line.inspect
350
+ # puts line[-1]
287
351
  if job.completed?
288
- line[-1] = "Completed"; rows << line.map {|l| l.underline}
352
+ line[-1] = "Completed"; rows << line.map {|l| l.to_s.underline}
289
353
  elsif job.queued?
290
- line[-1] = "Queued"; rows << line.map {|l| l.light_blue}
354
+ line[-1] = "Queued"; rows << line.map {|l| l.to_s.light_blue}
291
355
  elsif job.running?
292
- line[-1] = "Running"; rows << line.map {|l| l.green}
356
+ line[-1] = "Running"; rows << line.map {|l| l.to_s.green}
293
357
  elsif job.exited?
294
- line[-1] = "Exiting"; rows << line.map {|l| l.green.blink}
358
+ line[-1] = "Exiting"; rows << line.map {|l| l.to_s.green.blink}
295
359
  else
296
- rows << line.map {|l| l.red.blink}
360
+ rows << line.map {|l| l.to_s.red.blink}
297
361
  end
298
362
  end
299
- print "\nSummary of submitted jobs for user: ".light_blue+"#{jobs_info.first[:job_owner].split("@").first.green}\n\n"
363
+ print "\nSummary of submitted jobs for user: ".light_blue+"#{jobs_info.first.job_owner.split("@").first.green}\n\n"
300
364
  table = Terminal::Table.new :headings => headings, :rows => rows
301
365
  Range.new(0,table.number_of_columns-1).to_a.each {|c| table.align_column(c,:center) } # set all columns alignment to :center
302
366
  puts table
data/torque_rm.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "torque_rm"
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Raoul Jean Pierre Bonnal"]
12
- s.date = "2013-09-12"
12
+ s.date = "2013-09-17"
13
13
  s.description = "TORQUE Resource Manager for Ruby. Submit, check and control your job directly from Ruby."
14
14
  s.email = "ilpuccio.febo@gmail.com"
15
15
  s.executables = ["torque_rm_rest"]
@@ -65,6 +65,7 @@ Gem::Specification.new do |s|
65
65
  s.add_runtime_dependency(%q<shotgun>, [">= 0"])
66
66
  s.add_runtime_dependency(%q<haml>, [">= 0"])
67
67
  s.add_runtime_dependency(%q<sinatra-twitter-bootstrap>, [">= 0"])
68
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
68
69
  s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
69
70
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
70
71
  s.add_development_dependency(%q<cucumber>, [">= 0"])
@@ -80,6 +81,7 @@ Gem::Specification.new do |s|
80
81
  s.add_dependency(%q<shotgun>, [">= 0"])
81
82
  s.add_dependency(%q<haml>, [">= 0"])
82
83
  s.add_dependency(%q<sinatra-twitter-bootstrap>, [">= 0"])
84
+ s.add_dependency(%q<activesupport>, [">= 0"])
83
85
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
84
86
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
85
87
  s.add_dependency(%q<cucumber>, [">= 0"])
@@ -96,6 +98,7 @@ Gem::Specification.new do |s|
96
98
  s.add_dependency(%q<shotgun>, [">= 0"])
97
99
  s.add_dependency(%q<haml>, [">= 0"])
98
100
  s.add_dependency(%q<sinatra-twitter-bootstrap>, [">= 0"])
101
+ s.add_dependency(%q<activesupport>, [">= 0"])
99
102
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
100
103
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
101
104
  s.add_dependency(%q<cucumber>, [">= 0"])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torque_rm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raoul Jean Pierre Bonnal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-12 00:00:00.000000000 Z
11
+ date: 2013-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rye
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: activesupport
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rspec
141
155
  requirement: !ruby/object:Gem::Requirement