public ConcurrentAnalysisModel GetConcurrentAnalysis(int projectId, IList <int> concurrentIds, DateRange dateRange) { IDictionary <int, IList <long> > usersIntersection; DashboardMetrics initialMetrics = this.metricsService.GetDashboardMetrics(projectId, dateRange); RankedModel initialRankedModel = RankedModel.Create(initialMetrics); IList <DashboardMetrics> concurrentsMetrics = new List <DashboardMetrics>(); IList <RankedModel> concurrentsRankedMetrics = new List <RankedModel>(); foreach (var concurrentId in concurrentIds) { var concurrentMetrics = this.metricsService.GetDashboardMetrics(concurrentId, dateRange); var rankedModel = RankedModel.Create(concurrentMetrics); concurrentsMetrics.Add(concurrentMetrics); concurrentsRankedMetrics.Add(rankedModel); } using (this.unitOfWorkProvider.CreateUnitOfWork()) { usersIntersection = this.usersCalculator.FindUsersIntersection(initialMetrics.AllUserIds, concurrentsMetrics.ToDictionary(c => c.Project.Id, v => v.AllUserIds)); } this.AssignUsersIntersection(concurrentsRankedMetrics, usersIntersection); this.RankModels(initialRankedModel, concurrentsRankedMetrics); var result = new ConcurrentAnalysisModel(initialRankedModel, concurrentsRankedMetrics); return(result); }
private void RankModels(RankedModel initial, IList <RankedModel> others) { this.ranker.RankValues(initial.AverageCommentsPerPost, others.Select(o => o.AverageCommentsPerPost)); this.ranker.RankValues(initial.AverageLikesPerPost, others.Select(o => o.AverageLikesPerPost)); this.ranker.RankValues(initial.InteractionRate, others.Select(o => o.InteractionRate)); this.ranker.RankValues(initial.ResponseRate, others.Select(o => o.ResponseRate)); this.ranker.RankValues(initial.InvolmentRate, others.Select(o => o.InvolmentRate)); this.ranker.RankValues(initial.UgcRate, others.Select(o => o.UgcRate)); this.ranker.RankValues(initial.PhotosCount, others.Select(o => o.PhotosCount)); this.ranker.RankValues(initial.VideosCount, others.Select(o => o.VideosCount)); this.ranker.RankValues(initial.PostsCount, others.Select(o => o.PostsCount)); this.ranker.RankValues(initial.TopicsCount, others.Select(o => o.TopicsCount)); this.ranker.RankValues(initial.TopicCommentsCount, others.Select(o => o.TopicCommentsCount)); this.ranker.RankValues(initial.SharePerPost, others.Select(o => o.SharePerPost)); this.ranker.RankValues(initial.UsersPostCount, others.Select(o => o.UsersPostCount)); this.ranker.RankValues(initial.AdminPostCount, others.Select(o => o.AdminPostCount)); this.ranker.RankValues(initial.UsersPostsPerUser, others.Select(o => o.UsersPostsPerUser)); this.ranker.RankValues(initial.AdminPostsPerAdmin, others.Select(o => o.AdminPostsPerAdmin)); this.ranker.RankValues(initial.UsersCount, others.Select(o => o.UsersCount)); this.ranker.RankValues(initial.BotsCount, others.Select(o => o.BotsCount)); this.ranker.RankValues(initial.InactiveUsersCount, others.Select(o => o.InactiveUsersCount)); this.ranker.RankValues(initial.ActiveUsersCount, others.Select(o => o.ActiveUsersCount)); }
private UiTableColumn GetColumn(RankedModel metrics) { var targetColumn = new UiTableColumn(metrics.ProjectTitle); targetColumn.AddItem(metrics.ProjectTitle); targetColumn.AddItem(metrics.SameUsersCount); targetColumn.AddItem(metrics.AverageCommentsPerPost.Value, metrics.AverageCommentsPerPost.Rank); targetColumn.AddItem(metrics.AverageLikesPerPost.Value, metrics.AverageLikesPerPost.Rank); targetColumn.AddItem(metrics.InteractionRate.Value, metrics.InteractionRate.Rank); targetColumn.AddItem(metrics.ResponseRate.Value, metrics.ResponseRate.Rank); targetColumn.AddItem(metrics.ResponseTime.Value, metrics.ResponseTime.Rank); targetColumn.AddItem(metrics.InvolmentRate.Value, metrics.InvolmentRate.Rank); targetColumn.AddItem(metrics.UgcRate.Value, metrics.UgcRate.Rank); targetColumn.AddItem(metrics.PhotosCount.Value, metrics.PhotosCount.Rank); targetColumn.AddItem(metrics.VideosCount.Value, metrics.VideosCount.Rank); targetColumn.AddItem(metrics.PostsCount.Value, metrics.PostsCount.Rank); targetColumn.AddItem(metrics.TopicsCount.Value, metrics.TopicsCount.Rank); targetColumn.AddItem(metrics.SharePerPost.Value, metrics.SharePerPost.Rank); targetColumn.AddItem(metrics.TopicCommentsCount.Value, metrics.TopicCommentsCount.Rank); targetColumn.AddItem(metrics.UsersPostCount.Value, metrics.UsersPostCount.Rank); targetColumn.AddItem(metrics.AdminPostCount.Value, metrics.AdminPostCount.Rank); targetColumn.AddItem(metrics.UsersPostsPerUser.Value, metrics.UsersPostsPerUser.Rank); targetColumn.AddItem(metrics.AdminPostsPerAdmin.Value, metrics.AdminPostsPerAdmin.Rank); targetColumn.AddItem(new UiPostDensityFormatter(metrics.PostBiggestActivities)); targetColumn.AddItem(metrics.UsersCount.Value, metrics.UsersCount.Rank); targetColumn.AddItem(metrics.BadFans.Value, metrics.BadFans.Rank); targetColumn.AddItem(metrics.BotsCount.Value, metrics.BotsCount.Rank); targetColumn.AddItem(metrics.InactiveUsersCount.Value, metrics.InteractionRate.Rank); targetColumn.AddItem(metrics.ActiveUsersCount.Value, metrics.ActiveUsersCount.Rank); return(targetColumn); }