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); }
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); }
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); }