~singpolyma/sgx-jmp

eaf8fee57cbd0c4d82b250f80f5b85d8778edd06 — Stephen Paul Weber 2 years ago c89a05d + 21848ff
Merge branch 'background-log'

* background-log:
  Log in background thread
  Don't run our whole app in an at_exit
3 files changed, 38 insertions(+), 3 deletions(-)

M .rubocop.yml
A lib/background_log.rb
M sgx_jmp.rb
M .rubocop.yml => .rubocop.yml +1 -0
@@ 29,6 29,7 @@ Metrics/ParameterLists:
Naming/MethodParameterName:
  AllowNamesEndingInNumbers: false
  AllowedNames:
    - io
    - m
    - e
    - q

A lib/background_log.rb => lib/background_log.rb +29 -0
@@ 0,0 1,29 @@
# frozen_string_literal: true

# Subclass IO because Logger does an is_a? check
class BackgroundLog < IO
	def initialize(io)
		@io = io
		@q = Queue.new
		thread
		at_exit do
			@q << :done
			thread.join
		end
	end

	def thread
		@thread ||= Thread.new do
			loop do
				m = @q.pop
				break if m == :done

				@io.write m
			end
		end
	end

	def write(s)
		@q << s
	end
end

M sgx_jmp.rb => sgx_jmp.rb +8 -3
@@ 3,8 3,7 @@
require "pg/em/connection_pool"
require "bandwidth"
require "bigdecimal"
require "blather/client/dsl" # Require this first to not auto-include
require "blather/client"
require "blather/client/dsl"
require "braintree"
require "date"
require "dhall"


@@ 15,8 14,10 @@ require "ruby-bandwidth-iris"
require "sentry-ruby"
require "statsd-instrument"

require_relative "lib/background_log"

$stdout.sync = true
LOG = Ougai::Logger.new($stdout)
LOG = Ougai::Logger.new(BackgroundLog.new($stdout))
LOG.level = ENV.fetch("LOG_LEVEL", "info")
LOG.formatter = Ougai::Formatters::Readable.new(
	nil,


@@ 897,3 898,7 @@ iq type: [:get, :set] do |iq|

	self << Blather::StanzaError.new(iq, "feature-not-implemented", :cancel)
end

trap(:INT) { EM.stop }
trap(:TERM) { EM.stop }
EM.run { client.run }