Class: TreasureData::Job

Inherits:
Model
  • Object
show all
Defined in:
lib/td/client/model.rb

Direct Known Subclasses

ScheduledJob

Constant Summary collapse

STATUS_QUEUED =
"queued"
STATUS_BOOTING =
"booting"
STATUS_RUNNING =
"running"
STATUS_SUCCESS =
"success"
STATUS_ERROR =
"error"
STATUS_KILLED =
"killed"
FINISHED_STATUS =
[STATUS_SUCCESS, STATUS_ERROR, STATUS_KILLED]

Instance Attribute Summary collapse

Attributes inherited from Model

#client

Instance Method Summary collapse

Constructor Details

#initialize(client, job_id, type, query, status = nil, url = nil, debug = nil, start_at = nil, end_at = nil, cpu_time = nil, result_size = nil, result = nil, result_url = nil, hive_result_schema = nil, priority = nil, retry_limit = nil, org_name = nil, db_name = nil, duration = nil, num_records = nil) ⇒ Job

Returns a new instance of Job.

Parameters:

  • client (TreasureData::Client)
  • job_id (String)
  • type (String)
  • query (String)
  • status (Fixnum) (defaults to: nil)
  • url (String) (defaults to: nil)
  • debug (Boolean) (defaults to: nil)
  • start_at (String) (defaults to: nil)
  • end_at (String) (defaults to: nil)
  • cpu_time (String) (defaults to: nil)
  • result_size (String) (defaults to: nil)
  • result (Array) (defaults to: nil)
  • result_url (String) (defaults to: nil)
  • hive_result_schema (Array) (defaults to: nil)
  • priority (Fixnum) (defaults to: nil)
  • retry_limit (Fixnum) (defaults to: nil)
  • org_name (String) (defaults to: nil)
  • db_name (String) (defaults to: nil)
  • duration (Fixnum) (defaults to: nil)
  • num_records (Fixnum) (defaults to: nil)


406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
# File 'lib/td/client/model.rb', line 406

def initialize(client, job_id, type, query, status=nil, url=nil, debug=nil, start_at=nil, end_at=nil, cpu_time=nil,
               result_size=nil, result=nil, result_url=nil, hive_result_schema=nil, priority=nil, retry_limit=nil,
               org_name=nil, db_name=nil, duration=nil, num_records=nil)
  super(client)
  @job_id = job_id
  @type = type
  @url = url
  @query = query
  @status = status
  @debug = debug
  @start_at = start_at
  @end_at = end_at
  @cpu_time = cpu_time
  @result_size = result_size
  @result = result
  @result_url = result_url
  @hive_result_schema = hive_result_schema
  @priority = priority
  @retry_limit = retry_limit
  @db_name = db_name
  @duration = duration
  @num_records = num_records
end

Instance Attribute Details

#db_nameObject (readonly)

Returns the value of attribute db_name.



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

#durationObject (readonly)

Returns the value of attribute duration.



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

#job_idObject (readonly)



439
440
441
# File 'lib/td/client/model.rb', line 439

def job_id
  @job_id
end

#num_recordsObject (readonly)

Returns the value of attribute num_records.



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

#org_nameObject (readonly)

Returns the value of attribute org_name.



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

#priorityObject (readonly)

Returns the value of attribute priority.



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

#result_urlObject (readonly)

Returns the value of attribute result_url.



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

#retry_limitObject (readonly)

Returns the value of attribute retry_limit.



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

#typeObject (readonly)



439
# File 'lib/td/client/model.rb', line 439

attr_reader :job_id, :type, :result_url

Instance Method Details

#cpu_timeString

Returns:

  • (String)


515
516
517
518
# File 'lib/td/client/model.rb', line 515

def cpu_time
  update_status! unless @cpu_time || finished?
  @cpu_time
end

#debugBoolean

Returns:

  • (Boolean)


497
498
499
500
# File 'lib/td/client/model.rb', line 497

def debug
  update_status! unless @debug || finished?
  @debug
end

#end_atTime?

Returns:

  • (Time, nil)


509
510
511
512
# File 'lib/td/client/model.rb', line 509

def end_at
  update_status! unless @end_at || finished?
  @end_at && !@end_at.empty? ? Time.parse(@end_at) : nil
end

#error?Boolean

Returns:

  • (Boolean)


590
591
592
593
# File 'lib/td/client/model.rb', line 590

def error?
  update_progress! unless @status
  @status == STATUS_ERROR
end

#finished?Boolean

Returns:

  • (Boolean)


578
579
580
581
# File 'lib/td/client/model.rb', line 578

def finished?
  update_progress! unless @status
  FINISHED_STATUS.include?(@status)
end

#hive_result_schemaArray

Returns:

  • (Array)


521
522
523
524
# File 'lib/td/client/model.rb', line 521

def hive_result_schema
  update_status! unless @hive_result_schema.instance_of? Array || finished?
  @hive_result_schema
end

#kill!Object



474
475
476
# File 'lib/td/client/model.rb', line 474

def kill!
  # TODO
end

#killed?Boolean

Returns:

  • (Boolean)


596
597
598
599
# File 'lib/td/client/model.rb', line 596

def killed?
  update_progress! unless @status
  @status == STATUS_KILLED
end

#queryString

