class Heavylog::Formatters::ECS
Constants
- ECS_MAP
mapping from heavylog standard keys to
ECS
www.elastic.co/guide/en/ecs/current/ecs-reference.html
Public Instance Methods
call(data)
click to toggle source
# File lib/heavylog/formatters/ecs.rb, line 31 def call(data) ECS_MAP.each do |original, correct| dig_set(data, correct.split("."), data.delete(original)) if data.key?(original) end dig_set(data, %w[event module], "heavylog") dig_set(data, %w[event category], "web") unless data.dig("event", "dataset") value = data.dig("heavylog", "controller") == "SidekiqLogger" ? "heavylog.sidekiq" : "heavylog.rails" dig_set(data, %w[event dataset], value) end if (code = data.dig("http", "response", "status_code")) dig_set(data, %w[event outcome], (200..399).cover?(code) ? "success" : "failure") end dig_set(data, %w[source ip], data.dig("source", "address")) unless data.dig("source", "ip") dig_set(data, %w[url path], data.dig("url", "original")) unless data.dig("url", "path") ::JSON.dump(data) end
Private Instance Methods
dig_set(obj, keys, value)
click to toggle source
# File lib/heavylog/formatters/ecs.rb, line 56 def dig_set(obj, keys, value) key = keys.first if keys.length == 1 obj[key] = value else obj[key] = {} unless obj[key] dig_set(obj[key], keys.slice(1..-1), value) end end