Beispiel #1
0
        public AccountUsedLimitsTodayDataInfo GetUsedTodayTariffLimit(AccountDbContext context)
        {
            CheckForNewCurrentDataRow(context);

            var result = new AccountUsedLimitsTodayDataInfo()
            {
                EventRequests     = DataTotal.EventsRequests + DataCurrent.EventsRequests,
                EventsSize        = DataTotal.EventsSize + DataCurrent.EventsSize,
                UnitTestsRequests = DataTotal.UnitTestsRequests + DataCurrent.UnitTestsRequests,
                UnitTestsSize     = DataTotal.UnitTestsSize + DataCurrent.UnitTestsSize,
                LogSize           = DataTotal.LogSize + DataCurrent.LogSize,
                MetricRequests    = DataTotal.MetricsRequests + DataCurrent.MetricsRequests,
                MetricsSize       = DataTotal.MetricsSize + DataCurrent.MetricsSize,
                SmsCount          = DataTotal.SmsCount + DataCurrent.SmsCount
            };

            var tempData = new LimitDataArchiveItem();

            foreach (var data in DataTotal.UnitTestData.ToList())
            {
                tempData.GetUnitTestData(data.Key).ResultsCount += data.Value.ResultsCount;
            }
            foreach (var data in DataCurrent.UnitTestData.ToList())
            {
                tempData.GetUnitTestData(data.Key).ResultsCount += data.Value.ResultsCount;
            }

            result.UnitTestsResults = tempData.UnitTestData.Select(t => new AccountUsedLimitsUnitTestDataInfo()
            {
                UnitTestId       = t.Key,
                ApiChecksResults = t.Value.ResultsCount
            }).ToArray();

            return(result);
        }
Beispiel #2
0
        protected void RecalcDataTotal(AccountDbContext context)
        {
            LimitDataArchiveItem[] rows;
            lock (DataArchiveLockObject)
            {
                var dataArchive = GetDataArchive(context);
                rows = dataArchive.Where(t => t.BeginDate >= Now.Date).ToArray();
            }

            // Рассчитаем суммарные значения по истории за сегодня
            var newDataTotal = new LimitDataArchiveItem();

            newDataTotal.EventsRequests    = rows.Sum(t => t.EventsRequests);
            newDataTotal.EventsSize        = rows.Sum(t => t.EventsSize);
            newDataTotal.UnitTestsRequests = rows.Sum(t => t.UnitTestsRequests);
            newDataTotal.UnitTestsSize     = rows.Sum(t => t.UnitTestsSize);
            newDataTotal.MetricsRequests   = rows.Sum(t => t.MetricsRequests);
            newDataTotal.MetricsSize       = rows.Sum(t => t.MetricsSize);
            newDataTotal.LogSize           = rows.Sum(t => t.LogSize);
            newDataTotal.SmsCount          = rows.Sum(t => t.SmsCount);

            // Рассчитаем суммарные данные по проверкам
            // Сначала суммируем все несохранённые данные из архива в памяти
            foreach (var row in rows.Where(t => t.Id == Guid.Empty).ToArray())
            {
                foreach (var unitTestData in row.UnitTestData)
                {
                    var totalData = newDataTotal.GetUnitTestData(unitTestData.Key);
                    totalData.ResultsCount += unitTestData.Value.ResultsCount;
                }
            }

            // И добавляем к ним сохранённые данные из архива в базе
            var repository    = context.GetLimitDataForUnitTestRepository();
            var archiveFromDb = repository.GetGroupedByUnitTest(Now.Date);

            foreach (var row in archiveFromDb)
            {
                var totalData = newDataTotal.GetUnitTestData(row.Item1);
                totalData.ResultsCount += row.Item2;
            }

            DataTotal = newDataTotal;

            // Рассчитаем суммарные данные за всю историю
            OverallArchive = GetUsedLimitsTotalData(context);
        }
Beispiel #3
0
        protected void CheckForNewCurrentDataRow(AccountDbContext context)
        {
            var needRecalc = false;

            lock (DataArchiveLockObject)
            {
                // Загрузим архив, если его ещё нет
                if (_dataArchive == null)
                {
                    RecalcDataTotal(context);
                }

                // Проверим, не пора ли переместить текущую запись в архив и создать новую
                if (Now >= DataCurrent.EndDate)
                {
                    var dataArchive    = GetDataArchive(context);
                    var newArchiveItem = new LimitDataArchiveItem()
                    {
                        Id                = DataCurrent.Id,
                        BeginDate         = DataCurrent.BeginDate,
                        EndDate           = DataCurrent.EndDate,
                        EventsRequests    = DataCurrent.EventsRequests,
                        EventsSize        = DataCurrent.EventsSize,
                        LogSize           = DataCurrent.LogSize,
                        MetricsRequests   = DataCurrent.MetricsRequests,
                        MetricsSize       = DataCurrent.MetricsSize,
                        UnitTestsRequests = DataCurrent.UnitTestsRequests,
                        UnitTestsSize     = DataCurrent.UnitTestsSize,
                        UnitTestData      = DataCurrent.UnitTestData,
                        SmsCount          = DataCurrent.SmsCount
                    };
                    dataArchive.Add(newArchiveItem);
                    DataCurrent = GetNewCurrentDataRow();
                    needRecalc  = true;
                }
            }

            if (needRecalc)
            {
                RecalcDataTotal(context);
            }
        }