IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ComTrade_XenDesktop_Trending_Perf_DataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[ComTrade_XenDesktop_Trending_Perf_DataGet] AS RETURN 1')
END
GO
DECLARE @m_instID integer
DECLARE @m_entID integer
DECLARE cur INSENSITIVE CURSOR FOR
select [PerformanceRuleInstanceRowId], [ManagedEntityRowId] from #PerfTable GROUP BY [PerformanceRuleInstanceRowId], [ManagedEntityRowId]
OPEN cur
WHILE 1 = 1
BEGIN
FETCH cur INTO @m_instID, @m_entID
IF @@fetch_status <0
BREAK
IF @BusinessTimeType = 1 --business hours
BEGIN
INSERT INTO #PerfTablePart
SELECT * FROM #perfTable pt WHERE pt.[PerformanceRuleInstanceRowId] = @m_instID AND pt.[ManagedEntityRowId] = @m_entID
and pt.[DateTime] - CAST(FLOOR(CAST(pt.[DateTime] AS float)) AS datetime) >= @BH_start --start hours
and pt.[DateTime] - CAST(FLOOR(CAST(pt.[DateTime] AS float)) AS datetime) < @BH_end --end hours
and ((DATEPART(WEEKDAY, pt.[DateTime]) = 1 and @BusinessDay1 = 1) --monday
OR (DATEPART(WEEKDAY, pt.[DateTime]) = 2 and @BusinessDay2 = 1) --tuesday
OR (DATEPART(WEEKDAY, pt.[DateTime]) = 3 and @BusinessDay3 = 1) --wednesday
OR (DATEPART(WEEKDAY, pt.[DateTime]) = 4 and @BusinessDay4 = 1) --thursday
OR (DATEPART(WEEKDAY, pt.[DateTime]) = 5 and @BusinessDay5 = 1) --friday
OR (DATEPART(WEEKDAY, pt.[DateTime]) = 6 and @BusinessDay6 = 1) --saturday
OR (DATEPART(WEEKDAY, pt.[DateTime]) = 7 and @BusinessDay7 = 1)) --sunday
END
ELSE
BEGIN
INSERT INTO #PerfTablePart
SELECT * FROM #perfTable pt WHERE pt.[PerformanceRuleInstanceRowId] = @m_instID AND pt.[ManagedEntityRowId] = @m_entID
END
--at least 2 rows are needed to calculate trend
IF cast((select COUNT(*) from #PerfTablePart) as int) > 1
BEGIN
--calculate trend data from existing data
DECLARE @m_A float
DECLARE @m_b float
SELECT @m_InstanceName = [InstanceName] FROM #PerfTablePart GROUP BY [InstanceName]
SELECT @m_Path = [Path] FROM #PerfTablePart GROUP BY [Path]
SELECT @m_InstanceID = [PerformanceRuleInstanceRowId] FROM #PerfTablePart GROUP BY [PerformanceRuleInstanceRowId]
SELECT @m_EntityID = [ManagedEntityRowId] FROM #PerfTablePart GROUP BY [ManagedEntityRowId]
SELECT @m_ObjectName = [ObjectName] FROM #PerfTablePart GROUP BY [ObjectName]
SELECT @m_CounterName = [CounterName] FROM #PerfTablePart GROUP BY [CounterName]
SELECT @m_ManagedEntityDefaultName = [ManagedEntityDefaultName] FROM #PerfTablePart GROUP BY [ManagedEntityDefaultName]
SELECT @m_ManagedEntityTypeDefaultName = [ManagedEntityTypeDefaultName] FROM #PerfTablePart GROUP BY [ManagedEntityTypeDefaultName]
SELECT @m_ManagementGroupDefaultName = [ManagementGroupDefaultName] FROM #PerfTablePart GROUP BY [ManagementGroupDefaultName]
--max and min dates
DECLARE @minDate datetime
SELECT @minDate = min([DateTime]) from #PerfTablePart
DECLARE @maxDate datetime
SELECT @maxDate = max([DateTime]) from #PerfTablePart
SET @StartDateTrend_BaseValue = @maxDate
-- create temp table (float data for trending parameters calculation)
CREATE TABLE #ComTrade_XenDesktop_cf (x float, y float)
INSERT INTO #ComTrade_XenDesktop_cf
SELECT cast(([DateTime]-DATEADD(day,-1,(@minDate))) as float), cast([AverageValue] as float) FROM #PerfTablePart
--add to final trend table
IF @AggregationType = 0 --HOURLY
BEGIN
INSERT INTO #TrendTableFinal
SELECT B.[DateTime], A.[SampleCount], A.[AverageValue], A.[MinValue], A.[MaxValue], A.[StandardDeviation],
B.[InstanceName], B.[PerformanceRuleInstanceRowId], B.[Path], B.[ManagedEntityDefaultName], B.[ManagedEntityTypeDefaultName], B.[ManagementGroupDefaultName], B.[ManagedEntityRowId], B.[ObjectName], B.[CounterName], B.[Trend]
FROM #PerfTablePart A
RIGHT JOIN #TrendTable B ON
A.[DateTime] = B.[DateTime]
END
IF @AggregationType = 1 --DAILY
BEGIN
INSERT INTO #TrendTableFinal
SELECT convert(datetime,CONVERT(varchar,DATEPART(month, B.[DateTime]))+'/'+CONVERT(varchar,DATEPART(day, B.[DateTime]))+'/'+CONVERT(varchar,DATEPART(yyyy, B.[DateTime]))),
SUM(A.[SampleCount]),
SUM(A.[AverageValue]*A.[SampleCount])/SUM(A.[SampleCount]),
MIN(A.[MinValue]), MAX(A.[MaxValue]), STDEV(A.[AverageValue]),
B.[InstanceName], B.[PerformanceRuleInstanceRowId], B.[Path], B.[ManagedEntityDefaultName], B.[ManagedEntityTypeDefaultName], B.[ManagementGroupDefaultName], B.[ManagedEntityRowId], B.[ObjectName], B.[CounterName], AVG(B.[Trend])
FROM #PerfTablePart A
RIGHT JOIN #TrendTable B ON
A.[DateTime] = B.[DateTime]
GROUP BY DATEPART(yyyy, B.[DateTime]), DATEPART(month, B.[DateTime]), DATEPART(day, B.[DateTime]),
B.[InstanceName], B.[PerformanceRuleInstanceRowId], B.[Path], B.[ManagedEntityDefaultName], B.[ManagedEntityTypeDefaultName], B.[ManagementGroupDefaultName], B.[ManagedEntityRowId], B.[ObjectName], B.[CounterName]
END
IF @AggregationType = 2 --MONTHLY
BEGIN
INSERT INTO #TrendTableFinal
SELECT convert(datetime,CONVERT(varchar,DATEPART(month, B.[DateTime]))+'/1/'+CONVERT(varchar,DATEPART(yyyy, B.[DateTime]))),
SUM(A.[SampleCount]),
SUM(A.[AverageValue]*A.[SampleCount])/SUM(A.[SampleCount]),
MIN(A.[MinValue]), MAX(A.[MaxValue]), STDEV(A.[AverageValue]),
B.[InstanceName], B.[PerformanceRuleInstanceRowId], B.[Path], B.[ManagedEntityDefaultName], B.[ManagedEntityTypeDefaultName], B.[ManagementGroupDefaultName], B.[ManagedEntityRowId], B.[ObjectName], B.[CounterName], AVG(B.[Trend])
FROM #PerfTablePart A
RIGHT JOIN #TrendTable B ON
A.[DateTime] = B.[DateTime]
GROUP BY DATEPART(yyyy, B.[DateTime]), DATEPART(month, B.[DateTime]),
B.[InstanceName], B.[PerformanceRuleInstanceRowId], B.[Path], B.[ManagedEntityDefaultName], B.[ManagedEntityTypeDefaultName], B.[ManagementGroupDefaultName], B.[ManagedEntityRowId], B.[ObjectName], B.[CounterName]
END
IF @AggregationType = 3 --YEARLY
BEGIN
INSERT INTO #TrendTableFinal
SELECT convert(datetime,'1/1/'+CONVERT(varchar,DATEPART(yyyy, B.[DateTime]))),
SUM(A.[SampleCount]),
SUM(A.[AverageValue]*A.[SampleCount])/SUM(A.[SampleCount]),
MIN(A.[MinValue]), MAX(A.[MaxValue]), STDEV(A.[AverageValue]),
B.[InstanceName], B.[PerformanceRuleInstanceRowId], B.[Path], B.[ManagedEntityDefaultName], B.[ManagedEntityTypeDefaultName], B.[ManagementGroupDefaultName], B.[ManagedEntityRowId], B.[ObjectName], B.[CounterName], AVG(B.[Trend])
FROM #PerfTablePart A
RIGHT JOIN #TrendTable B ON
A.[DateTime] = B.[DateTime]
GROUP BY DATEPART(yyyy, B.[DateTime]),
B.[InstanceName], B.[PerformanceRuleInstanceRowId], B.[Path], B.[ManagedEntityDefaultName], B.[ManagedEntityTypeDefaultName], B.[ManagementGroupDefaultName], B.[ManagedEntityRowId], B.[ObjectName], B.[CounterName]
END
DROP TABLE #ComTrade_XenDesktop_cf
DROP TABLE #TrendTable
END
DROP TABLE #PerfTablePart
END
DEALLOCATE cur
--return final table
SELECT * FROM #TrendTableFinal
DROP TABLE #TrendTableFinal
DROP TABLE #PerfTable
DROP TABLE #ManagedEntity
GO
--===============================================================
-- PERMISSIONS
--===============================================================
GRANT EXECUTE ON dbo.[ComTrade_XenDesktop_Trending_Perf_DataGet] TO OpsMgrReader
GO