lib/fluent/plugin/out_mongo.rb in fluent-plugin-mongo-1.3.0 vs lib/fluent/plugin/out_mongo.rb in fluent-plugin-mongo-1.4.0

- old
+ new

@@ -36,10 +36,14 @@ desc "Replace dot with specified string" config_param :replace_dot_in_key_with, :string, default: nil desc "Replace dollar with specified string" config_param :replace_dollar_in_key_with, :string, default: nil + # Additional date field to be used to Date object + desc "Specify keys to use MongoDB's Date. Supported value types are Integer/Float/EventTime/String" + config_param :date_keys, :array, default: nil + # tag mapping mode desc "Use tag_mapped mode" config_param :tag_mapped, :bool, default: false, deprecated: "use '${tag}' placeholder in collection parameter." desc "Remove tag prefix" @@ -52,10 +56,11 @@ config_param :ssl_key, :string, default: nil config_param :ssl_key_pass_phrase, :string, default: nil, secret: true config_param :ssl_verify, :bool, default: false config_param :ssl_ca_cert, :string, default: nil + config_section :buffer do config_set_default :@type, DEFAULT_BUFFER_TYPE config_set_default :chunk_keys, ['tag'] end @@ -196,14 +201,43 @@ end def collect_records(chunk) records = [] time_key = @inject_config.time_key if @inject_config + date_keys = @date_keys + tag = chunk.metadata.tag chunk.msgpack_each {|time, record| record = inject_values_to_record(tag, time, record) # MongoDB uses BSON's Date for time. record[time_key] = Time.at(time || record[time_key]) if time_key + + if date_keys + date_keys.each { |date_key| + begin + date_value = record[date_key] + case date_value + when Fluent::EventTime + record[date_key] = date_value.to_time + when Integer + record[date_key] = if date_value > 9999999999 + # epoch with milliseconds: e.g. javascript + Time.at(date_value / 1000.0) + else + # epoch with seconds: e.g. ruby + Time.at(date_value) + end + when Float + record[date_key] = Time.at(date_value) + else + record[date_key] = Time.parse(date_value) + end + rescue ArgumentError + log.warn "Failed to parse '#{date_key}' field. Expected date types are Integer/Float/String/EventTime: #{record[date_key]}" + record[date_key] = nil + end + } + end records << record } records end