Module: Legion::Logging::Shipper
- Defined in:
- lib/legion/logging/shipper.rb,
lib/legion/logging/shipper/file_transport.rb,
lib/legion/logging/shipper/http_transport.rb
Defined Under Namespace
Modules: FileTransport, HttpTransport
Constant Summary
collapse
- LEVEL_ORDER =
%w[debug info warn error fatal].freeze
- TRANSPORTS =
{
file: FileTransport,
http: HttpTransport
}.freeze
Class Method Summary
collapse
Class Method Details
.enabled? ⇒ Boolean
68
69
70
71
72
|
# File 'lib/legion/logging/shipper.rb', line 68
def enabled?
return false unless defined?(Legion::Settings)
Legion::Settings.dig(:logging, :shipper, :enabled) == true
end
|
.flush ⇒ Object
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/legion/logging/shipper.rb', line 27
def flush
return if @buffer.nil? || @buffer.empty?
transport = TRANSPORTS[transport_type]
return unless transport
@flush_mutex ||= Mutex.new
@flush_mutex.synchronize do
batch = nil
@mutex.synchronize { batch = @buffer.dup }
return if batch.empty?
delivered = deliver(transport, batch)
@mutex.synchronize { @buffer.shift(batch.size) if delivered }
delivered
end
end
|
.ship(event) ⇒ Object
18
19
20
21
22
23
24
25
|
# File 'lib/legion/logging/shipper.rb', line 18
def ship(event)
return unless enabled?
return unless shippable_level?(event[:level] || event['level'])
redacted = Redactor.redact(event)
transport = TRANSPORTS[transport_type]
buffer_event(redacted) if transport
end
|
.start ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/legion/logging/shipper.rb', line 45
def start
return unless enabled?
return if @flush_thread&.alive?
@buffer ||= []
@mutex ||= Mutex.new
@flush_mutex ||= Mutex.new
interval = flush_interval
@flush_thread = Thread.new do
loop do
sleep interval
flush
end
end
@flush_thread.abort_on_exception = false
end
|
.stop ⇒ Object
62
63
64
65
66
|
# File 'lib/legion/logging/shipper.rb', line 62
def stop
@flush_thread&.kill
@flush_thread = nil
flush
end
|