This project aims to provide a smart and easy way to parse any webserver log and print its results in a human-friendly format. It was designed with flexibility in mind. It makes it simple to change parts like Counters and Presenters.
┌────────────────────────────┐
│ ├────┐
┌──────┤ The User │ │
│ │ │ │
│ └─────────────▲──────────────┘ │
│ │ │
│ │ │
│ │ │
│ ┌──────────┴─────────┐ │
│ │ │ │
│ │ │ │
│ ┌─►│ Parser │◄─┐ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ └────────────────────┘ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
▼ │ │ ▼
┌────────┴───────────┐ ┌─────────┴──────────┐
│ │ │ │
│ │ │ │
│ Counter │ │ Presenter │
│ │ │ │
│ │ │ │
└────────────────────┘ └────────────────────┘
The above diagram shows how the Parser can be used by the user. The Parser class requires two moving parts: A list of Counter and a Presenter. By default, the gem has two counters (MostVisitedCounter and UniqVisitorsCounter), and many presenters see here.
This design allows the user to change any required parts and create their parts. It's easier to create a new Counter or even a new Presenter, just following the signature for them.
The default counters use a Hash as a container for the parsed lines, it allows us to access the paths with an O(1) access time. Also, the output of counters returns the sorted array with results, it uses the Ruby Quicksort algorithm which in the worst case will do the sort with O(n^2) but on the avg, it sorts using the O(n log n) [not too bad].
Using the Presenter not coupled with the Parser or even the Counter allows us to implement new parsers easily, it should not take more than five minutes.
To use it in your application you should add this line to your Gemfile:
gem 'smart_parser'And then execute:
$ bundle installOr, you can install it by yourself running this command:
$ gem install smart_parserYou have two ways to use this gem:
- As binary directly in your $PATH
- As library loaded into your project
Consider that you already installed the gem using the gem install method and installed it on your lib of the Ruby.
So, you can just run the following command:
$ sparser webserver.logIt includes a binary that has all Counters and Presenters and also includes additional options, to check run:
$ sparser -hNote: You should take a look at the variety of Presenters. Try the JSONL for instance.
This is the second way to use the gem. You can just require (require 'smart_parser') and starts using the classes like:
parser = SmartParser::Parser.new(lines: ['/home 127.0.01'])To have more details about this use, please check the code of the binary included in the gem.
Bug reports and pull requests are welcome on GitHub at https://github.com/joffilyfe/smart_parser.
The gem is available as open source under the terms of the MIT License.