private void ProcessProcedures(IEnumerable <IStoredProcedureStatistics> procedures, DateTime collectedDate, bool isStatisticsResetDetected)
 {
     foreach (var p in procedures)
     {
         var lastValue = GetLastValue <IStoredProcedureStatistics>(p.ID);
         TotalStoredProcedureStatistics diff = null;
         if (!isStatisticsResetDetected && lastValue != null && !p.Equals(lastValue))
         {
             diff = new TotalStoredProcedureStatistics()
             {
                 CreatedDate       = DateTime.Now,
                 CallsCount        = Math.Max(p.CallsCount - lastValue.CallsCount, 0),
                 DatabaseID        = p.DatabaseID,
                 Date              = collectedDate,
                 ProcedureID       = p.ID,
                 SelfDurationInMs  = Math.Max(p.SelfDurationInMs - lastValue.SelfDurationInMs, 0),
                 TotalDurationInMs = Math.Max(p.TotalDurationInMs - lastValue.TotalDurationInMs, 0)
             };
         }
         procedureStatistics.AddOrUpdate(p.ID, new TotalStoredProcedureStatisticsSampler(dateTimeSelector, diff), (k, v) =>
         {
             if (diff != null)
             {
                 v.AddSample(diff);
             }
             return(v);
         });
         SaveLastValue(p.ID, p);
     }
 }
Esempio n. 2
0
        private void PersistTotalProcedureStatistics(TotalStoredProcedureStatistics newStatistics)
        {
            var repository = repositories.GetTotalStoredProcedureStatisticsRepository();
            var uniqueKey  = new TotalStoredProcedureStatisticsUniqueKey()
            {
                DatabaseID  = newStatistics.DatabaseID,
                Date        = newStatistics.Date,
                ProcedureID = newStatistics.ProcedureID
            };
            var oldStatistics = repository.GetByUniqueKey(uniqueKey);

            if (oldStatistics == null)
            {
                repository.Create(newStatistics);
            }
            else
            {
                TotalStoredProcedureStatisticsMergeUtility.ApplySample(oldStatistics, newStatistics);
                repository.Update(oldStatistics);
            }
        }
Esempio n. 3
0
 public static void ApplySample(TotalStoredProcedureStatistics cumulativeData, TotalStoredProcedureStatistics newSample)
 {
     cumulativeData.CallsCount       += newSample.CallsCount;
     cumulativeData.SelfDurationInMs  = cumulativeData.SelfDurationInMs + newSample.SelfDurationInMs;
     cumulativeData.TotalDurationInMs = cumulativeData.TotalDurationInMs + newSample.TotalDurationInMs;
 }