I needed to display basic information in an easy to view/understand format for a NOC screen. The best way that I found is by using a scoreboard.
1) Create custom property Count2_Up, Count3_Warning, Count4_Down. We need this just to keep count. A temp table can also be created. The main purpose of this is to display the information in an Atlas Map. There are other ways of doing this by creating the actual scoreboard and using a Custom Html to display the information.
2) Create an SQL job to update the CP. This job will run every minute. This can be done in multiple ways using the APIs.
update ncp
set ncp.count2_up=ISNULL((select count(*) from nodes nn where status=1 ),0)
,ncp.Count3_Warning=ISNULL((select count(*) from nodes nn where status=3 ),0)
,ncp.Count4_Down=ISNULL((select count(*) from nodes nn where status=2 ),0)
from NodesCustomProperties ncp
where ncp.NodeID=1
Initially I did this using Alerts, since we can change CP using SQL in alert action. But that generated too many notifications, and Orion was throttling. This might be useful on other situations, but not this one.
3) Create Map using Atlas
4) Display the map on a NOC view
Works well and gives the NOC people at a glance view of nodes. This can be expanded to other ideas, such sites, regions, SQL applications, etc (up/warn/down)
There can be other resources which spells out the down nodes with duration. Such as this one:
SELECT
NodeName AS [Node Name],
'/Orion/images/StatusIcons/Small-' + StatusIcon AS [_IconFor_Node Name],
DetailsUrl AS [_LinkFor_Node Name],
concat(SUBSTRING(tostring(MAX(e.EVENTTIME)),1,4),SUBSTRING(tostring(MAX(e.EVENTTIME)),5,2),
SUBSTRING(tostring(tolocal(MAX(e.EVENTTIME))),12,8)) as Downtime,
CONCAT(HOURDIFF(max(e.eventtime),getdate())/24,' Day(s) ',
HOURDIFF(tolocal(max(e.eventtime)),getdate())-(HOURDIFF(max(e.eventtime),getdate())/24)*24,'h ',
MINUTEDIFF(tolocal(max(e.eventtime)),getdate()) - (MINUTEDIFF(tolocal(max(e.eventtime)),getdate())/60)*60,'m') AS Duration,
--MINUTEDIFF(tolocal(MAX(E.EventTime)),getdate()) as minutes_since
FROM ORION.NODES NODES
INNER JOIN ORION.EVENTS e ON NODES.NODEID = e.NETWORKNODE
WHERE STATUS = 2 and e.eventtype = 1
GROUP BY NodeName, StatusIcon, DetailsUrl
--ORDER BY minutes_since asc
Have Fun!!