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)


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

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
  @auto_update_status = true
end

Instance Attribute Details

#db_nameObject (readonly)

Returns the value of attribute db_name.



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

attr_reader :job_id, :type, :result_url

#durationObject (readonly)

Returns the value of attribute duration.



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

attr_reader :job_id, :type, :result_url

#job_idObject (readonly)



441
442
443
# File 'lib/td/client/model.rb', line 441

def job_id
  @job_id
end

#num_recordsObject (readonly)

Returns the value of attribute num_records.



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

attr_reader :job_id, :type, :result_url

#org_nameObject (readonly)

Returns the value of attribute org_name.



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

attr_reader :job_id, :type, :result_url

#priorityObject (readonly)

Returns the value of attribute priority.



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

attr_reader :job_id, :type, :result_url

#result_urlObject (readonly)

Returns the value of attribute result_url.



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

attr_reader :job_id, :type, :result_url

#retry_limitObject (readonly)

Returns the value of attribute retry_limit.



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

attr_reader :job_id, :type, :result_url

#typeObject (readonly)



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

attr_reader :job_id, :type, :result_url

Instance Method Details

#auto_update_status=(bool) ⇒ Object

set whether it update status if the job is not finished yet or not



451
452
453
# File 'lib/td/client/model.rb', line 451

def auto_update_status=(bool)
  @auto_update_status = bool ? true : false
end

#auto_update_status?Boolean

whether it update status if the job is not finished yet or not

Returns:

  • (Boolean)


446
447
448
# File 'lib/td/client/model.rb', line 446

def auto_update_status?
  @auto_update_status
end

#cpu_timeString

Returns:

  • (String)


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

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

#debugBoolean

Returns:

  • (Boolean)


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

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

#end_atTime?

Returns:

  • (Time, nil)


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

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

#error?Boolean

Returns:

  • (Boolean)


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

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

#finished?Boolean

Returns:

  • (Boolean)


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

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

#hive_result_schemaArray

Returns:

  • (Array)


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

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

#kill!Object



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

def kill!
  # TODO
end

#killed?Boolean

Returns:

  • (Boolean)


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

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

#queryString

Returns:

  • (String)


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

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

#queued?Boolean

Returns:

  • (Boolean)


615
616
617
618
# File 'lib/td/client/model.rb', line 615

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

#resultArray

Returns:

  • (Array)


546
547
548
549
550
551
552
# File 'lib/td/client/model.rb', line 546

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

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

Yields:

Returns:

  • (nil)


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

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)


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

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)


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

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



563
564
565
566
# File 'lib/td/client/model.rb', line 563

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)


540
541
542
543
# File 'lib/td/client/model.rb', line 540

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

#running?Boolean

Returns:

  • (Boolean)


621
622
623
624
# File 'lib/td/client/model.rb', line 621

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

#start_atTime?

Returns:

  • (Time, nil)


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

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

#statusString

Returns:

  • (String)


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

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

#success?Boolean

Returns:

  • (Boolean)


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

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

#update_progress!Object



626
627
628
# File 'lib/td/client/model.rb', line 626

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

#update_status!Object



630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
# File 'lib/td/client/model.rb', line 630

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 , duration, 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
  @duration = duration
  @num_records = num_records
  self
end

#urlString

Returns:

  • (String)


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

def url
  update_status! unless @url || !@auto_update_status || 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



459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
# File 'lib/td/client/model.rb', line 459

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 Errno::ECONNREFUSED, Errno::ECONNRESET, Timeout::Error, EOFError,
    SystemCallError, OpenSSL::SSL::SSLError, SocketError, HTTPClient::TimeoutError
    $stderr.puts "ignore network error (#{$!}); retry..." if verbose
  end until finished?
end