Resultify generate reports

This is part of AT-646.
I guess the last thing I can think of, and this would be holding this PR to a new bar, would be that this should be exception safe, that is it should be wrapped in a transaction and a `try`.