Class: SimpleMapReduce::Server::JobWorker

Inherits:
Sinatra::Base
  • Object
show all
Defined in:
lib/simple_map_reduce/server/job_worker.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.workerObject (readonly)

Returns the value of attribute worker.



66
67
68
# File 'lib/simple_map_reduce/server/job_worker.rb', line 66

def worker
  @worker
end

.worker_idObject (readonly)

Returns the value of attribute worker_id.



65
66
67
# File 'lib/simple_map_reduce/server/job_worker.rb', line 65

def worker_id
  @worker_id
end

Class Method Details

.check_s3_accessObject



78
79
80
81
# File 'lib/simple_map_reduce/server/job_worker.rb', line 78

def check_s3_access
  s3_client.list_buckets
  logger.info('[OK] s3 connection test')
end

.http_clientObject



102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/simple_map_reduce/server/job_worker.rb', line 102

def http_client
  @http_client ||= ::Faraday.new(
    url: SimpleMapReduce.job_tracker_url,
    headers: {
      'Accept' => 'application/json',
        'Content-Type' => 'application/json'
    }
  ) do |faraday|
    faraday.response :raise_error
    faraday.adapter  Faraday.default_adapter
  end
end

.job_managerObject



98
99
100
# File 'lib/simple_map_reduce/server/job_worker.rb', line 98

def job_manager
  @job_manager ||= ::Rasteira::EmbedWorker::Manager.run
end

.loggerObject



119
120
121
# File 'lib/simple_map_reduce/server/job_worker.rb', line 119

def logger
  SimpleMapReduce.logger
end

.quit!Object



125
126
127
128
# File 'lib/simple_map_reduce/server/job_worker.rb', line 125

def quit!
  job_manager&.shutdown_workers!
  super
end

.register_myself_to_job_trackerObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/simple_map_reduce/server/job_worker.rb', line 83

def register_myself_to_job_tracker
  response = http_client.post do |request|
    request.url('/workers')
    request.body = { url: SimpleMapReduce.job_worker_url }.to_json
  end

  body = JSON.parse(response.body, symbolize_names: true)
  @worker_id = body[:id]
  @worker = SimpleMapReduce::Server::Worker.new(
    id: @worker_id,
    url: SimpleMapReduce.job_worker_url
  )
  logger.info("[OK] registering this worker to the job_tracker #{SimpleMapReduce.job_worker_url}")
end

.s3_clientObject



115
116
117
# File 'lib/simple_map_reduce/server/job_worker.rb', line 115

def s3_client
  SimpleMapReduce::S3Client.instance.client
end

.setup_workerObject



68
69
70
71
72
73
74
75
76
# File 'lib/simple_map_reduce/server/job_worker.rb', line 68

def setup_worker
  check_s3_access
  register_myself_to_job_tracker
  job_manager
  logger.info('All setup process is done successfully. This worker is operation ready.')
  logger.info("This job worker url: #{SimpleMapReduce.job_worker_url}, id: #{worker_id}")
  logger.info("This job worker status url: #{SimpleMapReduce.job_worker_url}/workers/#{worker_id}")
  logger.info("The job tracker url: #{SimpleMapReduce.job_tracker_url}")
end