Un de mes clients m’a demandé un rapport sur l’utilisation de ses AOS. Une donnée intéressante de ce rapport est le nombre d’utilisateur actif sur chaque AOS et le nombre de connexion active.
Nous pouvons trouver l’information via System Administration --> Common --> Users --> Online Users. Sous l’onglet Client Sessions, on y trouve le nombre d’utilisateur actif
Sous l’onglet Server Instances, on y trouve le nombre de connexion actif (inclus les sessions de type Workers)
J’ai développé une requête afin d’obtenir toute l’information dans un même tableau.
SET NOCOUNT ON
DECLARE @name VARCHAR(256)
DECLARE @name VARCHAR(256)
DECLARE @date VARCHAR(256)
DECLARE @time VARCHAR(256)
SET @date = (SELECT CONVERT(VARCHAR, GETDATE(), 23))
SET @time = (SELECT substring(CONVERT(VARCHAR, GETDATE(), 108),0,6))
CREATE TABLE #dbinfo
(
Date varchar (25),
Time varchar (25),
ServerName varchar(25),
RichClient bigint,
BusinessConnector bigint,
Workers bigint,
WebUser bigint
)
DECLARE db_cursor CURSOR FOR
SELECT aosid FROM SYSSERVERSESSIONS
WHERE status = 1
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO #dbinfo
SELECT DISTINCT @date, @time, @name,
(SELECT COUNT (*)
FROM SYSSERVERSESSIONS
s, SYSCLIENTSESSIONS c
WHERE c.clienttype = 0
AND
AOSID = @name
AND c.STATUS =1
AND s.serverID = c.serverID
GROUP BY
CLIENTTYPE) AS RichClient,
(SELECT COUNT (*)
FROM SYSSERVERSESSIONS
s, SYSCLIENTSESSIONS c
WHERE c.clienttype = 1
AND
AOSID = @name
AND c.STATUS =1
AND s.serverID = c.serverID
GROUP BY
CLIENTTYPE) AS BusinessConnector,
(SELECT COUNT (*)
FROM SYSSERVERSESSIONS
s, SYSCLIENTSESSIONS c
WHERE c.clienttype = 3
AND
AOSID = @name
AND c.STATUS =1
AND s.serverID = c.serverID
GROUP BY
CLIENTTYPE) AS Worker,
(SELECT COUNT (*)
FROM SYSSERVERSESSIONS
s, SYSCLIENTSESSIONS c
WHERE c.clienttype = 5
AND
AOSID = @name
AND c.STATUS =1
AND s.serverID = c.serverID
GROUP BY
CLIENTTYPE) AS WebClient
FROM SYSSERVERSESSIONS
s, SYSCLIENTSESSIONS c
WHERE AOSID = @name
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
SELECT Date
, Time
, ServerName
, ISNULL (RichClient,0) AS RichClient
, ISNULL (BusinessConnector,0) AS BusinessConnector
, ISNULL (Workers,0) AS Workers
, ISNULL (WebUser,0) AS WebUser
, ISNULL (RichClient,0) + ISNULL (BusinessConnector,0) + ISNULL(Workers,0) + ISNULL(WebUser,0) AS ActiveConnections
FROM #dbinfo
ORDER BY ServerName
Le résultat est le suivant :
Si vous voulez un rapport sur une plus longue durée. Vous pouvez créer une tâche céduler qui exécute le requête et exporte les donnée dans un fichier .CSV.
@ECHO OFF
REM **************************
REM **SET YOUR VARIABLE**
REM **************************
set databaseserver=.
set databasename=MicrosoftDynamicsAX
set scriptpath=C:\Script\AXOnlineUsers
set OnlineUsersQuery=OnlineUsers.sql
set Outputfile=OnlineUsers.csv
ECHO ON
SQLCMD -S %databaseserver% -d %databasename% -i %scriptpath%\%OnlineUsersQuery% -s "," -h -1 >> %scriptpath%\%Outputfile%
Le résultat ressemble à ceci :