Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }