In order to be able to say that transaction was played back, you need to keep information about when the previous playback was performed so the comparison can be made. I'm afraid that this feat is out of the scope that alerting engine is able to handle. So the solution that you have now (alert triggered and reset every minute, calling the CGI script) is most likely the only reasonable one that can be achieved by alerting.
However you can try to leverage Orion SDK for access to this data directly through SWIS, the Orion SDK provides tools that will allow you to connect directly to the Information Service which provides data for the website. The Orion SDK can be downloaded from here. Or if for whatever reason you can't use Orion SDK you could try to use web service that is used for querying data by /Orion/Admin/swis.aspx page.
Let me know if you have any questions.
Calling my cgi script every minute is actually working well. I end up with a 20mb file by the end of the day, but it's manageable.
I do seem to be having an issue with 'unmanaged' monitors though. Nothing I put in the alert manager seems to be triggering a call to the cgi-script for monitors that are turned off.
I'd like to not just get triggers when a monitor is up or down, but also if it is unmanaged and keep reporting that every minute while true.
Is that possible? I've played with the "Status", "Last Played" and "Is Unmanaged" keys to no avail.
The alert actions are not by default executed for unmanaged entities. This setting however can be suppressed, even though I don't recommend to do that (because it will affect all defined alerts). If you want to suppress this behavior, you will need to update one setting in the Orion database. In the dbo.Settings table find row with SettingID='AlertEngine-ProcessUnmanagedObjects' and set value in the CurrentValue column to 1. After restarting the SolarWinds Alerting Engine service, alert actions should be triggered also for unmanaged entities.
Instead of this solution I strongly recommend to leverage the Orion SDK if possible.
Wasn't as hard as I expected it to be. Managed to download SDK to a windows box, unpack .msi and then copy the .pm files to a linux box. Tweaked the sample a bit and got this to work:
print $swis->QueryXml('SELECT Name,StatusDescription FROM Orion.SEUM.Transactions');
print $swis->QueryXml('SELECT Name FROM Orion.SEUM.Transactions WHERE Unmanaged=1');
Seems to be giving me what I need and much faster/elegant than sending out alerts every minute to a cgi script.