<commit_before>[![Build Status](https://travis-ci.org/MozillaSecurity/FuzzManager.svg?branch=master)](https://travis-ci.org/MozillaSecurity/FuzzManager)
[![codecov](https://codecov.io/gh/MozillaSecurity/FuzzManager/branch/master/graph/badge.svg)](https://codecov.io/gh/MozillaSecurity/FuzzManager)

# What is FuzzManager

With this project, we aim to create a management toolchain for fuzzing. Unlike
other toolchains and frameworks, we want to be modular in such a way that you
can use those parts of FuzzManager that seem interesting to you without forcing
a process upon you that does not fit your requirements.

## CrashManager

CrashManager is the part of FuzzManager responsible for managing crash results
submitted to the server. The main features are:

* Store crash information gathered from various sources. See FTB.

* Bucket crashes using flexible, human-readable signatures that can match a
large number of symptoms of a crash, are proposed by the server but can be
altered and tuned by the user. The server also includes semi-automatic
optimization of signatures that helps you group duplicates into one bucket.

* Report bugs directly to a bug tracker using the best testcase available. We
support only Bugzilla as a bugtracker right now, but again the API is designed
to be extendable.

### FTB

FTB (Fuzzing Tool Box) is the underlying library that contains classes for parsing
crash output from various tools (CrashInfo), bucketing crashes (CrashSignature), and
parsing assertions (AssertionHelper). This can be used locally without having a
running FuzzManager server instance to support crash logging and bucketing. FTB already
supports a variety of tools like GDB, ASan and Minidumps but can be extended to support
any form of crash information you would like.

### Collector

Collector is a command-line utility or a Python class that can be used to communicate
with a CrashManager server.  Collector provides an easy client interface that allows
your clients to submit crashes as well as download and match existing signatures to
avoid reporting frequent issues repeatedly.

## EC2SpotManager

EC2SpotManager is another (optional) part of FuzzManager that allows you to
manage large pools of spot instances in the Amazon Cloud. It supports hierachical
configurations to avoid configuration duplication and ensures that your
instances are always running in the desired quantity as well as in the cheapest
zone.

# Questions

Please send any questions regarding the project to choller-at-mozilla-dot-com.


# Getting Started

## Client Setup

The client portion of FuzzManager (FTB and Collector) can be installed with
`pip install FuzzManager`. This is all you need if you just need to talk to a
FuzzManager server instance or use FTB locally.

## Server Setup

The server part of FuzzManager is a Django application. Please note that it
requires the full repository to be checked out, not just the server directory.

Server dependencies are listed in `server/requirements.txt`. You can use pip to install
these dependencies using `pip install -r server/requirements.txt` and/or you can
use your distribution's package management to fulfill them. A redis server is also required.

You can set the server up just like any other Django project. The Django
configuration file is found at `server/server/settings.py`. The default will<commit_msg>Make it clear that Redis is only required for EC2SpotManager, and add installation instructions.<commit_after>[![Build Status](https://travis-ci.org/MozillaSecurity/FuzzManager.svg?branch=master)](https://travis-ci.org/MozillaSecurity/FuzzManager)
[![codecov](https://codecov.io/gh/MozillaSecurity/FuzzManager/branch/master/graph/badge.svg)](https://codecov.io/gh/MozillaSecurity/FuzzManager)

# What is FuzzManager

With this project, we aim to create a management toolchain for fuzzing. Unlike
other toolchains and frameworks, we want to be modular in such a way that you
can use those parts of FuzzManager that seem interesting to you without forcing
a process upon you that does not fit your requirements.

## CrashManager

CrashManager is the part of FuzzManager responsible for managing crash results
submitted to the server. The main features are:

* Store crash information gathered from various sources. See FTB.

* Bucket crashes using flexible, human-readable signatures that can match a
large number of symptoms of a crash, are proposed by the server but can be
altered and tuned by the user. The server also includes semi-automatic
optimization of signatures that helps you group duplicates into one bucket.

* Report bugs directly to a bug tracker using the best testcase available. We
support only Bugzilla as a bugtracker right now, but again the API is designed
to be extendable.

### FTB

FTB (Fuzzing Tool Box) is the underlying library that contains classes for parsing
crash output from various tools (CrashInfo), bucketing crashes (CrashSignature), and
parsing assertions (AssertionHelper). This can be used locally without having a
running FuzzManager server instance to support crash logging and bucketing. FTB already
supports a variety of tools like GDB, ASan and Minidumps but can be extended to support
any form of crash information you would like.

### Collector

Collector is a command-line utility or a Python class that can be used to communicate
with a CrashManager server.  Collector provides an easy client interface that allows
your clients to submit crashes as well as download and match existing signatures to
avoid reporting frequent issues repeatedly.

## EC2SpotManager

EC2SpotManager is another (optional) part of FuzzManager that allows you to
manage large pools of spot instances in the Amazon Cloud. It supports hierachical
configurations to avoid configuration duplication and ensures that your
instances are always running in the desired quantity as well as in the cheapest
zone.

# Questions

Please send any questions regarding the project to choller-at-mozilla-dot-com.


# Getting Started

## Client Setup

The client portion of FuzzManager (FTB and Collector) can be installed with
`pip install FuzzManager`. This is all you need if you just need to talk to a
FuzzManager server instance or use FTB locally.

## Server Setup

The server part of FuzzManager is a Django application. Please note that it
requires the full repository to be checked out, not just the server directory.

Server dependencies are listed in `server/requirements.txt`. You can use pip to install
these dependencies using `pip install -r server/requirements.txt` and/or you can
use your distribution's package management to fulfill them. A [Redis](https://redis.io/)
server is also required for EC2SpotManager, and can be installed on a Debian-based Linux
with: `sudo apt-get install redis-server`.

You can set the server up just like any other Django project. The Django
configuration file is found at `server/server/settings.py`. The default will
{'fraction_non_alphanumeric': 0.04582792909641158, 'fraction_numerical': 0.0008646779074794639, 'mean_word_length': 4.866441251056636, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 9, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '276278', 'n_tokens_mistral': 1770, 'n_tokens_neox': 1691, 'n_words': 959}