/usr/lib/ruby/vendor_ruby/celluloid/probe.rb is in ruby-celluloid 0.16.0-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | require 'celluloid'
$CELLULOID_MONITORING = true
module Celluloid
class Probe
include Celluloid
include Celluloid::Notifications
NOTIFICATIONS_TOPIC_BASE = 'celluloid.events.%s'
INITIAL_EVENTS = Queue.new
class << self
def run
# spawn the actor if not found
supervise_as(:probe_actor) unless Actor[:probe_actor] && Actor[:probe_actor].alive?
end
def actor_created(actor)
trigger_event(:actor_created, actor)
end
def actor_named(actor)
trigger_event(:actor_named, actor)
end
def actor_died(actor)
trigger_event(:actor_died, actor)
end
def actors_linked(a, b)
a = find_actor(a)
b = find_actor(b)
trigger_event(:actors_linked, a, b)
end
private
def trigger_event(name, *args)
return unless $CELLULOID_MONITORING
probe_actor = Actor[:probe_actor]
if probe_actor
probe_actor.async.dispatch_event(name, args)
else
INITIAL_EVENTS << [name, args]
end
end
def find_actor(obj)
if obj.__send__(:class) == Actor
obj
elsif owner = obj.instance_variable_get(OWNER_IVAR)
owner
end
end
end
def initialize
async.first_run
end
def first_run
until INITIAL_EVENTS.size == 0
event = INITIAL_EVENTS.pop
dispatch_event(*event)
end
end
def dispatch_event(cmd, args)
publish(NOTIFICATIONS_TOPIC_BASE % cmd, args)
end
end
end
|