Class: ScraperUtils::Scheduler::ThreadRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/scraper_utils/scheduler/thread_request.rb

Overview

Encapsulates a request that pushed to the fiber’s request queue to be executed by the Fiber’s Thread The response is returned via the Scheduler’s response queue

See Also:

  • {ProcessRequest}

Direct Known Subclasses

ProcessRequest

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(authority) ⇒ ThreadRequest

Initialize a new process request

Parameters:

  • authority (Symbol, nil)

    Authority for correlating requests and responses



17
18
19
# File 'lib/scraper_utils/scheduler/thread_request.rb', line 17

def initialize(authority)
  @authority = authority
end

Instance Attribute Details

#authoritySymbol (readonly)

Returns Authority for correlating requests and responses.

Returns:

  • (Symbol)

    Authority for correlating requests and responses



12
13
14
# File 'lib/scraper_utils/scheduler/thread_request.rb', line 12

def authority
  @authority
end

Instance Method Details

#executeObject

Execute a request and return ThreadResponse - use helper method ‘.execute_block`

Raises:

  • (NotImplementedError)


22
23
24
# File 'lib/scraper_utils/scheduler/thread_request.rb', line 22

def execute
  raise NotImplementedError, "Implement in subclass"
end

#execute_blockThreadResponse

Execute a request by calling the block

Returns:



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/scraper_utils/scheduler/thread_request.rb', line 28

def execute_block
  start_time = Time.now
  begin
    result = yield
    elapsed_time = Time.now - start_time
    ThreadResponse.new(
      authority,
      result,
      nil,
      elapsed_time
    )
  rescue => e
    elapsed_time = Time.now - start_time
    ThreadResponse.new(
      authority,
      nil,
      e,
      elapsed_time
    )
  end
end