Class: Julewire::Core::Diagnostics::Tail
- Inherits:
-
Object
- Object
- Julewire::Core::Diagnostics::Tail
- Defined in:
- lib/julewire/core/diagnostics/tail.rb,
lib/julewire/core/diagnostics/tail/renderer.rb
Defined Under Namespace
Constant Summary collapse
- DEFAULT_CAPACITY =
200- DEFAULT_NAME =
:tail- COUNTER_KEYS =
%i[captured failures].freeze
Instance Attribute Summary collapse
-
#capacity ⇒ Object
readonly
Returns the value of attribute capacity.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
Instance Method Summary collapse
- #after_fork! ⇒ Object
- #clear ⇒ Object
- #close ⇒ Object
- #emit(record) ⇒ Object
- #entries(limit: nil) ⇒ Object
- #flush ⇒ Object
- #health ⇒ Object
-
#initialize(name: DEFAULT_NAME, capacity: DEFAULT_CAPACITY, formatter: Records::Formatter.new, renderer: Renderer.new, serializer: nil) ⇒ Tail
constructor
A new instance of Tail.
- #records(limit: nil) ⇒ Object
- #render(limit: nil, color: false) ⇒ Object
- #write(io = $stdout, limit: nil, color: nil) ⇒ Object
Constructor Details
#initialize(name: DEFAULT_NAME, capacity: DEFAULT_CAPACITY, formatter: Records::Formatter.new, renderer: Renderer.new, serializer: nil) ⇒ Tail
Returns a new instance of Tail.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 27 def initialize( name: DEFAULT_NAME, capacity: DEFAULT_CAPACITY, formatter: Records::Formatter.new, renderer: Renderer.new, serializer: nil ) @name = Core.normalize_name(name) @capacity = Validation.validate_integer_limit!(capacity, name: :capacity, positive: true) Validation.validate_callable!(formatter, name: :formatter) Validation.validate_callable!(renderer, name: :renderer) @formatter = formatter @renderer = renderer @serializer = serializer @serializer_pool_key = :"julewire_core_tail_serializers_#{object_id}" initialize_state end |
Instance Attribute Details
#capacity ⇒ Object (readonly)
Returns the value of attribute capacity.
25 26 27 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 25 def capacity @capacity end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
25 26 27 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 25 def name @name end |
Class Method Details
.attach!(runtime = Julewire) ⇒ Object
18 19 20 21 22 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 18 def attach!(runtime = Julewire, **) destination = new(**) runtime.configure { it.destinations.add(destination) } destination end |
Instance Method Details
#after_fork! ⇒ Object
88 89 90 91 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 88 def after_fork! initialize_state self end |
#clear ⇒ Object
78 79 80 81 82 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 78 def clear @state_ref.update { State.new(it.sequence, EMPTY_ENTRIES) } @health.clear_failures! self end |
#close ⇒ Object
86 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 86 def close(*) = self |
#emit(record) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 45 def emit(record) snapshot = snapshot_record(record) @state_ref.update do |state| sequence = state.sequence + 1 entries = (state.items + [Entry.new(sequence, Time.now.utc, snapshot)]).last(@capacity) State.new(sequence, entries) end @health.increment(:captured) nil rescue StandardError => e record_failure(e, record) nil end |
#entries(limit: nil) ⇒ Object
59 60 61 62 63 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 59 def entries(limit: nil) limit = normalize_limit(limit) snapshot = @state_ref.get.items.dup limit ? snapshot.last(limit) : snapshot end |
#flush ⇒ Object
84 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 84 def flush(*) = self |
#health ⇒ Object
93 94 95 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 93 def health @health.snapshot(capacity: @capacity, size: entries.length) end |
#records(limit: nil) ⇒ Object
65 66 67 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 65 def records(limit: nil) entries(limit: limit).map(&:record) end |
#render(limit: nil, color: false) ⇒ Object
69 70 71 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 69 def render(limit: nil, color: false) @renderer.call(entries(limit: limit), color: color) end |
#write(io = $stdout, limit: nil, color: nil) ⇒ Object
73 74 75 76 |
# File 'lib/julewire/core/diagnostics/tail.rb', line 73 def write(io = $stdout, limit: nil, color: nil) io.write(render(limit: limit, color: color.nil? ? io.tty? : color)) io end |