public TfsDashboardSummary CreateSummary()
        {
            var summary = new TfsDashboardSummary();

            GetBuildInformation(summary);
            GetChangeset(summary);
            return(summary);
        }
        private void GetBuildInformation(TfsDashboardSummary summary)
        {
            var watch = Stopwatch.StartNew();

            _projectCollection.EnsureAuthenticated();

            var buildServer     = _projectCollection.GetService <IBuildServer>();
            var buildDetailSpec = buildServer.CreateBuildDetailSpec(_settings.Project, _settings.BuildDefinition);

            buildDetailSpec.MaxBuildsPerDefinition = 150;
            buildDetailSpec.QueryOptions           = QueryOptions.All;
            buildDetailSpec.QueryOrder             = BuildQueryOrder.FinishTimeDescending;
            buildDetailSpec.InformationTypes       = null;

            var results = buildServer.QueryBuilds(buildDetailSpec);

            if (!results.Failures.Any())
            {
                var builds = results.Builds.Select(buildDetail => new TfsBuildSummary
                {
                    Uri               = buildDetail.Uri,
                    Duration          = (int)(buildDetail.FinishTime - buildDetail.StartTime).TotalSeconds,
                    Who               = buildDetail.Requests[0].RequestedFor,
                    Username          = buildDetail.Requests[0].RequestedForDisplayName,
                    BuildNumber       = buildDetail.BuildNumber,
                    DropLocation      = buildDetail.DropLocation,
                    StartTime         = buildDetail.StartTime,
                    TestStatus        = buildDetail.TestStatus,
                    CompilationStatus = buildDetail.CompilationStatus.ToString(),
                    Status            = buildDetail.Status.ToString(),
                    SourceGetVersion  = buildDetail.SourceGetVersion,
                }).ToList();
                summary.LastBuilds = builds.OrderBy(x => x.StartTime);

                var lastBuild = builds.OrderByDescending(x => x.StartTime).FirstOrDefault();
                if (lastBuild != null)
                {
                    lastBuild.TestCoverage   = GetTestcoverage(_projectCollection, lastBuild.Uri);
                    summary.LastBuild        = lastBuild;
                    summary.LastWarningCount = InformationNodeConverters.GetBuildWarnings(results.Builds.OrderByDescending(x => x.StartTime).FirstOrDefault()).Count;
                }
            }
            Trace.WriteLine("GetBuildInformation: " + watch.Elapsed);
        }
        private void GetChangeset(TfsDashboardSummary summary)
        {
            var watch = Stopwatch.StartNew();

            _projectCollection.EnsureAuthenticated();

            var versionControl = _projectCollection.GetService <VersionControlServer>();
            var queryParams    = new QueryHistoryParameters(_settings.VersionControlPath, RecursionType.Full)
            {
                Item = _settings.VersionControlPath,
                IncludeDownloadInfo = false,
                IncludeChanges      = false,
                VersionStart        = GetDateVSpec(DateTime.Today.AddDays(-75))
            };
            var query   = versionControl.QueryHistory(queryParams);
            var results = query.ToList();

            summary.LastCheckins = results.Take(15).Select(x => new TfsCheckinSummary
            {
                Comment      = x.Comment,
                Committer    = x.CommitterDisplayName,
                Username     = x.Committer,
                CreationDate = x.CreationDate,
                TimeElapsed  = x.CreationDate
            }).ToList();

            var allDays = Enumerable.Range(0, 75).Select(x => new TfsCheckinStatistic
            {
                Day   = DateTime.Today.AddDays(-x),
                Count = 0
            });
            var checkins = results.GroupBy(x => x.CreationDate.Date).Select(x => new TfsCheckinStatistic
            {
                Day   = x.Key,
                Count = x.Count()
            }).ToList();

            checkins = checkins.Union(allDays.Where(x => checkins.All(y => y.Day != x.Day))).ToList();
            summary.CheckinStatistic = checkins.OrderBy(x => x.Day).ToList();

            summary.CheckinsToday = results.Count(x => x.CreationDate.Date == DateTime.Today);
            Trace.WriteLine("GetChangeset: " + watch.Elapsed);
        }