Class: TORQUE::Qstat

Inherits:
Object
  • Object
show all
Defined in:
lib/torque_rm/qstat.rb

Defined Under Namespace

Classes: EnanchedOpenStruct, Job

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeQstat

Returns a new instance of Qstat.



251
252
253
254
255
# File 'lib/torque_rm/qstat.rb', line 251

def initialize
    # @parser = Parser.new #DEPRECATED
    # @transformer = Trans.new #DEPRECATED
    @last_query = nil #cache last query, it can be useful to generate some kind of statistics ? 
end

Class Method Details

.fieldsObject

initialize



257
258
259
# File 'lib/torque_rm/qstat.rb', line 257

def self.fields
  FIELDS
end

Instance Method Details

#display(hash = {}) ⇒ Object

query



317
318
319
320
# File 'lib/torque_rm/qstat.rb', line 317

def display(hash={})
  query(hash)
  print_jobs_table(@last_query)
end

#fieldsObject



261
262
263
# File 'lib/torque_rm/qstat.rb', line 261

def fields
  FIELDS
end

#mock(results) ⇒ Object



322
323
324
# File 'lib/torque_rm/qstat.rb', line 322

def mock(results)
  from_parselet_to_jobs(results)
end

#query(hash = {}) ⇒ Object

hash can contain keys: type = :raw just print a string job_id = job.id it will print info only about the specified job job_ids = [“1.server”, “2.server”, “3.server”] get an array for requested jobs returns results which is an Array of Job



270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
# File 'lib/torque_rm/qstat.rb', line 270

def query(hash={})
    # result = TORQUE.server.qstat('-f')
    if hash[:type] == :raw
      TORQUE.server.qstat('-f').to_s  #returns
    elsif hash[:type] == :xml
      TORQUE.server.qstat('-f','-x')  #returns
    else
      # begin
        data_xml = Hash.from_xml(TORQUE.server.qstat('-f','-x').to_s)
        @last_query = if data_xml.nil?
          [] #returns
        else
          data_array = data_xml["Data"]["Job"].is_a?(Hash) ? [data_xml["Data"]["Job"]] : data_xml["Data"]["Job"]
          jobs = data_array.map do |job_xml|
            Job.new job_xml
          end # do
          if hash.key? :job_id
            # if hash[:job_id]..is_a? String
              jobs.select! {|job| (hash[:job_id].to_s == job.job_id || hash[:job_id].to_s == job.job_id.split(".").first)}
            # else
              # warn "You gave me #{hash[:job_id].class}, only String is supported."
            # end
          elsif hash.key? :job_ids
            if hash[:job_ids].is_a? Array
              jobs.select! {|job| (hash[:job_ids].include?(job.job_id) || hash[:job_ids].include?(job.job_id.split(".").first))}
            elsif hash[:job_ids].is_a? String
              warn "To be implemented for String object."
            else
              warm "To be implemented for #{hash[:job_ids].class}"
            end 
          else
            jobs
          end
        end # else

        # puts result.to_s.inspect
        # puts result.to_s.gsub(/\n\t/,'').inspect
        # results = @transformer.apply(@parser.parse(result.to_s.gsub(/\n\t/,'')))
      # rescue Parslet::ParseFailed => failure
      #   puts failure.cause.ascii_tree
      # end

      # results = [] if results.is_a?(String) && results.empty?
    # @last_query = from_parselet_to_jobs(results)
    end
end