Refactor Citrix virtual session data collection

This commit is contained in:
Drechsler, Meik
2026-07-22 11:57:15 +02:00
parent 02fabc91cf
commit 2770ebbb6d
12 changed files with 651 additions and 759 deletions

View File

@@ -680,49 +680,49 @@
SELECT @cnt
</Query>
<Query Name="UpdateDbTablesV1.9">
DECLARE @cnt INT
SET @cnt = 0
<Query Name="UpdateDbTablesV1.9">
DECLARE @cnt INT
SET @cnt = 0
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[main-user]&apos;) AND type in (N&apos;U&apos;))
AND NOT EXISTS (SELECT * FROM Information_Schema.Columns WHERE Table_Name = &apos;main-user&apos; AND Column_Name = &apos;id_citrix&apos;)
BEGIN
PRINT N&apos;Start adding column [id_citrix] to table [main-user] ...&apos;;
ALTER Table [main-user] ADD [id_citrix] int NULL;
SET @cnt = @cnt + 1;
PRINT N&apos;... done.&apos;
END
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[main-user]&apos;) AND type in (N&apos;U&apos;))
AND NOT EXISTS (SELECT * FROM Information_Schema.Columns WHERE Table_Name = &apos;main-user&apos; AND Column_Name = &apos;id_citrix&apos;)
BEGIN
PRINT N&apos;Start adding column [id_citrix] to table [main-user] ...&apos;;
ALTER Table [main-user] ADD [id_citrix] int NULL;
SET @cnt = @cnt + 1;
PRINT N&apos;... done.&apos;
END
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[main-user]&apos;) AND type in (N&apos;U&apos;))
AND NOT EXISTS (SELECT * FROM Information_Schema.Columns WHERE Table_Name = &apos;main-user&apos; AND Column_Name = &apos;tenant_citrix&apos;)
BEGIN
PRINT N&apos;Start adding column [tenant_citrix] to table [main-user] ...&apos;;
ALTER Table [main-user] ADD [tenant_citrix] nvarchar(100) NULL;
SET @cnt = @cnt + 1;
PRINT N&apos;... done.&apos;
END
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[main-user]&apos;) AND type in (N&apos;U&apos;))
AND NOT EXISTS (SELECT * FROM Information_Schema.Columns WHERE Table_Name = &apos;main-user&apos; AND Column_Name = &apos;tenant_citrix&apos;)
BEGIN
PRINT N&apos;Start adding column [tenant_citrix] to table [main-user] ...&apos;;
ALTER Table [main-user] ADD [tenant_citrix] nvarchar(100) NULL;
SET @cnt = @cnt + 1;
PRINT N&apos;... done.&apos;
END
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[QActions]&apos;) AND type in (N&apos;U&apos;))
AND NOT EXISTS (SELECT * FROM Information_Schema.Columns WHERE Table_Name = &apos;QActions&apos; AND Column_Name = &apos;TimeStamp&apos;)
BEGIN
PRINT N&apos;Start adding column [TimeStamp] to table [QActions] ...&apos;;
ALTER Table [QActions] ADD [TimeStamp] Datetime NULL;
SET @cnt = @cnt + 1;
PRINT N&apos;... done.&apos;
END
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[QActions]&apos;) AND type in (N&apos;U&apos;))
AND NOT EXISTS (SELECT * FROM Information_Schema.Columns WHERE Table_Name = &apos;QActions&apos; AND Column_Name = &apos;TimeStamp&apos;)
BEGIN
PRINT N&apos;Start adding column [TimeStamp] to table [QActions] ...&apos;;
ALTER Table [QActions] ADD [TimeStamp] Datetime NULL;
SET @cnt = @cnt + 1;
PRINT N&apos;... done.&apos;
END
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = &apos;IX_main-user_upn_external&apos;)
BEGIN
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = &apos;IX_main-user_upn_external&apos;)
BEGIN
CREATE NONCLUSTERED INDEX [IX_main-user_upn_external] ON [main-user] ([upn_external] ASC);
CREATE NONCLUSTERED INDEX [IX_main-user_upn_external] ON [main-user] ([upn_external] ASC);
SET @cnt = @cnt+1;
PRINT N&apos;... done.&apos;
SET @cnt = @cnt+1;
PRINT N&apos;... done.&apos;
END
END
SELECT @cnt
</Query>
SELECT @cnt
</Query>
<!--<Query Name="UpdateDbTablesV1.10"/> used in the past and removed-->
<Query Name="UpdateDbTablesV1.11">
DECLARE @cnt INT
@@ -943,12 +943,12 @@
</Query>
<Query Name="UpdateComputerAzure">
UPDATE [main-computer] SET [id_azure]=@id, [deviceid_azure]=@deviceid, tenant_azure = @tenant WHERE [sid_bin]=@sid_bin
</Query>
</Query>
<Query Name="UpdateComputerIntune">
UPDATE [main-computer] SET [id_intune]=@id WHERE [deviceId_azure]=@deviceId
</Query>
<Query Name="UpdateComputerIntune2">
UPDATE [main-computer] SET [id_intune]=@id, [deviceid_azure]=@deviceid, tenant_azure = @tenant WHERE upn_internal = @upn_internal and [domainNB] is null
<Query Name="UpdateComputerIntune2">
UPDATE [main-computer] SET [id_intune]=@id, [deviceid_azure]=@deviceid, tenant_azure = @tenant WHERE upn_internal = @upn_internal and [domainNB] is null
</Query>
<Query Name="GetUserBySidOrUpn">
DECLARE @ID UNIQUEIDENTIFIER
@@ -967,8 +967,8 @@
<Query Name="UpdateUserCitrix">
UPDATE [main-user] SET [id_citrix]=@id WHERE [sid_bin]=@sid_bin
</Query>
<Query Name="UpdateUserCitrix2">
UPDATE [main-user] SET [id_citrix]=@id WHERE upn_internal = @upn_internal AND [id_citrix] is null
<Query Name="UpdateUserCitrix2">
UPDATE [main-user] SET [id_citrix]=@id WHERE upn_internal = @upn_internal AND [id_citrix] is null
</Query>
<Query Name="UpdateMainUserAgent">
UPDATE [main-user] SET [id_agent]=@id_agent WHERE [sid_bin]=@sid_bin AND ([id_agent] is null OR [id_agent] != @id_agent)
@@ -1011,11 +1011,11 @@
SELECT [id] FROM [main-user] WHERE [account] like @account AND ([domainNB] like @domain OR [domainDns] like @domain)
</Query>
<Query Name="GetConnectorIdsFromComputerId">
SELECT [sid_bin], [id_agent], [Name], [last_seen_by_agent], NULL , [tenant_azure],[id_intune], [deviceId_azure],null,null FROM [main-computer] WHERE id = @id
</Query>
SELECT [sid_bin], [id_agent], [Name], [last_seen_by_agent], NULL , [tenant_azure],[id_intune], [deviceId_azure],null,null FROM [main-computer] WHERE id = @id
</Query>
<Query Name="GetConnectorIdsFromUserId">
SELECT [sid_bin], [id_agent], [account], [last_seen_by_agent], [id_agent_azure], [tenant_azure], [id_azure],null,[id_citrix],[tenant_citrix] FROM [main-user] WHERE id = @id
</Query>
SELECT [sid_bin], [id_agent], [account], [last_seen_by_agent], [id_agent_azure], [tenant_azure], [id_azure],null,[id_citrix],[tenant_citrix] FROM [main-user] WHERE id = @id
</Query>
<Query Name="GetUserInfoFromAgentId">
SELECT [id], [full_name], [is_active], [account], COALESCE([domainDns], [domainNB] ), CASE WHEN [id_agent] &lt;&gt; @id THEN 1 ELSE 0 END FROM [main-user] WHERE [id_agent] = @id OR [id_agent_azure] = @id
</Query>
@@ -1675,22 +1675,22 @@
PRINT N&apos; ...done.&apos;;
END
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[Tickets]&apos;) AND type in (N&apos;U&apos;))
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[Tickets]&apos;) AND type in (N&apos;U&apos;))
BEGIN
PRINT N&apos;start creating table [Tickets]...&apos;;
CREATE TABLE [Tickets](
[TicketId] [uniqueidentifier] NOT NULL,
[Status] [nvarchar](16) NOT NULL,
[Start] [datetime] NULL,
[Finish] [datetime] NULL,
[ActiveTime] [int] NULL,
[UserId] [uniqueidentifier] NOT NULL,
[CaseId] [uniqueidentifier] NOT NULL
)
CREATE TABLE [Tickets](
[TicketId] [uniqueidentifier] NOT NULL,
[Status] [nvarchar](16) NOT NULL,
[Start] [datetime] NULL,
[Finish] [datetime] NULL,
[ActiveTime] [int] NULL,
[UserId] [uniqueidentifier] NOT NULL,
[CaseId] [uniqueidentifier] NOT NULL
)
PRINT N&apos; ...done.&apos;;
PRINT N&apos; ...done.&apos;;
END
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[QActions]&apos;) AND type in (N&apos;U&apos;))
@@ -1831,20 +1831,20 @@
CREATE NONCLUSTERED INDEX [IX_UserSession_SessionId] ON [UserSessions]
([SessionId] ASC) INCLUDE([UserId]) WITH (DROP_EXISTING = OFF) ON [PRIMARY];
CREATE NONCLUSTERED INDEX [IX_Cases_CaseId] ON [Cases]
([CaseId] ASC) INCLUDE(SessionId) WITH (DROP_EXISTING = OFF) ON [PRIMARY];
CREATE NONCLUSTERED INDEX [IX_CaseTime_CaseId] ON [CaseTime]
([CaseId] ASC) INCLUDE(StatusId) WITH (DROP_EXISTING = OFF) ON [PRIMARY];
CREATE NONCLUSTERED INDEX [IX_QActionExecutions_ExecutionId_CaseId] ON [QActionExecutions]
([ExecutionId],[CaseId] ASC) WITH (DROP_EXISTING = OFF) ON [PRIMARY];
CREATE NONCLUSTERED INDEX [IX_Tickets_TicketId_CaseId] ON [dbo].[Cases]
([TicketId] ASC, [CaseId] ASC) WITH (DROP_EXISTING = OFF) ON [PRIMARY];
END
</Query>
<Query Name="Update_F4SDAnalyticsMainTables">
@@ -1886,8 +1886,8 @@
SET @cnt = @cnt+1;
PRINT N&apos;... done.&apos;
END
END
IF EXISTS (SELECT 1 FROM sys.objects WHERE name = &apos;FK_Cases_SessionId&apos; AND type=&apos;F&apos;)
BEGIN
ALTER TABLE Cases DROP CONSTRAINT FK_Cases_SessionId
@@ -2460,67 +2460,67 @@
</Query>
<Query Name="CloseUserSession">
IF EXISTS (SELECT TOP 1 * FROM UserSessions WHERE SessionId = @SessionId)
BEGIN
UPDATE [UserSessions]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId;
END
IF NOT EXISTS (SELECT TOP 1 * FROM UserSessions WHERE SessionId = @SessionId) AND EXISTS (SELECT TOP 1 * FROM dbo.Cases WHERE SessionId = @SessionId)
BEGIN
DECLARE @CurrentTimeStamp DATETIME = GETUTCDATE();
INSERT INTO UserSessions
( UserId, SessionId, [Start], [Finish] )
SELECT TOP 1 UserId,SessionId,[Start],@CurrentTimeStamp FROM Cases
WHERE SessionId = @SessionId ORDER BY [Start] ASC;
END
IF EXISTS (SELECT TOP 1 * FROM UserSessions WHERE SessionId = @SessionId)
BEGIN
UPDATE [UserSessions]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId;
END
IF EXISTS (SELECT TOP 1 * FROM dbo.Cases WHERE SessionId = @SessionId)
BEGIN
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT CaseId, 4, @SessionDate
FROM dbo.Cases
WHERE SessionId = @SessionId AND Finish IS NULL;
IF NOT EXISTS (SELECT TOP 1 * FROM UserSessions WHERE SessionId = @SessionId) AND EXISTS (SELECT TOP 1 * FROM dbo.Cases WHERE SessionId = @SessionId)
BEGIN
DECLARE @CurrentTimeStamp DATETIME = GETUTCDATE();
INSERT INTO UserSessions
( UserId, SessionId, [Start], [Finish] )
SELECT TOP 1 UserId,SessionId,[Start],@CurrentTimeStamp FROM Cases
WHERE SessionId = @SessionId ORDER BY [Start] ASC;
END
UPDATE [Cases]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId AND Finish IS NULL;
END
IF EXISTS (SELECT TOP 1 * FROM dbo.Cases WHERE SessionId = @SessionId)
BEGIN
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT CaseId, 4, @SessionDate
FROM dbo.Cases
WHERE SessionId = @SessionId AND Finish IS NULL;
</Query>
UPDATE [Cases]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId AND Finish IS NULL;
END
</Query>
<Query Name="UpdateCases">
DECLARE @CurrentTimeStamp DATETIME = GETUTCDATE();
IF EXISTS (SELECT TOP 1 * FROM dbo.Cases JOIN dbo.CaseTime ON Cases.CaseId = CaseTime.CaseId WHERE Cases.CaseId = @CaseId AND CaseTime.StatusId = 4 )
BEGIN
UPDATE [CaseTime]
SET Statusid = 2
FROM dbo.Cases
JOIN dbo.CaseTime ON Cases.CaseId = CaseTime.CaseId
WHERE Cases.CaseId = @CaseId AND
CaseTime.StatusId = 4
UPDATE [CaseTime]
SET Statusid = 2
FROM dbo.Cases
JOIN dbo.CaseTime ON Cases.CaseId = CaseTime.CaseId
WHERE Cases.CaseId = @CaseId AND
CaseTime.StatusId = 4
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT @CaseId, 3, @CurrentTimeStamp;
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT @CaseId, 3, @CurrentTimeStamp;
UPDATE [Cases]
SET [Finish] = NULL
WHERE CaseId = @CaseId;
UPDATE [Cases]
SET [Finish] = NULL
WHERE CaseId = @CaseId;
END
</Query>
</Query>
<Query Name="InsertTicket">
IF NOT EXISTS (SELECT [TicketId], [UserId],[CaseId],[Status],[Start], [Finish],ActiveTime FROM [Tickets]
WHERE [TicketId] = @TicketId AND [UserId] = @UserId AND [CaseId] = @CaseId AND [Status] = @Status AND [Start] = @Start AND [Finish] = @Finish AND ActiveTime = @ActiveTime )
BEGIN
INSERT INTO [Tickets]
([TicketId], [UserId],[CaseId],[Status],[Start], [Finish],ActiveTime)
SELECT @TicketId,@UserId,@CaseId,@Status,@Start,@Finish,@ActiveTime;
END
</Query>
IF NOT EXISTS (SELECT [TicketId], [UserId],[CaseId],[Status],[Start], [Finish],ActiveTime FROM [Tickets]
WHERE [TicketId] = @TicketId AND [UserId] = @UserId AND [CaseId] = @CaseId AND [Status] = @Status AND [Start] = @Start AND [Finish] = @Finish AND ActiveTime = @ActiveTime )
BEGIN
INSERT INTO [Tickets]
([TicketId], [UserId],[CaseId],[Status],[Start], [Finish],ActiveTime)
SELECT @TicketId,@UserId,@CaseId,@Status,@Start,@Finish,@ActiveTime;
END
</Query>
<Query Name="AnalyticsReportQuickActionExecution">
INSERT INTO [QActionExecutions]