diff --git a/BeyondTrustConnector/AccessSessionUpdater.cs b/BeyondTrustConnector/AccessSessionUpdater.cs index 60a42ec..3228511 100644 --- a/BeyondTrustConnector/AccessSessionUpdater.cs +++ b/BeyondTrustConnector/AccessSessionUpdater.cs @@ -104,10 +104,23 @@ public async Task Run([TimerTrigger("0 */15 * * * *", RunOnStartup = false)] Tim private static async Task> CheckIfSessionsAlreadyExists(QueryService queryService, IEnumerable sessions) { - var sessionIds = sessions.Select(s => s.Attribute("lsid")!.Value).Distinct().Aggregate(string.Empty, (current, next) => current += $"'{next}',").TrimEnd(','); - var existingSessionResult = await queryService.QueryWorkspace($"BeyondTrustAccessSession_CL | where SessionId in ({sessionIds}) | project SessionId"); - var existingSessions = existingSessionResult?.Table.Rows.Select(r => r[0].ToString()).ToList() ?? []; - return existingSessions; + var sessionIds = sessions.Select(s => s.Attribute("lsid")!.Value).Distinct().ToList(); + var existingSessions = new List(); + + const int batchSize = 20; + for (int i = 0; i < sessionIds.Count; i += batchSize) + { + var batch = sessionIds.Skip(i).Take(batchSize); + var batchIds = string.Join(",", batch.Select(id => $"'{id}'")); + var query = $"BeyondTrustAccessSession_CL | where SessionId in ({batchIds}) | project SessionId"; + var existingSessionResult = await queryService.QueryWorkspace(query); + if (existingSessionResult?.Table.Rows is not null) + { + existingSessions.AddRange(existingSessionResult.Table.Rows.Select(r => r[0].ToString())); + } + } + + return existingSessions.Distinct().ToList(); } private static List> GetUserDetails(XElement session, string ns)