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();
                }
            }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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();
                }
            }
Ejemplo n.º 7
0
        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;
        }
Ejemplo n.º 8
0
        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");
        }
Ejemplo n.º 9
0
 public static string ToName(this TraceEventClass @class)
 {
     return(Enum.GetName(typeof(TraceEventClass), @class));
 }
Ejemplo n.º 10
0
            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();
            }
Ejemplo n.º 11
0
 public MyTraceEventArgs(TraceEventArgs args)
 {
     EventClass = args.EventClass;
     DatabaseName = args.DatabaseName;
     ObjectPath = args.ObjectPath;
     TextData = args.TextData;
     SessionIdOrSpid = args.SessionID;
 }
Ejemplo n.º 12
0
            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();
            }
Ejemplo n.º 13
0
 public MyTraceEventArgs(TraceEventArgs args)
 {
     EventClass = args.EventClass;
     EventSubclass = args.EventSubclass;
     DatabaseName = args.DatabaseName;
     ObjectPath = args.ObjectPath;
     TextData = args.TextData;
 }