spell 0.1.6

Spell is a Streaming Parser for Event Logs using an LCS (Longest Common Subsequence)
Documentation
# spell-rs

[![Crates.io](https://img.shields.io/crates/v/spell.svg)](https://crates.io/crates/spell)
[![Build Status](https://travis-ci.org/nbigaouette/spell-rs.svg?branch=master)](https://travis-ci.org/nbigaouette/spell-rs)
[![Documentation](https://docs.rs/spell/badge.svg)](https://docs.rs/spell)
[![License](https://img.shields.io/crates/l/spell.svg)](#license)

_spell-rs_ is a _Spell_ implementation in Rust.

Spell is a _**S**treaming **P**arser for **E**vent **L**ogs using an **L**CS_ (Longest Common Subsequence).

The minimum Rust version is 1.31 due to the `use crate::` syntax.

## Reference

Min Du and Feifei Li. Spell: Streaming Parsing of System Event Logs. 2016 IEEE 16th International
Conference on Data Mining (ICDM) pp. 859-864, Barcelona, Spain, December, 2016.
[DOI: 10.1109/ICDM.2016.0103](https://www.doi.org/10.1109/ICDM.2016.0103).
https://ieeexplore.ieee.org/document/7837916

* Original paper: https://www.cs.utah.edu/~lifeifei/papers/spell.pdf
* Presentation slides: https://www.cs.utah.edu/~mind/papers/spell_slides.pdf

## Details

Spell ingests log lines one by one and build up a list of formatting strings that can be used to
analyze the logs. For example (see [presentation slides](https://www.cs.utah.edu/~mind/papers/spell_slides.pdf),
page 19), given the two log entries:

```text
Temperature (41C) exceeds warning threshold
Temperature (42C, 43C) exceeds warning threshold
```

the LCS is:

```text
Temperature * exceeds warning threshold
```

which can then be used to analyze the logs.

As of cedf57a7a73b1052de937d13150c2b9d8a03237c, the Rust implementation gives the exact same results
as the [Java one](https://github.com/EddiePi/Spell).

## Python Wrapper

Universal Python package (wheel) can be built on all platforms using:

```sh
cd python

# Compile Rust code
pip install --editable .

# Test Python package
python ./test.py

# Build a wheel
python setup.py --verbose bdist_wheel
```

### Docker

This only requires Docker.

```sh
# Build a Docker image containing everything required
./docker/docker_build.sh

# Run the commands to build wheel inside a docker container
./docker/docker_run.sh
```

## Other Implementations

* [Spell]https://github.com/EddiePi/Spell, Java version
* [pyspell]https://github.com/bave/pyspell, a Python version
* [spell]https://github.com/logforensicator/spell, another Python version

## License

This project is licensed under either of

* Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHE or
  http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT]LICENSE-MIT or
  http://opensource.org/licenses/MIT)

at your option.