Example #1
0
        public static AnalyzerExecutionResult CreateFromDataSet(DataSet dataset)
        {
            #region Argument exception

            if (dataset == null)
            {
                throw new ArgumentNullException("dataset");
            }

            #endregion

            // TODO: implementare gestione cancellationToken.CancellationRequested

            var result = new AnalyzerExecutionResult()
            {
                EnginePerformances = EnginePerformanceCollection.CreateFromDataSet(dataset),
                AggregationsReads  = AggregationsReadCollection.CreateFromDataSet(dataset),
                PartitionsReads    = PartitionsReadCollection.CreateFromDataSet(dataset),
                CachesReads        = CachesReadCollection.CreateFromDataSet(dataset),
                Performances       = PerformanceItemCollectionList.CreateFromDataSet(dataset),
                Profilers          = ProfilerItemCollectionList.CreateFromDataSet(dataset),
                ProcedureEvents    = ProcedureEventCollection.CreateFromDataSet(dataset),
                QueryResults       = QueryResult.CreateFromDataSet(dataset),
            };

            var table = dataset.Tables["ExecutionInfo", "Common"];
            if (table != null)
            {
                result.ExecutionInfo = table.Copy();
            }

            return(result);
        }
Example #2
0
        public static AnalyzerExecutionResult CreateFromBatch(string connectionStringBatch, string batchID, ClearCacheMode clearCacheMode)
        {
            // TODO: parallelizzare e sistemare codice
            Action <string, Action <DataTable>, Action <SqlParameterCollection> > load = (commandText, action, param) =>
            {
                using (var connection = new SqlConnection(connectionStringBatch))
                {
                    connection.Open();

                    using (var command = connection.CreateCommand())
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandText = commandText;
                        command.Parameters.Add(new SqlParameter("@batchID", SqlDbType.UniqueIdentifier)).Value = Guid.Parse(batchID);
                        command.Parameters.Add(new SqlParameter("@clearCacheMode", SqlDbType.NVarChar)).Value  = clearCacheMode;
                        param(command.Parameters);

                        using (var reader = command.ExecuteReader())
                            using (var table = new DataTable())
                            {
                                table.Load(reader);
                                action(table);
                            }
                    }
                }
            };

            var result = new AnalyzerExecutionResult();

            load("[asqa].[sp_read_CommonEnginePerformance]", (table) => result.EnginePerformances = EnginePerformanceCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_CommonAggregationsRead]", (table) => result.AggregationsReads   = AggregationsReadCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_CommonPartitionsRead]", (table) => result.PartitionsReads       = PartitionsReadCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_CommonCachesRead]", (table) => result.CachesReads = CachesReadCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_ExecutionInfo]", (table) => result.ExecutionInfo  = table.Copy(), (param) => { });

            #region Load performance

            DataTable performanceTypes = null;
            load("[asqa].[sp_read_PerformanceTypes]", (table) => performanceTypes = table.Copy(), (param) => { });

            result.Performances = new PerformanceItemCollectionList();

            foreach (DataRow type in performanceTypes.Rows)
            {
                string category = Convert.ToString(type["CategoryName"]);
                string name     = Convert.ToString(type["CounterName"]);

                load("[asqa].[sp_read_Performance]",
                     (table) => result.Performances.Add(PerformanceItemCollection.CreateFromDataTable(table, category, name)),
                     (param) =>
                {
                    param.Add(new SqlParameter("@categoryName", SqlDbType.NVarChar)).Value = category;
                    param.Add(new SqlParameter("@counterName", SqlDbType.NVarChar)).Value  = name;
                });
            }

            #endregion

            #region Load trace

            DataTable profilerTypes = null;
            load("[asqa].[sp_read_TraceTypes]", (table) => profilerTypes = table.Copy(), (param) => { });

            result.Profilers = new ProfilerItemCollectionList();

            foreach (DataRow type in profilerTypes.Rows)
            {
                string eventClass = type["EventClass"].ToString();

                load("[asqa].[sp_read_Trace]",
                     (table) => result.Profilers.Add(ProfilerItemCollection.CreateFromDataTable(table, eventClass)),
                     (param) => param.Add(new SqlParameter("@eventClass", SqlDbType.NVarChar)).Value = eventClass);
            }

            #endregion

            return(result);
        }