[](https://coveralls.io/github/DMazzei/log-analyser?branch=master)
[](https://badge.fury.io/rb/log-analyser)
[](https://app.circleci.com/pipelines/github/DMazzei/log-analyser)


# Log-Analyser
## About
Simple ruby library to read and parse web-server's log files and aggregate pageview data.
### TL;DR
check minimal instructions
Install *log-analyser* gem.
After instantiating *log-analyser's* `PageviewsLogAggregator` class with the path to the logfile:
- the method `all` will return the pageview count
- whilst method `unique` will return the unique pageview count.
### Table of Contents
click to expand the index
- [Installation](#installation)
* [Gem](#gem)
* [Project](#project)
- [Usage](#usage)
- [Logs and Pageviews](#logs-and-pageviews)
* [Definitions](#definitions)
* [Log Formatting](#log-formatting)
- [Development](#development)
- [Contributing](#contributing)
- [Next Steps](#next-steps)
- [License](#license)
## Installation
### Gem
To use *log-analyser* in your application, add this line to your Gemfile:
```ruby
gem 'log-analyser'
```
Or install it yourself as:
$ gem install log-analyser
#### Gem Usage
```
...
...
...
...
...
```
### Project
Install the Ruby version specified in `.ruby-version`
Clone the project and install Bundler
```
git clone git@github.com:DMazzei/log-analyser.git
cd log-analyser
gem install bundler
```
#### Setup:
Run the initial setup
$ bin/setup
> If you need to reinstall dependencies or something alike:
> ```
> $ bundle install
> ```
#### Usage
Call `./bin/parse_pageview_file.rb` passing a logfile path as argument, will return the pageview count ordered from most to less viewed.
Check the script with `--help` argument for more options

An example log can be found in `resources` folder:
$ ./bin/parse_pageview_file.rb --file 'resources/webserver.log'
|--------------------------------------------------|
| All pageviews |
|--------------------------------------------------|
| /about/2.................... | 90 |
| /contact.................... | 89 |
| /index...................... | 82 |
| /about...................... | 81 |
| /help_page/1................ | 80 |
| /home....................... | 78 |
|--------------------------------------------------|
The `-u` or `--unique` option will also display the unique pageview count:
$ ./bin/parse_pageview_file.rb --file 'resources/webserver.log' -u
And any specific page can be filtered with `-p` or `--page`:
$ ./bin/parse_pageview_file.rb --file 'resources/webserver.log' -p '/index'
|--------------------------------------------------|
| View count for page: /index |
|--------------------------------------------------|
| All pageviews |
|--------------------------------------------------|
| /index...................... | 82 |
|--------------------------------------------------|
## Logs and Pageviews
### Definitions
> :page_facing_up: A pageview is defined as a view of a page on your site that is being tracked by the Analytics tracking code. If a user clicks reload after reaching the page, this is counted as an additional pageview. If a user navigates to a different page and then returns to the original page, a second pageview is recorded as well.
> :page_with_curl: A unique pageview, as seen in the Content Overview report, aggregates pageviews that are generated by the same user during the same session. A unique pageview represents the number of sessions during which that page was viewed one or more times.
### Log Formatting
The library is prepared to parser text files, containing one entry per line, in the format: `\page_name identifier`.
A space must separate the page name (first column) from the user identifier (e.g. IP address):
```
/help_page/1 126.318.035.038
/contact 184.123.665.067
/home 184.123.665.067
```
## Development
#### Start with the project:
You can also run `Bundle exec console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`.
To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
#### Linter (rubocop)
_*Rubocop*_ is used as code analyser and maintain code formatting (as well as some best practices).
Use `Bundle exec rake rubocop` to run the checks.
#### Test coverage
Use `Bundle exec rake rspec` to run the tests.
The test coverage is handled by `rspec`, `simplecov` and `coveralls`.
Status and coverage history can be checked [here](https://coveralls.io/github/DMazzei/log-analyser).
#### Deployment
After passing all checks and requirements on github, a *PR* can be merged after review and approval.
The _*master branch*_ merge process will trigger the deployment process on CircleCI.
The deployment process will build and tag a new gem version and push it to [rubygems.org](https://rubygems.org/gems/log-analyser).
> :warning: In order to merge changes into _*master branch*_, the version must be bumped up, otherwise the deployment will fail.
> The version must be updated in `version.rb`.
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/DMazzeig/log-analyser.
## Next Steps
- Extend the logfile formatting;
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).