|
2 | 2 | using Microsoft.SqlServer.XEvent.XELite; |
3 | 3 | using NLog; |
4 | 4 | using System.Diagnostics; |
| 5 | +using System.Runtime.Intrinsics.Arm; |
5 | 6 | using XESmartTarget.Core.Utils; |
6 | 7 |
|
7 | 8 | namespace XESmartTarget.Core |
@@ -297,21 +298,59 @@ private XELiveEventStreamer ConnectSessionStream(string connectionString) |
297 | 298 | using (var conn = new SqlConnection(connectionString)) |
298 | 299 | { |
299 | 300 | conn.Open(); |
300 | | - var cmd = conn.CreateCommand(); |
301 | | - cmd.CommandText = @"IF SERVERPROPERTY('EngineEdition') = 5 |
302 | | - BEGIN |
303 | | - SELECT name FROM sys.dm_xe_database_sessions WHERE name = @sessionName |
304 | | - END |
305 | | - ELSE |
306 | | - BEGIN |
307 | | - SELECT name FROM sys.dm_xe_sessions WHERE name = @sessionName |
308 | | - END "; |
| 301 | + using var cmd = conn.CreateCommand(); |
| 302 | + cmd.CommandText = """ |
| 303 | + IF SERVERPROPERTY('EngineEdition') = 5 |
| 304 | + BEGIN |
| 305 | + SELECT |
| 306 | + @@SERVERNAME AS server_name, |
| 307 | + SERVERPROPERTY('EngineEdition') AS engine_edition, |
| 308 | + name |
| 309 | + FROM sys.dm_xe_database_sessions |
| 310 | + WHERE name = @sessionName |
| 311 | + END |
| 312 | + ELSE |
| 313 | + BEGIN |
| 314 | + SELECT |
| 315 | + @@SERVERNAME AS server_name, |
| 316 | + SERVERPROPERTY('EngineEdition') AS engine_edition, |
| 317 | + name |
| 318 | + FROM sys.dm_xe_sessions |
| 319 | + WHERE name = @sessionName |
| 320 | + END |
| 321 | + """; |
309 | 322 | cmd.Parameters.Add(new SqlParameter("@sessionName", SessionName)); |
310 | | - var name = cmd.ExecuteScalar(); |
311 | | - if(name == null) |
| 323 | + string? serverName = null, sessionName = null; |
| 324 | + int engineEdition; |
| 325 | + using (var rdr = cmd.ExecuteReader()) |
| 326 | + if (rdr.Read()) |
| 327 | + { |
| 328 | + serverName = rdr.GetString(0); |
| 329 | + engineEdition = rdr.GetInt32(1); |
| 330 | + sessionName = rdr.GetString(2); |
| 331 | + } |
| 332 | + if (sessionName == null) |
312 | 333 | { |
313 | 334 | throw new ArgumentException($"Connected to {ConnectionInfo.ServerName}. Session {SessionName} not found."); |
314 | 335 | } |
| 336 | + |
| 337 | + // we need to store the actual server name in the tokens |
| 338 | + // actual server name might be different from the one used to connect |
| 339 | + // which is particularly true in case of AG listeners |
| 340 | + // Also Azure SQL Managed Instance and Azure SQL Database |
| 341 | + // might return different server names |
| 342 | + foreach (Response r in Responses) |
| 343 | + { |
| 344 | + if (!r.Tokens.ContainsKey("ActualServerName")) |
| 345 | + { |
| 346 | + r.Tokens.Add("ActualServerName", serverName); |
| 347 | + } |
| 348 | + else |
| 349 | + { |
| 350 | + r.Tokens["ActualServerName"] = serverName; |
| 351 | + } |
| 352 | + } |
| 353 | + |
315 | 354 | conn.Close(); |
316 | 355 | logger.Info($"Connected to session {SessionName} on {ConnectionInfo.ServerName}."); |
317 | 356 | } |
|
0 commit comments