module Fluent::GelfPluginUtil
Constants
- LEVEL_MAPPING
- SYSLOG_FACILITY
Public Instance Methods
make_gelfentry(tag, time, record)
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
# File lib/fluent/plugin/gelf_plugin_util.rb, line 49 def make_gelfentry(tag, time, record) record = merge_inner_json(record, "message") record = merge_inner_json(record, "log") gelfentry = {} gelfentry["timestamp"] = if defined?(Fluent::EventTime) && time.is_a?(Fluent::EventTime) time.sec + (time.nsec.to_f / 1_000_000_000).round(3) else time end gelfentry["_fluentd_tag"] = tag record.each_pair do |k, v| # rubocop:disable Metrics/BlockLength case k when "timestamp", "time" gelfentry["timestamp"] = if v.is_a?(Integer) || v.is_a?(Float) v else begin (DateTime.parse(v).strftime("%Q").to_f / 1_000).round(3) rescue ArgumentError v end end when "msec" then if time.is_a?(Integer) && record["timestamp"].nil? && record["time"].nil? gelfentry["timestamp"] = "#{time}.#{v}".to_f else gelfentry["_msec"] = v end when "level" gelfentry["level"] = if v.is_a?(Integer) v else level = LEVEL_MAPPING.keys.find { |l| v.downcase =~ /#{l}/ } level.nil? ? v : LEVEL_MAPPING[level] end when "source_realtime_timestamp" then gelfentry["timestamp"] = (v.to_f / 1_000_000).round(3) when "host", "hostname" then gelfentry["host"] = v.to_s when "priority" then gelfentry["level"] = v.to_i when "syslog_facility" then gelfentry["facility"] = SYSLOG_FACILITY[v] when "short_message", "version", "full_message", "facility", "file", "line" then gelfentry[k] = v else k.to_s.start_with?("_") ? gelfentry[k] = v : gelfentry["_#{k}"] = v end end if gelfentry["short_message"].nil? || gelfentry["short_message"].to_s.empty? gelfentry["short_message"] = if gelfentry.key?("_message") && !gelfentry["_message"].to_s.empty? gelfentry.delete("_message") elsif gelfentry.key?("_log") && !gelfentry["_log"].to_s.empty? gelfentry.delete("_log") else "(no message)" end end if gelfentry["level"].nil? level = LEVEL_MAPPING.keys.find { |k| tag.downcase =~ /\.#{k}/ } gelfentry["level"] = level.nil? ? 6 : LEVEL_MAPPING[level] end gelfentry end
merge_inner_json(record, key)
click to toggle source
# File lib/fluent/plugin/gelf_plugin_util.rb, line 37 def merge_inner_json(record, key) return record unless record[key] json = Oj.load(record[key].strip) return record unless json json["host"] = record["host"] # preserve host record.delete(key) record.merge(json) rescue Oj::ParseError record end