public MyTraceEventArgs(SqlDataReader reader) { EventClass = (TraceEventClass)Enum.ToObject(typeof(TraceEventClass), Convert.ToInt64(reader["EventClass"])); if (!Convert.IsDBNull(reader["ObjectPath"])) { string[] pathParts = reader["ObjectPath"].ToString().Split('.'); Database db = liveServer.Databases.Find(pathParts[1]); if (db != null) { DatabaseName = db.Name; } } else if (ReaderContainsColumn(reader, "DatabaseName") && !Convert.IsDBNull(reader["DatabaseName"])) { DatabaseName = reader["DatabaseName"].ToString(); } else { DatabaseName = null; } if (!Convert.IsDBNull(reader["ObjectPath"])) { ObjectPath = reader["ObjectPath"].ToString(); } if (!Convert.IsDBNull(reader["TextData"])) { TextData = reader["TextData"].ToString(); } if (!Convert.IsDBNull(reader[sSessionIDColumnName])) { SessionIdOrSpid = reader[sSessionIDColumnName].ToString(); } }
public static TraceEvent Create(TraceEventClass eventClass) { var trc = new TraceEvent(eventClass); trc.Columns.Add(TraceColumn.EventClass); trc.Columns.Add(TraceColumn.TextData); trc.Columns.Add(TraceColumn.CurrentTime); trc.Columns.Add(TraceColumn.Spid); trc.Columns.Add(TraceColumn.SessionID); trc.Columns.Add(TraceColumn.ActivityID); trc.Columns.Add(TraceColumn.RequestID); if (eventClass == TraceEventClass.QueryEnd) { trc.Columns.Add(TraceColumn.DatabaseName); trc.Columns.Add(TraceColumn.EndTime); trc.Columns.Add(TraceColumn.NTUserName); } if (eventClass != TraceEventClass.DirectQueryEnd) { // DirectQuery doesn't have subclasses trc.Columns.Add(TraceColumn.EventSubclass); } if (eventClass != TraceEventClass.VertiPaqSEQueryCacheMatch) { trc.Columns.Add(TraceColumn.StartTime); } if (eventClass == TraceEventClass.QueryEnd || eventClass == TraceEventClass.CommandEnd || eventClass == TraceEventClass.DAXQueryPlan) { trc.Columns.Add(TraceColumn.ApplicationName); } switch (eventClass) { case TraceEventClass.CommandEnd: case TraceEventClass.CalculateNonEmptyEnd: case TraceEventClass.DirectQueryEnd: case TraceEventClass.DiscoverEnd: case TraceEventClass.ExecuteMdxScriptEnd: case TraceEventClass.FileSaveEnd: case TraceEventClass.ProgressReportEnd: case TraceEventClass.QueryCubeEnd: case TraceEventClass.QueryEnd: case TraceEventClass.QuerySubcube: case TraceEventClass.QuerySubcubeVerbose: case TraceEventClass.VertiPaqSEQueryEnd: trc.Columns.Add(TraceColumn.Duration); trc.Columns.Add(TraceColumn.CpuTime); break; case TraceEventClass.Error: trc.Columns.Add(TraceColumn.Error); break; } return(trc); }
private void SetupTraceEvents(Trace trace, List <DaxStudioTraceEventClass> events) { Log.Verbose(Constants.LogMessageTemplate, nameof(QueryTraceEngine), nameof(SetupTraceEvents), "entering"); trace.Events.Clear(); // Add CommandBegine & DiscoverBegin so we can catch the heartbeat events trace.Events.Add(TraceEventFactory.Create(TraceEventClass.DiscoverBegin)); trace.Events.Add(TraceEventFactory.Create(TraceEventClass.CommandBegin)); // Add QueryEnd so we know when to stop the trace trace.Events.Add(TraceEventFactory.Create(TraceEventClass.QueryEnd)); // catch the events in the ITraceWatcher foreach (DaxStudioTraceEventClass eventClass in events) { TraceEventClass amoEventClass = (TraceEventClass)eventClass; if (trace.Events.Find(amoEventClass) != null) { continue; } var trcEvent = TraceEventFactory.Create(amoEventClass); trace.Events.Add(trcEvent); } trace.Update(UpdateOptions.Default, UpdateMode.CreateOrReplace); Log.Verbose(Constants.LogMessageTemplate, nameof(QueryTraceEngine), nameof(SetupTraceEvents), "exiting"); }
public MyTraceEventArgs(TraceEventArgs args) { EventClass = args.EventClass; DatabaseName = args.DatabaseName; ObjectPath = args.ObjectPath; TextData = args.TextData; SessionIdOrSpid = args.SessionID; }
public MyTraceEventArgs(TraceEventArgs args) { EventClass = args.EventClass; EventSubclass = args.EventSubclass; DatabaseName = args.DatabaseName; ObjectPath = args.ObjectPath; TextData = args.TextData; }
public MyTraceEventArgs(SqlDataReader reader) { EventClass = (TraceEventClass)Enum.ToObject(typeof(TraceEventClass), Convert.ToInt64(reader["EventClass"])); //can't parse EventSubclass like EventClass //following code based on http://msdn2.microsoft.com/en-us/library/ms174472.aspx if (!Convert.IsDBNull(reader["EventSubclass"])) { if (EventClass == TraceEventClass.QueryEnd) { if (Convert.ToInt64(reader["EventSubclass"]) == 0) { EventSubclass = TraceEventSubclass.MdxQuery; } else if (Convert.ToInt64(reader["EventSubclass"]) == 1) { EventSubclass = TraceEventSubclass.DmxQuery; } else if (Convert.ToInt64(reader["EventSubclass"]) == 2) { EventSubclass = TraceEventSubclass.SqlQuery; } else if (Convert.ToInt64(reader["EventSubclass"]) == 3) { EventSubclass = TraceEventSubclass.DAXQuery; } else { EventSubclass = TraceEventSubclass.NotAvailable; } } } if (!Convert.IsDBNull(reader["ObjectPath"])) { string[] pathParts = reader["ObjectPath"].ToString().Split('.'); DatabaseName = pathParts[1]; //TODO: path contains ID... won't match name? } else if (ReaderContainsColumn(reader, "DatabaseName") && !Convert.IsDBNull(reader["DatabaseName"])) { DatabaseName = reader["DatabaseName"].ToString(); } else { DatabaseName = null; } if (!Convert.IsDBNull(reader["ObjectPath"])) { ObjectPath = reader["ObjectPath"].ToString(); } if (!Convert.IsDBNull(reader["TextData"])) { TextData = reader["TextData"].ToString(); } }
public static TraceEvent Create(TraceEventClass eventClass) { var trc = new TraceEvent(eventClass); trc.Columns.Add(TraceColumn.EventClass); trc.Columns.Add(TraceColumn.EventSubclass); trc.Columns.Add(TraceColumn.TextData); trc.Columns.Add(TraceColumn.CurrentTime); trc.Columns.Add(TraceColumn.Spid); trc.Columns.Add(TraceColumn.SessionID); if (eventClass != TraceEventClass.VertiPaqSEQueryCacheMatch) { trc.Columns.Add(TraceColumn.StartTime); } if (eventClass == TraceEventClass.QueryEnd || eventClass == TraceEventClass.CommandEnd || eventClass == TraceEventClass.DAXQueryPlan) { trc.Columns.Add(TraceColumn.ApplicationName); } switch (eventClass) { case TraceEventClass.CommandEnd: case TraceEventClass.CalculateNonEmptyEnd: case TraceEventClass.DirectQueryEnd: case TraceEventClass.DiscoverEnd: case TraceEventClass.ExecuteMdxScriptEnd: case TraceEventClass.FileSaveEnd: case TraceEventClass.ProgressReportEnd: case TraceEventClass.QueryCubeEnd: case TraceEventClass.QueryEnd: case TraceEventClass.QuerySubcube: case TraceEventClass.QuerySubcubeVerbose: case TraceEventClass.VertiPaqSEQueryEnd: trc.Columns.Add(TraceColumn.Duration); trc.Columns.Add(TraceColumn.CpuTime); break; case TraceEventClass.Error: trc.Columns.Add(TraceColumn.Error); break; } return trc; }
private void SetupTrace(Trace trace, List <DaxStudioTraceEventClass> events) { Log.Verbose("{class} {method} {message}", "QueryTraceEngine", "SetupTrace", "entering"); trace.Events.Clear(); // Add CommandBegin so we can catch the heartbeat events trace.Events.Add(TraceEventFactory.Create(TraceEventClass.CommandBegin)); // Add QueryEnd so we know when to stop the trace trace.Events.Add(TraceEventFactory.Create(TraceEventClass.QueryEnd)); // catch the events in the ITraceWatcher foreach (DaxStudioTraceEventClass eventClass in events) { TraceEventClass amoEventClass = (TraceEventClass)eventClass; if (trace.Events.Find(amoEventClass) != null) { continue; } var trcEvent = TraceEventFactory.Create(amoEventClass); trace.Events.Add(trcEvent); } trace.Update(); Log.Verbose("{class} {method} {message}", "QueryTraceEngine", "SetupTrace", "exiting"); }
public static string ToName(this TraceEventClass @class) { return(Enum.GetName(typeof(TraceEventClass), @class)); }
public MyTraceEventArgs(SqlDataReader reader) { EventClass = (TraceEventClass)Enum.ToObject(typeof(TraceEventClass), Convert.ToInt64(reader["EventClass"])); if (!Convert.IsDBNull(reader["ObjectPath"])) { string[] pathParts = reader["ObjectPath"].ToString().Split('.'); Database db = liveServer.Databases.Find(pathParts[1]); if (db != null) { DatabaseName = db.Name; } } else if (ReaderContainsColumn(reader, "DatabaseName") && !Convert.IsDBNull(reader["DatabaseName"])) { DatabaseName = reader["DatabaseName"].ToString(); } else { DatabaseName = null; } if (!Convert.IsDBNull(reader["ObjectPath"])) ObjectPath = reader["ObjectPath"].ToString(); if (!Convert.IsDBNull(reader["TextData"])) TextData = reader["TextData"].ToString(); if (!Convert.IsDBNull(reader[sSessionIDColumnName])) SessionIdOrSpid = reader[sSessionIDColumnName].ToString(); }
public MyTraceEventArgs(SqlDataReader reader) { EventClass = (TraceEventClass)Enum.ToObject(typeof(TraceEventClass), Convert.ToInt64(reader["EventClass"])); //can't parse EventSubclass like EventClass //following code based on http://msdn2.microsoft.com/en-us/library/ms174472.aspx if (!Convert.IsDBNull(reader["EventSubclass"])) { if (EventClass == TraceEventClass.QueryEnd) { if (Convert.ToInt64(reader["EventSubclass"]) == 0) EventSubclass = TraceEventSubclass.MdxQuery; else if (Convert.ToInt64(reader["EventSubclass"]) == 1) EventSubclass = TraceEventSubclass.DmxQuery; else if (Convert.ToInt64(reader["EventSubclass"]) == 2) EventSubclass = TraceEventSubclass.SqlQuery; else EventSubclass = TraceEventSubclass.NotAvailable; } } if (!Convert.IsDBNull(reader["ObjectPath"])) { string[] pathParts = reader["ObjectPath"].ToString().Split('.'); DatabaseName = pathParts[1]; } else if (ReaderContainsColumn(reader, "DatabaseName") && !Convert.IsDBNull(reader["DatabaseName"])) { DatabaseName = reader["DatabaseName"].ToString(); } else { DatabaseName = null; } if (!Convert.IsDBNull(reader["ObjectPath"])) ObjectPath = reader["ObjectPath"].ToString(); if (!Convert.IsDBNull(reader["TextData"])) TextData = reader["TextData"].ToString(); }