Returns:

  • (String)


479
480
481
482
# File 'lib/td/client/model.rb', line 479

def query
  update_status! unless @query || finished?
  @query
end

#queued?Boolean

Returns:

  • (Boolean)


602
603
604
605
# File 'lib/td/client/model.rb', line 602

def queued?
  update_progress! unless @status
  @status == STATUS_QUEUED
end

#resultArray

Returns:

  • (Array)


533
534
535
536
537
538
539
# File 'lib/td/client/model.rb', line 533

def result
  unless @result
    return nil unless finished?
    @result = @client.job_result(@job_id)
  end
  @result
end

#result_each {|result| ... } ⇒ nil

Yields:

Returns:

  • (nil)


568
569
570
571
572
573
574
575
# File 'lib/td/client/model.rb', line 568

def result_each(&block)
  if @result
    @result.each(&block)
  else
    @client.job_result_each(@job_id, &block)
  end
  nil
end

#result_each_with_compr_size {|result| ... } ⇒ nil

Yields:

Returns:

  • (nil)


557
558
559
560
561
562
563
564
# File 'lib/td/client/model.rb', line 557

def result_each_with_compr_size(&block)
  if @result
    @result.each(&block)
  else
    @client.job_result_each_with_compr_size(@job_id, &block)
  end
  nil
end

#result_format(format, io = nil, &block) ⇒ nil, String

Parameters:

  • format (String)
  • io (IO) (defaults to: nil)
  • block (Proc)

Returns:

  • (nil, String)


545
546
547
548
# File 'lib/td/client/model.rb', line 545

def result_format(format, io=nil, &block)
  return nil unless finished?
  @client.job_result_format(@job_id, format, io, &block)
end

#result_raw(format, io = nil, &block) ⇒ Object



550
551
552
553
# File 'lib/td/client/model.rb', line 550

def result_raw(format, io=nil, &block)
  return nil unless finished?
  @client.job_result_raw(@job_id, format, io, &block)
end

#result_sizeString

Returns:

  • (String)


527
528
529
530
# File 'lib/td/client/model.rb', line 527

def result_size
  update_status! unless @result_size || finished?
  @result_size
end

#running?Boolean

Returns:

  • (Boolean)


608
609
610
611
# File 'lib/td/client/model.rb', line 608

def running?
  update_progress! unless @status
  @status == STATUS_RUNNING
end

#start_atTime?

Returns:

  • (Time, nil)


503
504
505
506
# File 'lib/td/client/model.rb', line 503

def start_at
  update_status! unless @start_at || finished?
  @start_at && !@start_at.empty? ? Time.parse(@start_at) : nil
end

#statusString

Returns:

  • (String)


485
486
487
488
# File 'lib/td/client/model.rb', line 485

def status
  update_status! unless @status || finished?
  @status
end

#success?Boolean

Returns:

  • (Boolean)


584
585
586
587
# File 'lib/td/client/model.rb', line 584

def success?
  update_progress! unless @status
  @status == STATUS_SUCCESS
end

#update_progress!Object



613
614
615
# File 'lib/td/client/model.rb', line 613

def update_progress!
  @status = @client.job_status(@job_id)
end

#update_status!Object



617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
# File 'lib/td/client/model.rb', line 617

def update_status!
  type, query, status, url, debug, start_at, end_at, cpu_time,
    result_size, result_url, hive_result_schema, priority, retry_limit,
    org_name, db_name , num_records = @client.api.show_job(@job_id)
  @query = query
  @status = status
  @url = url
  @debug = debug
  @start_at = start_at
  @end_at = end_at
  @cpu_time = cpu_time
  @result_size = result_size
  @result_url = result_url
  @hive_result_schema = hive_result_schema
  @priority = priority
  @retry_limit = retry_limit
  @db_name = db_name
  @num_records = num_records
  self
end

#urlString

Returns:

  • (String)


491
492
493
494
# File 'lib/td/client/model.rb', line 491

def url
  update_status! unless @url || finished?
  @url
end

#wait(*args) ⇒ Object

Parameters:

  • detail (Boolean)

    update job detail or not

  • verbose (Boolean)

    out retry log to stderr or not

  • timeout (Hash)

    a customizable set of options

  • wait_interval (Hash)

    a customizable set of options



447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
# File 'lib/td/client/model.rb', line 447

def wait(*args)
  opthash = Hash.try_convert(args.last)
  if opthash
    args.pop
    detail = opthash.fetch(:detail, false)
    verbose = opthash.fetch(:verbose, ENV['TD_CLIENT_DEBUG'])
  end
  timeout = args[0]
  wait_interval = args[1] || 2
  deadline = monotonic_clock + timeout if timeout
  timeout_klass = Class.new(Exception)
  begin
    if timeout
      if deadline <= monotonic_clock
        raise timeout_klass, "timeout (#{timeout}) exceeded wait_interval=#{wait_interval}"
      end
    end
    sleep wait_interval
    detail ? update_status! : update_progress!
    yield self if block_given?
  rescue timeout_klass
    raise Timeout::Error, $!.message
  rescue Timeout::Error, SystemCallError, EOFError, SocketError, HTTPClient::ConnectTimeoutError
    $stderr.puts "ignore network error (#{$!}); retry..." if verbose
  end until finished?
end