private StatementPrepareEvent GetStatementPrepareEvent(BsonDocument startEvent, BsonDocument endEvent) { StatementPrepareEvent statementPrepareEvent = new StatementPrepareEvent(); // Retrieve each associated event. var sessionEvents = GetEventsForRange(startEvent, endEvent).ToList(); if (!sessionEvents.Any()) { return(statementPrepareEvent); } // Process each associated event. foreach (var sessionEvent in sessionEvents) { string message = BsonDocumentHelper.GetString("message", sessionEvent); if (String.IsNullOrWhiteSpace(message)) { continue; } if (!message.Contains("StatementPrepare") && !message.StartsWith("Compiling query")) { if (String.IsNullOrWhiteSpace(statementPrepareEvent.Query)) { statementPrepareEvent.Query = message.Trim(); } else { statementPrepareEvent.Query = String.Format("{0} {1}", statementPrepareEvent.Query, message.Trim()); } } if (message.Contains("stmt_guid=")) { var guidSegments = message.Split(' ').Last().Split('='); if (guidSegments.Length > 1) { int guid; if (Int32.TryParse(guidSegments[1], out guid)) { statementPrepareEvent.Guid = guid; } } } if (message.Contains("StatementPrepare: OK")) { statementPrepareEvent.Success = true; } if (message.Contains("StatementPrepare: FAILED")) { statementPrepareEvent.Success = false; statementPrepareEvent.Error = message.Replace("StatementPrepare: FAILED, error=", ""); } } return(statementPrepareEvent); }
private IDictionary <int, StatementPrepareEvent> GetAllStatementPrepareEvents(IList <BsonDocument> sessionLines) { IDictionary <int, StatementPrepareEvent> statementPrepareEvents = new Dictionary <int, StatementPrepareEvent>(); Queue <BsonDocument> lineQueue = new Queue <BsonDocument>(); foreach (var line in sessionLines) { string message = BsonDocumentHelper.GetString("message", line); if (message.Contains("StatementPrepare")) { lineQueue.Enqueue(line); } } lineQueue = SortByLogLine(lineQueue); while (lineQueue.Count >= 2) { StatementPrepareEvent prepareEvent = GetStatementPrepareEvent(lineQueue.Dequeue(), lineQueue.Dequeue()); if (prepareEvent.Success) { statementPrepareEvents[prepareEvent.Guid] = prepareEvent; } } return(statementPrepareEvents); }
private IList <DataengineEvent> GetAllStatementExecuteEvents(int sessionId, IList <BsonDocument> sessionLines, IDictionary <int, StatementPrepareEvent> statementPrepareEvents) { IList <DataengineEvent> statementExecuteEvents = new List <DataengineEvent>(); Queue <BsonDocument> lineQueue = new Queue <BsonDocument>(); foreach (var line in sessionLines) { string message = BsonDocumentHelper.GetString("message", line); if (message.Contains("StatementExecute")) { lineQueue.Enqueue(line); } } lineQueue = SortByLogLine(lineQueue); while (lineQueue.Count >= 2) { try { BsonDocument startEvent = lineQueue.Dequeue(); BsonDocument endEvent = lineQueue.Dequeue(); DataengineEvent statementExecuteEvent = GetDataEngineEvent(sessionId, "StatementExecute", startEvent, endEvent); int statementGuid = GetStatementGuidFromLogLine(startEvent); StatementPrepareEvent prepareEvent = statementPrepareEvents[statementGuid]; string queryText = prepareEvent.Query; statementExecuteEvent.Query = queryText; statementExecuteEvents.Add(statementExecuteEvent); } catch (Exception ex) { Log.ErrorFormat("Problem gathering StatementExecute event data on session '{0}': {1}", sessionId, ex.Message); } } return(statementExecuteEvents); }