This template lists Top 10 Citrix Sessions for Latency and RTT values. It needs to be assigned to Citrix XenApp Session Servers.
Requirements:
- WMI credentials are required to access Citrix XenApp Session servers.
- WMI access should be allowed from SolarWinds polling engine server to Citrix XenApp Session servers.
- Script runs locally on SolarWinds server and executes WMI query remotely. "root\citrix\EUEM" WMI namespace must exist on your servers.
Output:
- Script has two components: "Top 10 Latency" and "Top 10 RTT"
- Each component returns 10 message and statistic pairs sorted by the monitored metric in descending order.
- Statistic shows the current metric value in milliseconds
- Message shows the Session ID and Username detail
- Template does not have threshold values configured, this can be configured for each component based on monitoring requirements
- If WMI query does not return any value or access is not allowed, then the component returns "No Data" in the message field
This image shows sample output:

Summary View Display:
If the template is assigned to all Citrix XenApp Session servers, then a "Citrix" application summary can be defined.
This figure shows sample widgets configured using "Custom Query" widgets:

These are the custom SWQL queries used in these widgets:
Session Latency - SWQL query:
SELECT S.NODE as [Server Name], M.MSG as [Session Information], S.STAT as [Latency (ms)]
, case when S.STAT>=500 then '/Orion/images/StatusIcons/Small-Critical.gif'
when S.STAT>=200 then '/Orion/images/StatusIcons/Small-Warning.gif'
else '/Orion/images/StatusIcons/Small-Up.gif'
end as [_IconFor_Latency (ms)]
FROM
(
SELECT
n.Caption AS NODE,
a.Name AS APP,
c.ComponentName AS CMPNT,
de.AvgNumericData AS STAT,
de.StringData AS MSG,
de.ColumnLabel as LBL
FROM
Orion.APM.Component(nolock=true) c
JOIN Orion.APM.CurrentComponentStatus(nolock=true) ccs ON c.ComponentID = ccs.ComponentID
JOIN Orion.APM.DynamicEvidence(nolock=true) de ON de.ComponentStatusID = ccs.ComponentStatusID
JOIN Orion.APM.Application(nolock=true) a ON c.ApplicationID = a.ApplicationID
JOIN Orion.Nodes(nolock=true) n ON a.NodeID = n.NodeID
WHERE
de.AvgNumericData IS NOT NULL
AND a.Name='Citrix XenApp Session Statistics'
AND c.Name='Top 10 Latency'
) s
INNER JOIN
(
SELECT
n.Caption AS NODE,
a.Name AS APP,
c.ComponentName AS CMPNT,
de.AvgNumericData AS STAT,
de.StringData AS MSG,
de.ColumnLabel as LBL
FROM
Orion.APM.Component(nolock=true) c
JOIN Orion.APM.CurrentComponentStatus(nolock=true) ccs ON c.ComponentID = ccs.ComponentID
JOIN Orion.APM.DynamicEvidence(nolock=true) de ON de.ComponentStatusID = ccs.ComponentStatusID
JOIN Orion.APM.Application(nolock=true) a ON c.ApplicationID = a.ApplicationID
JOIN Orion.Nodes(nolock=true) n ON a.NodeID = n.NodeID
WHERE
de.AvgNumericData IS NULL
AND a.Name='Citrix XenApp Session Statistics'
AND c.Name='Top 10 Latency'
) m ON s.Node=m.Node and s.App=m.App and s.cmpnt=m.cmpnt and s.lbl=m.lbl
order by S.STAT desc
Session RTT - SWQL query:
SELECT S.NODE as [Server Name], M.MSG as [Session Information], S.STAT as [RTT (ms)]
, case when S.STAT>=500 then '/Orion/images/StatusIcons/Small-Critical.gif'
when S.STAT>=200 then '/Orion/images/StatusIcons/Small-Warning.gif'
else '/Orion/images/StatusIcons/Small-Up.gif'
end as [_IconFor_RTT (ms)]
FROM
(
SELECT
n.Caption AS NODE,
a.Name AS APP,
c.ComponentName AS CMPNT,
de.AvgNumericData AS STAT,
de.StringData AS MSG,
de.ColumnLabel as LBL
FROM
Orion.APM.Component(nolock=true) c
JOIN Orion.APM.CurrentComponentStatus(nolock=true) ccs ON c.ComponentID = ccs.ComponentID
JOIN Orion.APM.DynamicEvidence(nolock=true) de ON de.ComponentStatusID = ccs.ComponentStatusID
JOIN Orion.APM.Application(nolock=true) a ON c.ApplicationID = a.ApplicationID
JOIN Orion.Nodes(nolock=true) n ON a.NodeID = n.NodeID
WHERE
de.AvgNumericData IS NOT NULL
AND a.Name='Citrix XenApp Session Statistics'
AND c.Name='Top 10 RTT'
) s
INNER JOIN
(
SELECT
n.Caption AS NODE,
a.Name AS APP,
c.ComponentName AS CMPNT,
de.AvgNumericData AS STAT,
de.StringData AS MSG,
de.ColumnLabel as LBL
FROM
Orion.APM.Component(nolock=true) c
JOIN Orion.APM.CurrentComponentStatus(nolock=true) ccs ON c.ComponentID = ccs.ComponentID
JOIN Orion.APM.DynamicEvidence(nolock=true) de ON de.ComponentStatusID = ccs.ComponentStatusID
JOIN Orion.APM.Application(nolock=true) a ON c.ApplicationID = a.ApplicationID
JOIN Orion.Nodes(nolock=true) n ON a.NodeID = n.NodeID
WHERE
de.AvgNumericData IS NULL
AND a.Name='Citrix XenApp Session Statistics'
AND c.Name='Top 10 RTT'
) m ON s.Node=m.Node and s.App=m.App and s.cmpnt=m.cmpnt and s.lbl=m.lbl
order by S.STAT desc
Ecmel Ozdemir
Prosperon - UK SolarWinds Partners
Installation | Consultancy | Training | Licenses