Пример #1
0
        /// <summary>
        ///     Monitor status for an active review, given the key.
        ///     A review is regarded as completed when at least one reviewer is signed off.
        /// </summary>
        /// <param name="client">An instance of <see cref="ReviewDashboardServiceClient" />.</param>
        /// <param name="key">Key of the request to be monitored. Can be accessed from DB.</param>
        /// <param name="author">Author of the review.</param>
        /// <returns>True if at least one reviewer is signed off.</returns>
        public static bool ReviewCompleted(ReviewDashboardServiceClient client, string key, string author)
        {
            var response = client.Query(new CodeReviewQuery
            {
                Authors        = new[] { author },
                ReviewStatuses = new[] { CodeReviewStatus.Active },
                UserAgent      = author
            });

            if (response != null)
            {
                if (response.Reviews != null)
                {
                    foreach (var review in response.Reviews)
                    {
                        if (review != null)
                        {
                            if (review.Key.Equals(key))
                            {
                                foreach (var reviewer in review.Reviewers)
                                {
                                    if (reviewer.Status == ReviewerStatus.SignedOff &&
                                        MembershipCheckHelpers.IsInSecurityGroup(reviewer.Name, Constants.SecurityGroup))
                                    {
                                        Logger.Info("[" + reviewer.DisplayName + "] has approved the request. Review with id = [" + key + "] is completed");
                                        return(true);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(false);
        }
Пример #2
0
        public IEnumerable <CodeFlowReview> PullData(DateTime startUtcTime, DateTime endUtcTime)
        {
            using (var codeFlowReviewClient = new ReviewDashboardServiceClient())
            {
                var alias = Environment.UserName.Split('\\').Last(); // REVIEW cheap inaccurate way to get user alias

                Console.WriteLine("Pulling reviews authored by " + alias);

                var result = codeFlowReviewClient.QueryReviewSummaries(new CodeReviewQuery
                {
                    CreatedBeforeDate = endUtcTime,
                    CreatedAfterDate  = startUtcTime,
                    Authors           = new[] { alias },
                    UserAgent         = "EECTES/WorkSummarizer 1.0"
                });

                if (result.Reviews == null)
                {
                    return(Enumerable.Empty <CodeFlowReview>());
                }

                return(result.Reviews
                       .Select(p =>
                {
                    return new CodeFlowReview
                    {
                        AuthorLogin = p.AuthorLogin,
                        PublishedUtcDate = p.CreatedOn.ToUniversalTime(),
                        ClosedUtcDate = p.CompletedOn.ToUniversalTime(),
                        Name = p.Name,
                        Reviewers = p.Reviewers.Select(s => IdentityUtility.Create(s.Name))
                    };
                })
                       .ToList());
            }
        }
Пример #3
0
 private static void InitializeClients()
 {
     Logger.Debug("Initializing CodeFlow Review Clients...");
     _rClient = new ReviewServiceClient();
     _qClient = new ReviewDashboardServiceClient();
 }