torque_rm 0.1.0 → 0.2.0

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