Dynamics AX : Online Users & Connexion Actives (Rapport)

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 @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

DROP TABLE #dbinfo

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 :




Previous
« Prev Post