private void AddPageIdsToCache(ICollection <int> pageIds)
        {
            if (!pageIds.Any())
            {
                return;
            }

            var pairs = _backend.GetPageNames(pageIds);

            lock (_writeLock) {
                foreach (var idNamePair in pairs)
                {
                    _pageIdToNameMap[idNamePair.Key]   = idNamePair.Value;
                    _pageNameToIdMap[idNamePair.Value] = idNamePair.Key;
                }
            }
        }
示例#2
0
        public void PreCalculateForDate(DateTime date)
        {
            if (!HasPreCalculatedData(date, AllPagesPageId))
            {
                PreCalculateAll(date);
            }

            var pageIds = _requestsReader.ListAllPages(date);

            var pageNames = _pageIdProvider.GetPageNames(pageIds);

            foreach (var pageId in pageIds)
            {
                if (HasPreCalculatedData(date, pageId))
                {
                    continue;
                }
                PreCalculateForDateAndPage(date, pageId, pageNames[pageId]);
            }
        }
示例#3
0
        private PerformanceStatisticsForPageCollection GetRequestsForDate(DateTime forDate)
        {
            using (var connection = new SqlConnection(_connectionString)) {
                var q = connection.CreateCommand();
                q.CommandText = "select Duration,PageId from Requests where Timestamp>=@From and Timestamp<@Till";
                q.Parameters.Add(new SqlParameter("From", forDate));
                q.Parameters.Add(new SqlParameter("Till", forDate.AddDays(1)));

                connection.Open();

                var overall = new List <int>();
                var pages   = new Dictionary <int, List <int> >();

                using (var rdr = q.ExecuteReader()) {
                    while (rdr.Read())
                    {
                        var page = (int)rdr[1];

                        var duration = (int)rdr[0];

                        overall.Add(duration);

                        if (!pages.ContainsKey(page))
                        {
                            pages[page] = new List <int>();
                        }

                        pages[page].Add(duration);
                    }
                }

                var pageIdToNameMap = _pageIdProvider.GetPageNames(pages.Keys);

                return(new PerformanceStatisticsForPageCollection(
                           pages.Keys.Select(p => PerformanceStatisticsForPage.Calculate(pages[p].ToArray(), pageIdToNameMap[p])).ToArray(),
                           //new PerformanceStatisticsForPage[0],
                           PerformanceStatisticsForPage.Calculate(overall.ToArray(), "All pages")
                           ));
            }
        }
        public void PreCalculate(DateTime date)
        {
            if (!HasPrecalculatedHourlyTrend(date, null))
            {
                PreCalculateHourlyTrend(date, AllPagesPageId, null);
            }

            var pages = _reader.ListAllPages(date);

            var pageNames = _pageIdProvider.GetPageNames(pages);

            foreach (var pageId in pages)
            {
                var pageName = pageNames[pageId];
                if (HasPrecalculatedHourlyTrend(date, pageName))
                {
                    //shouldn't happen.
                    continue;
                }
                PreCalculateHourlyTrend(date, pageId, pageName);
            }
        }