Files
ubicloud/lib/clog.rb
Jeremy Evans e110452d29 Make clog.rb require sequel/model
It uses Sequel::Model internally, and without this require,
spec/lib/clog_spec.rb fails if run in isolation.  Found by the
spec_separate rake task.
2024-11-22 08:42:42 -08:00

53 lines
1.1 KiB
Ruby

# frozen_string_literal: true
require "json"
require "sequel/model"
class Clog
MUTEX = Mutex.new
def self.emit(message)
out = if block_given?
case metadata = yield
when Hash
metadata
when Array
metadata.reduce({}) do |hash, item|
case item
when Hash
hash.merge(item)
when Sequel::Model
hash.merge(serialize_model(item))
else
hash.merge({invalid_type: item.class.to_s})
end
end
when Sequel::Model
serialize_model(metadata)
else
{invalid_type: metadata.class.to_s}
end
else
{}
end
return if Config.test?
out[:message] = message
out[:time] = Time.now
if (thread_name = Thread.current.name)
out[:thread] = thread_name
end
raw = (JSON.generate(out) << "\n").freeze
MUTEX.synchronize do
$stdout.write(raw)
end
nil
end
private_class_method def self.serialize_model(model)
{model.class.table_name => model.values.except(*model.class.redacted_columns)}
end
end