Class: Fluent::TextParser::JSONParser

Inherits:
Parser
  • Object
show all
Defined in:
lib/fluent/parser.rb

Constant Summary

Constants included from Configurable

Configurable::CONFIG_TYPE_REGISTRY

Instance Attribute Summary

Attributes inherited from Parser

#estimate_current_event

Instance Method Summary collapse

Methods inherited from Parser

#call, #initialize

Methods included from Configurable

#config, included, #initialize, lookup_type, register_type

Constructor Details

This class inherits a constructor from Fluent::Parser

Instance Method Details

#configure(conf) ⇒ Object



252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
# File 'lib/fluent/parser.rb', line 252

def configure(conf)
  super

  unless @time_format.nil?
    @time_parser = TimeParser.new(@time_format)
    @mutex = Mutex.new
  end

  begin
    raise LoadError unless @json_parser == 'oj'
    require 'oj'
    Oj.default_options = {bigdecimal_load: :float}
    @load_proc = Oj.method(:load)
    @error_class = Oj::ParseError
  rescue LoadError
    @load_proc = Yajl.method(:load)
    @error_class = Yajl::ParseError
  end
end

#parse(text) ⇒ Object



272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# File 'lib/fluent/parser.rb', line 272

def parse(text)
  record = @load_proc.call(text)

  value = @keep_time_key ? record[@time_key] : record.delete(@time_key)
  if value
    if @time_format
      time = @mutex.synchronize { @time_parser.parse(value) }
    else
      begin
        time = value.to_i
      rescue => e
        raise ParserError, "invalid time value: value = #{value}, error_class = #{e.class.name}, error = #{e.message}"
      end
    end
  else
    if @estimate_current_event
      time = Engine.now
    else
      time = nil
    end
  end

  if block_given?
    yield time, record
  else
    return time, record
  end
rescue @error_class
  if block_given?
    yield nil, nil
  else
    return nil, nil
  end
end