Class: Fluent::TextParser::ApacheParser

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

Constant Summary collapse

REGEXP =
/^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
TIME_FORMAT =
"%d/%b/%Y:%H:%M:%S %z"

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, #configure

Methods included from Configurable

#config, #configure, included, lookup_type, register_type

Constructor Details

#initializeApacheParser

Returns a new instance of ApacheParser.



468
469
470
471
472
# File 'lib/fluent/parser.rb', line 468

def initialize
  super
  @time_parser = TimeParser.new(TIME_FORMAT)
  @mutex = Mutex.new
end

Instance Method Details

#parse(text) ⇒ Object



478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
# File 'lib/fluent/parser.rb', line 478

def parse(text)
  m = REGEXP.match(text)
  unless m
    if block_given?
      yield nil, nil
      return
    else
      return nil, nil
    end
  end

  host = m['host']
  host = (host == '-') ? nil : host

  user = m['user']
  user = (user == '-') ? nil : user

  time = m['time']
  time = @mutex.synchronize { @time_parser.parse(time) }

  method = m['method']
  path = m['path']

  code = m['code'].to_i
  code = nil if code == 0

  size = m['size']
  size = (size == '-') ? nil : size.to_i

  referer = m['referer']
  referer = (referer == '-') ? nil : referer

  agent = m['agent']
  agent = (agent == '-') ? nil : agent

  record = {
    "host" => host,
    "user" => user,
    "method" => method,
    "path" => path,
    "code" => code,
    "size" => size,
    "referer" => referer,
    "agent" => agent,
  }
  record["time"] = m['time'] if @keep_time_key

  if block_given?
    yield time, record
  else
    return time, record
  end
end

#patternsObject



474
475
476
# File 'lib/fluent/parser.rb', line 474

def patterns
  {'format' => REGEXP, 'time_format' => TIME_FORMAT}
end