# 2.5.15. Report Generators

Report generators abstract the conditions of when a message is sent by a Reporter and the content of the message.

Multiple report generators can be registered to a reporter.

At this moment, only the following reporters support report generators:

> - `BitbucketServerPRCommentPush`

> - `BitbucketStatusPush`

> - `GitHubStatusPush`

> - `GitHubCommentPush`

> - `GitLabStatusPush`

> - `HttpStatusPush`

> - `MailNotifier`

> - `PushjetNotifier`

> - `PushoverNotifier`

Eventually, report generator support will be added to the rest of the reporters as well.

The following report generators are available:

> - BuildStatusGenerator

> - BuildStartEndStatusGenerator

> - BuildSetStatusGenerator

> - BuildSetCombinedStatusGenerator

> - WorkerMissingGenerator

The report generators may customize the reports using message formatters. The following message formatter classes are provided:

> - MessageFormatter (commonly used in `BuildStatusGenerator`, `BuildStartEndStatusGenerator`, `BuildSetCombinedStatusGenerator` and `BuildSetStatusGenerator`)

> - MessageFormatterRenderable (commonly used in `BuildStatusGenerator` and `BuildStartEndStatusGenerator`)

> - MessageFormatterFunction (commonly used in `BuildStatusGenerator` and `BuildStartEndStatusGenerator`)

> - MessageFormatterFunctionRaw (commonly used in `BuildStatusGenerator`, `BuildStartEndStatusGenerator`, `BuildSetCombinedStatusGenerator` and `BuildSetStatusGenerator`)

> - MessageFormatterMissingWorkers (commonly used in `WorkerMissingGenerator`)

Message formatters produce the following information that is later used by the report generators:

> - Message type: `plain` (text), `html` or `json`.

> - Message body: a string that describes the information about build or buildset. Other data types are supported too, but then the interpretation of data depends on actual reporter that is being used.

> - Message subject: an optional title of the message about build or buildset.

> - Extra information: optional dictionary of dictionaries with any extra information to give to the reporter. Interpretation of the data depends on the reporter that is being used.