コード例 #1
0
        public void Run(StatisticsOperation statisticsOperation, StatisticsSource statisticsSource = StatisticsSource.None)
        {
            // sources: all, w/o hg, only one artifact
            IEnumerable <int> ids = new List <int>();
            var postfix           = string.Empty;

            switch (statisticsSource)
            {
            case StatisticsSource.All:
                using (var context = new ExpertiseDBEntities())
                {
                    ids = context.ActualReviewers.Select(ar => ar.ActualReviewerId).ToList();
                }

                break;

            case StatisticsSource.WithoutHg:
                ids     = GetReviewsWithoutHg();
                postfix = "_wo_hg";
                break;

            case StatisticsSource.OnlyOneArtifact:
                ids     = GetReviewsWithOnlyOneArtifact();
                postfix = "_only_one";
                break;
            }

            switch (statisticsOperation)
            {
            case StatisticsOperation.FindMissingReviewers:
                ReadUniqueActualReviewers();
                ReadUniqueComputedReviewers();
                ReadMissingReviewers();
                var missing          = GetAuthorsFromFile(basepath + "reviewers_missing.txt");
                var missingReviewers = GetAuthorsWhoAreNotInDb(missing);
                File.WriteAllText(basepath + "reviewers_missing_in_db.txt", missingReviewers);
                break;

            case StatisticsOperation.AnalyzeActualReviews:
                ReadUniqueActualReviewers();
                ReadUniqueComputedReviewers();
                AnalyzeActualReviews(ids);
                break;

            case StatisticsOperation.ComputeStatisticsForAllAlgorithmsAndActualReviews:
                ComputeStatisticsForAllAlgorithmsAndActualReviews(ids, postfix);
                break;

            case StatisticsOperation.FindIntersectingEntriesForAllAlgorithms:
                FindIntersectingEntriesForActualReviewerIds(ids, postfix);
                break;

            case StatisticsOperation.FindIntersectingEntriesForAllAlgorithmsPairwise:
                FindIntersectingEntriesPairwiseForActualReviewerIds(ids, postfix);
                break;

            default:
                throw new ArgumentOutOfRangeException("statisticsOperation");
            }
        }
コード例 #2
0
        /// <summary>
        /// Factory Method for Sources
        /// </summary>
        public static AbstractSourceOfBugs createSourceFromParameter(StatisticsSource typeOfSource, int repositoryId, string[] additionalParameters)
        {
            switch (typeOfSource)
            {
            case StatisticsSource.All:
                if (additionalParameters != null && additionalParameters.Length > 0)
                {
                    throw new ArgumentException("No additional parameters expected, but those were present", "additionalParameters");
                }
                return(new SourceOfAllBugs(repositoryId));

            case StatisticsSource.WithoutHg:
                if (additionalParameters != null && additionalParameters.Length > 0)
                {
                    throw new ArgumentException("No additional parameters expected, but those were present", "additionalParameters");
                }
                return(new SourceOfBugsWithoutSpecificReviewer(repositoryId));

            case StatisticsSource.MinimumId:
                if (additionalParameters.Length != 1)
                {
                    throw new ArgumentException("Exactly one additional parameters expected, but this was not the case", "additionalParameters");
                }
                return(new SourceOfBugsWithMinID(repositoryId, int.Parse(additionalParameters[0])));

            default:
                throw new NotImplementedException("The type \"" + typeOfSource + "\" is unknown");
            }
        }
コード例 #3
0
        /// <inheritdoc/>
        public async Task <(ulong, int)> GetMostActiveChannelAndMessageCountAsync(StatisticsSource source, TimeSpan span, ulong guildId, ulong userId = 0)
        {
            var messages = new List <MessageSummary>();

            switch (source)
            {
            case StatisticsSource.Guild:
            {
                messages = await _hiromiContext
                           .Messages
                           .AsNoTracking()
                           .Where(x => x.GuildId == guildId)
                           .Select(MessageSummary.FromEntityProjection)
                           .ToListAsync();

                break;
            }

            case StatisticsSource.User:
            {
                messages = await _hiromiContext
                           .Messages
                           .AsNoTracking()
                           .Where(x => x.GuildId == guildId)
                           .Where(x => x.UserId == userId)
                           .Select(MessageSummary.FromEntityProjection)
                           .ToListAsync();

                break;
            }
            }

            var earliest = DateTime.Now.Subtract(span);
            var filtered = messages.Where(x => x.TimeSent > earliest);

            var final = new List <ulong>();

            final.AddRange(filtered.Select(x => x.ChannelId));

            var(channelId, count) = final
                                    .GroupBy(x => x)
                                    .ToDictionary(x => x.Key, x => x.Count())
                                    .OrderByDescending(x => x.Value)
                                    .FirstOrDefault();

            return(channelId, count);
        }
コード例 #4
0
        /// <inheritdoc/>
        public async Task <int> GetMessageCountAsync(StatisticsSource source, TimeSpan span, ulong guildId, ulong userId = 0)
        {
            var messages = new List <MessageSummary>();

            switch (source)
            {
            case StatisticsSource.Guild:
            {
                messages = await _hiromiContext
                           .Messages
                           .AsNoTracking()
                           .Where(x => x.GuildId == guildId)
                           .Select(MessageSummary.FromEntityProjection)
                           .ToListAsync();

                break;
            }

            case StatisticsSource.User:
            {
                messages = await _hiromiContext
                           .Messages
                           .AsNoTracking()
                           .Where(x => x.GuildId == guildId)
                           .Where(x => x.UserId == userId)
                           .Select(MessageSummary.FromEntityProjection)
                           .ToListAsync();

                break;
            }
            }

            var earliest = DateTime.Now.Subtract(span);

            return(messages.Count(x => x.TimeSent >= earliest));
        }