private void ProcessRelations(IEnumerable <IRelationStatistics> relations, DateTime collectedDate, bool isStatisticsResetDetected)
 {
     foreach (var r in relations)
     {
         var lastValue = GetLastValue <IRelationStatistics>(r.ID);
         TotalRelationStatistics diff = null;
         if (!isStatisticsResetDetected && lastValue != null && !r.Equals(lastValue))
         {
             diff = new TotalRelationStatistics()
             {
                 CreatedDate          = DateTime.Now,
                 DatabaseID           = r.DatabaseID,
                 Date                 = collectedDate,
                 IndexScanCount       = Math.Max(r.IndexScanCount - lastValue.IndexScanCount, 0),
                 IndexTupleFetchCount = Math.Max(r.IndexTupleFetchCount - lastValue.IndexTupleFetchCount, 0),
                 RelationID           = r.ID,
                 SeqScanCount         = Math.Max(r.SeqScanCount - lastValue.SeqScanCount, 0),
                 SeqTupleReadCount    = Math.Max(r.SeqTupleReadCount - lastValue.SeqTupleReadCount, 0),
                 TupleDeleteCount     = Math.Max(r.TupleDeleteCount - lastValue.TupleDeleteCount, 0),
                 TupleInsertCount     = Math.Max(r.TupleInsertCount - lastValue.TupleInsertCount, 0),
                 TupleUpdateCount     = Math.Max(r.TupleUpdateCount - lastValue.TupleUpdateCount, 0)
             };
         }
         relationStatistics.AddOrUpdate(r.ID, new TotalRelationStatisticsSampler(dateTimeSelector, diff), (k, v) =>
         {
             if (diff != null)
             {
                 v.AddSample(diff);
             }
             return(v);
         });
         SaveLastValue(r.ID, r);
     }
 }
 public static void ApplySample(TotalRelationStatistics cumulativeData, TotalRelationStatistics newSample)
 {
     cumulativeData.IndexScanCount       += newSample.IndexScanCount;
     cumulativeData.IndexTupleFetchCount += newSample.IndexTupleFetchCount;
     cumulativeData.SeqScanCount         += newSample.SeqScanCount;
     cumulativeData.SeqTupleReadCount    += newSample.SeqTupleReadCount;
     cumulativeData.TupleDeleteCount     += newSample.TupleDeleteCount;
     cumulativeData.TupleInsertCount     += newSample.TupleInsertCount;
     cumulativeData.TupleUpdateCount     += newSample.TupleUpdateCount;
 }
Example #3
0
        private void PersistTotalRelationStatistics(TotalRelationStatistics newStatistics)
        {
            var repository = repositories.GetTotalRelationStatisticsRepository();
            var uniqueKey  = new TotalRelationStatisticsUniqueKey()
            {
                DatabaseID = newStatistics.DatabaseID,
                Date       = newStatistics.Date,
                RelationID = newStatistics.RelationID
            };
            var oldStatistics = repository.GetByUniqueKey(uniqueKey);

            if (oldStatistics == null)
            {
                repository.Create(newStatistics);
            }
            else
            {
                TotalRelationStatisticsMergeUtility.ApplySample(oldStatistics, newStatistics);
                repository.Update(oldStatistics);
            }
        }