Ejemplo n.º 1
0
        public void PersistExclusionEntries(bool forceRefresh)
        {
            if (!forceRefresh)
            {
                //get latest refresh time for exclusion entry
                var lastRefreshDatetime = _dataStoreRepository.GetEntities <VisitLogExclusion>()
                                          .OrderByDescending(e => e.createdOn)
                                          .Select(e => e.createdOn)
                                          .FirstOrDefault();

                //if refresh within 4 hr before, do nothing to prevent too many restful resource traffic
                if (DateTime.Now.Subtract(lastRefreshDatetime) < _visitLogExclusionLifetime)
                {
                    return;
                }
            }

            //get exclusion entry from restful resource
            var exclusionEntries = _exclusionEntryRepository.GetEntities <ExclusionEntry>();

            var visitLogEntities = Mapper.Map <IList <ExclusionEntry>, IList <VisitLogExclusion> >(exclusionEntries.ToList());

            //add exclusion to db
            foreach (var visitLogEntry in visitLogEntities)
            {
                _dataStoreRepository.AddEntity(visitLogEntry);
            }

            //clear exclusion records in table
            _dataStoreRepository.TruncateStore <VisitLogExclusion>();

            _dataStoreRepository.SaveChanges();
        }
Ejemplo n.º 2
0
        public User Login(string userId, string password)
        {
            var profile = _dataStoreRepository.GetEntities <UserProfile>()
                          .FirstOrDefault(p => p.userId == userId && p.password == password);

            return(Mapper.Map <UserProfile, User>(profile));
        }
Ejemplo n.º 3
0
        public IList<WebsiteStatistics> AggregateByDate(DateTime date, int topX)
        {
            var visitLogEntities = _dataStoreRepository.GetEntities<VisitLog>();
            var visitLogExclusionEntities = _dataStoreRepository.GetEntities<VisitLogExclusion>();

            //filter out invalid logs
            var validLogs = from log in visitLogEntities
                            where log.date <= date.Date
                                && !visitLogExclusionEntities.Any(
                                    ex => ex.host == log.website && (ex.excludedSince ?? DateTime.MinValue) <= log.date && (ex.excludedTill ?? DateTime.MaxValue) >= log.date)
                            select log;

            //aggregate logs with sum
            var statisticsGroup = from log in validLogs
                                  group log by log.website.ToLower() into g
                                  select new WebsiteStatistics { Date = date.Date, Website = g.Key, TotalVisits = g.Sum(v => v.visits) }
                                      into websiteStatistics
                                  orderby websiteStatistics.TotalVisits descending
                                  select websiteStatistics;

            //execute query at database side
            return statisticsGroup.Take(topX).ToList();
        }