# Read the fleet over time

URL: /analyze/reports

Reports charts the fleet over 7, 30 or 90 days, from the same runs, rule results and incidents as the rest of the console. Filter by platform or vehicle, select any bar for the runs behind it, and take every chart as a table or CSV.



**Reports**, under **Analyze** in the sidebar, shows how the fleet did over a period: how much it flew, which rules fired and how often per flight hour, which vehicles stand out, how investigations moved and how clean the imports were. Every figure is read from runs and incidents already in your deployment. Reports adds no data of its own.

Reports is not the incident report. An incident's findings are written on that incident's **Report** tab, as [Write and review a report](/investigate/write-a-report) describes.

## Before you start [#before-you-start]

* Any role can read **Reports**. Saving, scheduling and generating reports needs the admin, investigator or reviewer role, as [Roles and permissions](/security/roles) sets out.
* The examples use the example dataset, read on 26 Sep 2026 at 09:45 UTC.

## Choose the period and the vehicles [#choose-the-period-and-the-vehicles]

The page opens on **Overview**, over the last 30 days, for all vehicles. Above the charts:

| Control  | Choices                                                    | What it changes                                                                                              |
| -------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| Period   | **7 days**, **30 days** or **90 days**                     | The window every figure and chart covers, and the window it is compared with: the same length just before it |
| Platform | **All platforms**, **T4 tracked UGV** or **Q4 quadcopter** | Which vehicles count                                                                                         |
| Vehicle  | **All vehicles** or one vehicle                            | One vehicle only. Choosing a platform limits the list to that platform                                       |

The window is exact. **30 days** means the 30 times 24 hours up to now, and the range at the right of the controls states it, for example **27 Aug, 09:45 to 26 Sep, 09:45 UTC**. So the rule results for 30 days match the **Last 30 days** count in each rule's drawer on **Rules**.

Charts group the window by UTC day for 7 and 30 days, and by week, starting on Monday, for 90 days. The first and last day or week can be partial, and hovering over them says so.

The page address keeps the choices, such as `/app/reports/fleet?p=90&pl=uas`, so a view can be bookmarked or sent to a colleague who can sign in.

## What the figures count [#what-the-figures-count]

| Figure                      | What it counts                                                               |
| --------------------------- | ---------------------------------------------------------------------------- |
| **Sorties**                 | Runs that are not bench runs                                                 |
| **Flight hours**            | The duration of those sorties. A quarantined or rejected run has no duration |
| **Rule results**            | The findings every rule produced on runs in the period, bench runs included  |
| **Results per flight hour** | Rule results on sorties divided by flight hours                              |
| **Incidents opened**        | Incidents on these vehicles opened in the period                             |
| **Clean imports**           | Complete runs as a share of runs imported, leaving out runs still parsing    |

Each figure shows its change against the period before, with the earlier value, such as &#x2A;*-4%** and **from 78 in the 30 days before**. A change in **Rule results**, **Results per flight hour** or **Incidents opened** is green when it falls and amber when it rises. **Clean imports*&#x2A; is green when it rises, and compares in points, such as **-2 points**. Under each figure, a chart draws this period as a solid line and the period before as a dashed line, both at the same point in their periods, with a scale at the right and the dates below. A count, such as **Sorties** or **Rule results**, is drawn as its running total, so the solid line ends at the figure and the dashed line ends at the earlier value. A rate, **Results per flight hour** or **Clean imports**, is drawn over the 7 days ending each day, or for each week at **90 days**. Hovering over a chart gives both values at that point, such as **Running total to the end of 17 Sep**, **52 sorties** against **55 sorties**.

## Read the tabs [#read-the-tabs]

