class Andromeda::Plan
Attributes
error_level[RW]
log[RW]
marker[RW]
nick[RW]
trace_enter[RW]
trace_exit[RW]
Public Class Methods
new(config = {})
click to toggle source
Calls superclass method
Andromeda::Impl::ProtoPlan::new
# File lib/andromeda/plan.rb, line 20 def initialize(config = {}) super config @trace_enter ||= init_trace_hash :enter @trace_exit ||= init_trace_hash :emit @error_level ||= :error end
Public Instance Methods
check_mark()
click to toggle source
# File lib/andromeda/plan.rb, line 101 def check_mark mark_ = mark raise RuntimeError, 'Invalid mark' if mark_ && !mark_.zero? end
deliver_data(name, meth, k, v, tags_in)
click to toggle source
# File lib/andromeda/plan.rb, line 79 def deliver_data(name, meth, k, v, tags_in) update_mark tags.update tags_in meth.call k, v end
init_trace_hash(kind)
click to toggle source
# File lib/andromeda/plan.rb, line 71 def init_trace_hash(kind) ; {} end
initialize_copy(other)
click to toggle source
Calls superclass method
Andromeda::Impl::ProtoPlan#initialize_copy
# File lib/andromeda/plan.rb, line 27 def initialize_copy(other) super other @trace_enter = other.trace_enter.identical_copy @trace_exit = other.trace_exit.identical_copy @error_level = other.error_level.identical_copy @nick = other.nick.identical_copy end
mark()
click to toggle source
# File lib/andromeda/plan.rb, line 38 def mark ; @mark = Id.zero unless @mark ; @mark end
on_enter(key, val)
click to toggle source
# File lib/andromeda/plan.rb, line 40 def on_enter(key, val) exit_ = exit exit_ << val if exit_ end
pool()
click to toggle source
# File lib/andromeda/sugar.rb, line 4 def pool ; guide.pool_track.pool rescue nil end end
reset_mark(new_mark)
click to toggle source
# File lib/andromeda/plan.rb, line 95 def reset_mark(new_mark) tags[:mark] = if new_mark then new_mark else Id.zero end end
signal_error(e)
click to toggle source
# File lib/andromeda/plan.rb, line 85 def signal_error(e) errors_ = errors errors_ << e if errors_ end
signal_uncaught(e)
click to toggle source
# File lib/andromeda/plan.rb, line 90 def signal_uncaught(e) log.send error_level, e rescue nil signal_error e end
tap() { |self end| ... }
click to toggle source
# File lib/andromeda/plan.rb, line 35 def tap ; yield self end def log ; @log = DefaultLogger.instance end def mark ; @mark = Id.zero unless @mark ; @mark end def on_enter(key, val) exit_ = exit exit_ << val if exit_ end def to_short_s super_ = super() nick_ = nick if nick_ then "#{super_} aka: #{Impl::To_S.short_s(nick_)}" else super_ end end protected def transport_data name, track, meth, key, val, tags_in scope = tags_in[:scope] enter_level = trace_level trace_enter, name exit_level = trace_level trace_exit, name details = { name: name, plan: self, track: track, key: key, val: val } track.follow(scope) do begin trace :enter, enter_level, name, details if enter_level deliver_data name, meth, key, val, tags_in trace :exit, exit_level, name, details if exit_level rescue Exception => e uncaught_exception name, key, val, e end end end def init_trace_hash(kind) ; {} end def trace_level(h, name) ; if h.is_a?(Symbol) then h else (h[name] rescue nil) end end def trace(kind, level, name, details) log.send level, InfoMsg.str("TRACE :#{kind} :#{name}", details) if log end def deliver_data(name, meth, k, v, tags_in) update_mark tags.update tags_in meth.call k, v end def signal_error(e) errors_ = errors errors_ << e if errors_ end def signal_uncaught(e) log.send error_level, e rescue nil signal_error e end def reset_mark(new_mark) tags[:mark] = if new_mark then new_mark else Id.zero end end def mark ; tags[:mark] end def check_mark mark_ = mark raise RuntimeError, 'Invalid mark' if mark_ && !mark_.zero? end def update_mark marker_ = marker if marker_ && !marker_.zero? mark_ = mark if mark_ then reset_mark mark_.xor(marker_) else reset_mark mark_ end end end def uncaught_exception(name, key, value, e) begin details = { name: name, key: key, val: value, cause: e } info = InfoMsg.str 'Uncaught exception', details err = ExecError.new(info) err.set_backtrace e.backtrace signal_uncaught e rescue Exception => e2 details[:cause] = e2 log.error InfoMsg.str('Failure handling uncaught exception', details) rescue nil end end end
to_short_s()
click to toggle source
Calls superclass method
Andromeda::Impl::ProtoPlan#to_short_s
# File lib/andromeda/plan.rb, line 45 def to_short_s super_ = super() nick_ = nick if nick_ then "#{super_} aka: #{Impl::To_S.short_s(nick_)}" else super_ end end
trace(kind, level, name, details)
click to toggle source
# File lib/andromeda/plan.rb, line 75 def trace(kind, level, name, details) log.send level, InfoMsg.str("TRACE :#{kind} :#{name}", details) if log end
trace_level(h, name)
click to toggle source
# File lib/andromeda/plan.rb, line 73 def trace_level(h, name) ; if h.is_a?(Symbol) then h else (h[name] rescue nil) end end def trace(kind, level, name, details) log.send level, InfoMsg.str("TRACE :#{kind} :#{name}", details) if log end def deliver_data(name, meth, k, v, tags_in) update_mark tags.update tags_in meth.call k, v end def signal_error(e) errors_ = errors errors_ << e if errors_ end def signal_uncaught(e) log.send error_level, e rescue nil signal_error e end def reset_mark(new_mark) tags[:mark] = if new_mark then new_mark else Id.zero end end def mark ; tags[:mark] end def check_mark mark_ = mark raise RuntimeError, 'Invalid mark' if mark_ && !mark_.zero? end def update_mark marker_ = marker if marker_ && !marker_.zero? mark_ = mark if mark_ then reset_mark mark_.xor(marker_) else reset_mark mark_ end end end def uncaught_exception(name, key, value, e) begin details = { name: name, key: key, val: value, cause: e } info = InfoMsg.str 'Uncaught exception', details err = ExecError.new(info) err.set_backtrace e.backtrace signal_uncaught e rescue Exception => e2 details[:cause] = e2 log.error InfoMsg.str('Failure handling uncaught exception', details) rescue nil end end end end
transport_data(name, track, meth, key, val, tags_in)
click to toggle source
# File lib/andromeda/plan.rb, line 55 def transport_data name, track, meth, key, val, tags_in scope = tags_in[:scope] enter_level = trace_level trace_enter, name exit_level = trace_level trace_exit, name details = { name: name, plan: self, track: track, key: key, val: val } track.follow(scope) do begin trace :enter, enter_level, name, details if enter_level deliver_data name, meth, key, val, tags_in trace :exit, exit_level, name, details if exit_level rescue Exception => e uncaught_exception name, key, val, e end end end
uncaught_exception(name, key, value, e)
click to toggle source
# File lib/andromeda/plan.rb, line 116 def uncaught_exception(name, key, value, e) begin details = { name: name, key: key, val: value, cause: e } info = InfoMsg.str 'Uncaught exception', details err = ExecError.new(info) err.set_backtrace e.backtrace signal_uncaught e rescue Exception => e2 details[:cause] = e2 log.error InfoMsg.str('Failure handling uncaught exception', details) rescue nil end end
update_mark()
click to toggle source
# File lib/andromeda/plan.rb, line 106 def update_mark marker_ = marker if marker_ && !marker_.zero? mark_ = mark if mark_ then reset_mark mark_.xor(marker_) else reset_mark mark_ end end end