Пример #1
0
        public KarmaStatistics GetCachedKarmaStatistics()
        {
            var karmaStatisticsCache = new KarmaStatistics();

            if (File.Exists(_karmaStatisticsCacheFile) == false)
            {
                return(karmaStatisticsCache);
            }

            var json = File.ReadAllText(_karmaStatisticsCacheFile);

            using (var stringReader = new StringReader(json))
                using (var jsonTextReader = new JsonTextReader(stringReader))
                {
                    var jsonSerializer = new JsonSerializer();
                    karmaStatisticsCache = jsonSerializer.Deserialize <KarmaStatistics>(jsonTextReader);
                }

            return(karmaStatisticsCache);
        }
Пример #2
0
        private void RefreshKarmaStatisticsInternally()
        {
            var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
            var avatarService = new AvatarService();

            var lastweekStart         = GetLastWeekStartDate();
            var karmaRecentStatistics = Our.Api.StatisticsController.GetPeopleData(lastweekStart, DateTime.Now);

            foreach (var period in karmaRecentStatistics.MostActiveDateRange)
            {
                foreach (var person in period.MostActive)
                {
                    AddAvatarToPerson(person, umbracoHelper, avatarService);

                    var criteria     = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"].CreateSearchCriteria();
                    var filter       = criteria.RawQuery("__NodeId: " + person.MemberId);
                    var searchResult = ExamineManager.Instance
                                       .SearchProviderCollection["InternalMemberSearcher"].Search(filter).FirstOrDefault();
                    if (searchResult == null)
                    {
                        continue;
                    }

                    if (int.TryParse(searchResult.Fields["reputationTotal"], out var totalKarma))
                    {
                        person.TotalKarma = totalKarma;
                    }
                }
            }

            // Yearly karma counts from May 1st until May 1st each year. If the date in this year is before May 1st, shift back an extra year
            var yearShift = 1;

            if (DateTime.Now >= new DateTime(DateTime.Now.Year, 5, 1))
            {
                yearShift = 0;
            }


            var karmaLastYearStatistics = Our.Api.StatisticsController.GetPeopleData(
                new DateTime(DateTime.Now.Year - 1 - yearShift, 5, 1),
                new DateTime(DateTime.Now.Year - yearShift, 5, 1));

            foreach (var period in karmaLastYearStatistics.MostActiveDateRange)
            {
                foreach (var person in period.MostActive)
                {
                    AddAvatarToPerson(person, umbracoHelper, avatarService);

                    var criteria     = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"].CreateSearchCriteria();
                    var filter       = criteria.RawQuery("__NodeId: " + person.MemberId);
                    var searchResult = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"].Search(filter).FirstOrDefault();
                    if (searchResult == null)
                    {
                        continue;
                    }

                    if (int.TryParse(searchResult.Fields["reputationTotal"], out var totalKarma))
                    {
                        person.TotalKarma = totalKarma;
                    }
                }
            }

            var karmaThisYearStatistics = Our.Api.StatisticsController.GetPeopleData(
                new DateTime(DateTime.Now.Year - 1, 5, 1),
                new DateTime(DateTime.Now.Year, 5, 1));

            foreach (var period in karmaThisYearStatistics.MostActiveDateRange)
            {
                foreach (var person in period.MostActive)
                {
                    AddAvatarToPerson(person, umbracoHelper, avatarService);

                    var criteria     = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"].CreateSearchCriteria();
                    var filter       = criteria.RawQuery("__NodeId: " + person.MemberId);
                    var searchResult = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"]
                                       .Search(filter).FirstOrDefault();
                    if (searchResult == null)
                    {
                        continue;
                    }

                    if (int.TryParse(searchResult.Fields["reputationTotal"], out var totalKarma))
                    {
                        person.TotalKarma = totalKarma;
                    }
                }
            }

            var karmaStatistics = new KarmaStatistics
            {
                KarmaRecent   = karmaRecentStatistics,
                KarmaLastYear = karmaLastYearStatistics,
                KarmaThisYear = karmaThisYearStatistics
            };

            var rawJson = JsonConvert.SerializeObject(karmaStatistics, Formatting.Indented);

            File.WriteAllText(_karmaStatisticsCacheFile, rawJson, Encoding.UTF8);
        }
Пример #3
0
        public KarmaStatistics GetKarmaStatistics()
        {
            var karmaRecentStatistics = UmbracoContext.Current.Application.ApplicationCache.RuntimeCache.GetCacheItem <PeopleData>("OurRecentKarmaStatistics",
                                                                                                                                   () =>
            {
                var lastweekStart = GetLastWeekStartDate();
                var karmaRecent   = Our.Api.StatisticsController.GetPeopleData(lastweekStart, DateTime.Now.AddYears(-1));

                foreach (var period in karmaRecent.MostActiveDateRange)
                {
                    foreach (var person in period.MostActive)
                    {
                        var criteria = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"]
                                       .CreateSearchCriteria();
                        var filter       = criteria.RawQuery("__NodeId: " + person.MemberId);
                        var searchResult = ExamineManager.Instance
                                           .SearchProviderCollection["InternalMemberSearcher"].Search(filter).FirstOrDefault();
                        if (searchResult == null)
                        {
                            continue;
                        }

                        int totalKarma;
                        if (int.TryParse(searchResult.Fields["reputationTotal"], out totalKarma))
                        {
                            person.TotalKarma = totalKarma;
                        }
                    }
                }

                return(karmaRecent);
            }, TimeSpan.FromMinutes(15));

            var karmaYearStatistics = UmbracoContext.Current.Application.ApplicationCache.RuntimeCache.GetCacheItem <PeopleData>("OurYearKarmaStatistics",
                                                                                                                                 () =>
            {
                // Yearly karma counts from May 1st until May 1st each year. If the date in this year is before May 1st, shift back an extra year
                var yearShift = 0;
                if (DateTime.Now > new DateTime(DateTime.Now.Year, 5, 1))
                {
                    yearShift = 1;
                }

                var karmaYear = Our.Api.StatisticsController.GetPeopleData(
                    new DateTime(DateTime.Now.Year - 1 - yearShift, 5, 1),
                    new DateTime(DateTime.Now.Year - yearShift, 5, 1));

                foreach (var period in karmaYear.MostActiveDateRange)
                {
                    foreach (var person in period.MostActive)
                    {
                        var criteria     = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"].CreateSearchCriteria();
                        var filter       = criteria.RawQuery("__NodeId: " + person.MemberId);
                        var searchResult = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"].Search(filter).FirstOrDefault();
                        if (searchResult == null)
                        {
                            continue;
                        }

                        int totalKarma;
                        if (int.TryParse(searchResult.Fields["reputationTotal"], out totalKarma))
                        {
                            person.TotalKarma = totalKarma;
                        }
                    }
                }

                return(karmaYear);
            }, TimeSpan.FromHours(24));


            var karmaStatistics = new KarmaStatistics
            {
                KarmaRecent = karmaRecentStatistics,
                KarmaYear   = karmaYearStatistics
            };

            return(karmaStatistics);
        }