<Steps>
  <Step title="Overview">
    The six figures, then **What changed**, a short list read from this period against the one before. In the example dataset over 30 days it opens with &#x2A;*memory\_pressure fired 6 times and not once in the 30 days before.** and names the rule with the largest change, the vehicle with the highest rate over at least 2 flight hours, the incidents still open and the imports that add no results.

    Below it:

    * **Sorties and flight hours**: sorties per day by platform. Hovering over a bar gives its flight hours.
    * **Rule results per flight hour**: each day shows the 7 days ending that day, so a day with little flight time does not swing the line. The dashed line is the same point in the period before.
    * **Rule results by rule**: the eight rules with the most results. The figure after each bar is the running share of the total.
    * **Import outcomes**: the share of runs imported per day that ended complete, partial, quarantined or rejected.
  </Step>

  <Step title="Fleet">
    **By platform and PX4 version** splits sorties, flight hours and rule results by build, such as Q4 on PX4 v1.15.2 and v1.15.4. **Results per flight hour by vehicle** ranks the vehicles, with a dashed line at the rate for all of them together. **Sorties per vehicle** is a grid of vehicles by day or week, darker for more sorties. The **Vehicles** table gives each vehicle's figures, its sorties per day or week as small bars, and its open incidents.
  </Step>

  <Step title="Rule results">
    **Rule results by rule** ranks every rule that fired. **Rule results by source** stacks the results by the source each rule reads: flight log, companion journal, process samples or ground receive log. **Every rule** lists all rules with their results, the period before, the change, how many incidents opened in the period carry the rule, a trend and whether the rule is on.
  </Step>

  <Step title="Data quality">
    Figures for runs imported, clean imports, partial runs, quarantined or rejected runs, the median widest bound between sources on aligned runs, and the size of the original files imported. Then **Import outcomes** as counts, **Why runs were partial**, **Sources present on sorties**, **Widest bound between sources** and **Data imported**.

    **Deliveries, last 7 days** counts deliveries on the first attempt, after retries, and not delivered. It reads the delivery ledger, which keeps 7 days whatever the period above. **Open the ledger** goes to it.
  </Step>

  <Step title="Investigations">
    Figures for incidents opened in the period, those open or in review now, the median time from a run's import to its incident for incidents opened in the period, the median time from opened to closed for incidents closed in the period, and the oldest incident still open. Over 30 days in the example dataset, **Import to incident** reads **24 min** over 8 incidents and **Opened to closed** reads **29 h** over the 3 incidents closed in the period.

    **Incidents opened** charts them per day or week. **Evidence levels in reports** stacks each incident report's steps as observed, correlated, hypothesis and unknown. The **Incidents** table lists every incident on these vehicles with the same cycle times and a bar of its report steps.
  </Step>
</Steps>

## Follow a figure to its runs [#follow-a-figure-to-its-runs]

Every chart answers on hover, and on a tap on a touch screen, with its exact values.

* Select a bar in **Sorties and flight hours** or **Import outcomes** to open a drawer listing the runs behind it. Each row opens its run.
* Select a rule in **Rule results by rule**, or a row in **Every rule**, for a drawer with the rule's threshold, its results per day and the runs where it fired. **Open the rule** opens its drawer on **Rules**.
* Select a vehicle in **Results per flight hour by vehicle**, or a row in **Vehicles**, for its results per day, its top rules and its runs. The button at the foot opens the vehicle.
* Select an incident in **Evidence levels in reports** to open its **Report** tab.

A legend entry hides or shows its series. The last series shown stays on.

## Take the numbers [#take-the-numbers]

Each chart has two buttons:

* **Table** shows the numbers the chart draws, under the chart.
* **CSV** downloads the same numbers, named for the chart and the end of the period, such as `foxborne-rule-results-by-rule-2026-09-26.csv`. The console confirms &#x2A;*CSV downloaded. The audit log records the export.** and the audit log records **Exported chart data** with the chart, the range and the vehicles.

## Check the result [#check-the-result]

* **Rule results** over **30 days** equals the sum of the **Last 30 days** counts on **Rules**.
* A bar's drawer lists as many runs as the bar counts.
* Changing the period, platform or vehicle changes the page address.

## Related [#related]

* [Save and schedule reports](/analyze/saved-reports) turns any view into a marked document.
* [Rules and findings](/concepts/rules-and-findings) explains what a rule result is.
* [Check a run](/investigate/runs) covers import statuses and clocks.
* [Audit log](/security/audit-log) lists **Exported chart data** and the report actions.
