Vidibus::WowzaLogParser Build Status

A simple parser for Wowza access logs.

This gem is part of Vidibus, an open source toolset for building distributed (video) applications.

Installation

Add gem 'vidibus-wowza_log_parser' to the Gemfile of your application. Then call bundle install on your console.

Usage

To parse an access log, provide the path to a file or just the log lines:

parser = Vidibus::WowzaLogParser.new
parser.parse('path/to/access.log')
# => [{}, {}, ...]

parser.parse('a log line')
# => [{}, {}, ...]

The parser will use Wowza's default fields to match the logs:

date time  tz  x-event x-category  x-severity  x-status  x-ctx x-comment x-vhost x-app x-appinst x-duration  s-ip  s-port  s-uri c-ip  c-proto c-referrer  c-user-agent  c-client-id cs-bytes  sc-bytes  x-stream-id x-spos  cs-stream-bytes sc-stream-bytes x-sname x-sname-query x-file-name x-file-ext  x-file-size x-file-length x-suri  x-suri-stem x-suri-query  cs-uri-stem cs-uri-query

Thus each result hash will include all fields with values while omitting the blank entries:

  line = '2013-09-17  00:00:04  CEST  comment server  WARN  200 - LiveMediaStreamReceiver.doWatchdog: streamTimeout - - - 382109.883  - - - - - - - - - - - - - - - - - - - - - - - - -'
  parser = Vidibus::WowzaLogParser.new
  parser.parse(line)
  # => {
  #  'date' => '2013-09-17',
  #  'time' => '00:00:04',
  #  'tz' => 'CEST',
  #  'x-event' => 'comment',
  #  'x-category' => 'server',
  #  'x-severity' => 'WARN',
  #  'x-status' => '200',
  #  'x-comment' => 'LiveMediaStreamReceiver.doWatchdog: streamTimeout',
  #  'x-duration' => '382109.883'
  #}

If you have a different log format or want to group values, you may provide custom fields and matchers:

  line = '2013-09-17  00:00:04  CEST  comment server  WARN  200 - LiveMediaStreamReceiver.doWatchdog: streamTimeout - - - 382109.883  - - - - - - - - - - - - - - - - - - - - - - - - -'
  parser = Vidibus::WowzaLogParser.new
  parser.fields = 'datetime content'
  parser.matchers['datetime'] = '(.+ CEST)'
  parser.matchers['content'] = '(.+)'
  parser.parse(line)
  # => {
  #  'datetime' => '2013-09-17  00:00:04  CEST',
  #  'content' => 'comment server  WARN  200 - LiveMediaStreamReceiver.doWatchdog: streamTimeout - - - 382109.883  - - - - - - - - - - - - - - - - - - - - - - - - -',
  #}

Testing

To test your gem, call rspec spec on your console. To imitate the way Travis tests your gem, perform bundle exec rspec spec --format progress.

© 2013 punkrats. See LICENSE for details.