Class: Peplum::Application

Inherits:
Cuboid::Application
  • Object
show all
Defined in:
lib/peplum/application.rb,
lib/peplum/application/worker.rb,
lib/peplum/application/payload.rb,
lib/peplum/application/services/scheduler.rb,
lib/peplum/application/services/shared_hash.rb

Defined Under Namespace

Modules: Payload, Services, Worker Classes: Error

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.inherited(application) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/peplum/application.rb', line 20

def inherited( application )
  super

  # Don't trust Cuboid's auto-detection for this, make sure the inheriting class is the Cuboid application.
  Cuboid::Application.application = application

  application.validate_options_with :validate_options
  application.serialize_with MessagePack

  application.instance_service_for :scheduler,   Services::Scheduler

  # Shared, in-memory key-value store for the workers, the scheduler will not be participate.
  application.instance_service_for :shared_hash, Services::SharedHash
end

Instance Method Details

#payload#run, ...

This method is abstract.

Returns * ‘#run` – Worker; executes its payload against `objects`.

  • ‘#split` – Scheduler; splits given `objects` into groups for each worker.

  • ‘#merge` – Scheduler; merges results from multiple workers.

That’s all we need to turn any application into a super version of itself.

Returns:

  • (#run, #split, #merge)
    • ‘#run` – Worker; executes its payload against `objects`.

    • ‘#split` – Scheduler; splits given `objects` into groups for each worker.

    • ‘#merge` – Scheduler; merges results from multiple workers.

    That’s all we need to turn any application into a super version of itself.



64
65
66
# File 'lib/peplum/application.rb', line 64

def payload
  fail Error::PayloadMissing, 'Missing #payload implementation!'
end

#report(data) ⇒ Object

Overload Cuboid#report and delegate to the Peplum::Application::Payload#merge prior passing it on to Cuboid.



70
71
72
# File 'lib/peplum/application.rb', line 70

def report( data )
  super payload.merge( data )
end

#runObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/peplum/application.rb', line 36

def run
  options = @options.dup

  # System options.
  peplum_options = options.delete( 'peplum' )

  # Payload options.
  payload_options = options.delete( 'payload' )

  # We have a master so we're a worker, run the payload.
  if peplum_options['master']
    work( peplum_options, payload_options )

  # We're the scheduler Instance, get to grouping objects and spawning workers.
  else
    schedule( peplum_options, payload_options )
  end
end