Skip to content

Commit

Permalink
Merge pull request #7369 from maximumG/6973-order-reports
Browse files Browse the repository at this point in the history
Fixes #6973:  order reports
  • Loading branch information
jeremystretch committed Sep 28, 2021
2 parents 3ec0fe5 + 0214c38 commit 3e5452d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
15 changes: 15 additions & 0 deletions docs/customization/reports.md
Expand Up @@ -97,6 +97,21 @@ The recording of one or more failure messages will automatically flag a report a

To perform additional tasks, such as sending an email or calling a webhook, after a report has been run, extend the `post_run()` method. The status of the report is available as `self.failed` and the results object is `self.result`.

By default, reports within a module are unordered and 'randomly' displayed in the reports list page. If you want to order reports, you can defined the `report_order` variable at the end
of your module. The `report_order` variable is a tuple which contains each Report class in a specific order.

```
from extras.reports import Report
class DeviceConnectionsReport(Report)
pass
class DeviceIPsReport(Report)
pass
report_order = (DeviceIPsReport, DeviceConnectionsReport)
```

Once you have created a report, it will appear in the reports list. Initially, reports will have no results associated with them. To generate results, run the report.

## Running Reports
Expand Down
6 changes: 4 additions & 2 deletions netbox/extras/reports.py
Expand Up @@ -59,8 +59,10 @@ def get_reports():
# defined.
for importer, module_name, _ in pkgutil.iter_modules([settings.REPORTS_ROOT]):
module = importer.find_module(module_name).load_module(module_name)
report_list = [cls() for _, cls in inspect.getmembers(module, is_report)]
module_list.append((module_name, report_list))
report_order = getattr(module, "report_order", ())
ordered_reports = [cls() for cls in report_order if is_report(cls)]
unordered_reports = [cls() for _, cls in inspect.getmembers(module, is_report) if cls not in report_order]
module_list.append((module_name, [*ordered_reports, *unordered_reports]))

return module_list

Expand Down

0 comments on commit 3e5452d

Please sign in to comment.