예제 #1
0
        public async Task <CodeHubWorkItemList> GetWorkItemsFromProvider(DevOpsConfiguration configuration)
        {
            var connection = CreateConnectionFromConfiguration(configuration);
            var client     = connection.GetClient <WorkItemTrackingHttpClient>();

            return(await GetAllWorkItemsInternal(client, null));
        }
예제 #2
0
 public TestPlanTool(DevOpsConfiguration config)
 {
     _config    = config;
     Log.Logger = new LoggerConfiguration()
                  .WriteTo.Console()
                  .CreateLogger();
     Logger = (Logger)Log.Logger;
 }
예제 #3
0
        public async Task <CodeHubWorkItemList> GetWorkItemTreeFromProvider(DevOpsConfiguration configuration)
        {
            configuration.WorkItemQuery = configuration.AllWorkItemsQuery;
            var connection = CreateConnectionFromConfiguration(configuration);

            var client = connection.GetClient <WorkItemTrackingHttpClient>();

            var workItems = await GetWorkItemGroupsInternal(client, configuration);

            return(BuildTree(workItems));
        }
예제 #4
0
        public async Task <CodeHubWorkItemList> GetWorkItemTreeFromProviderFromCache(DevOpsConfiguration configuration, bool clearCache = false)
        {
            var cacheKey = $"GetWorkItemTreeFromProvider{configuration.OrganizationUrl}";

            if (clearCache)
            {
                _codeHubCache.Cache.Remove(cacheKey);
            }

            var workItems = await _codeHubCache.Cache.GetOrCreateAsync(cacheKey, async entry =>
            {
                entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(_devOpsConfiguration.Value.CacheDuration);
                return(await GetWorkItemTreeFromProvider(configuration));
            });

            return(workItems);
        }
예제 #5
0
 public DevOpsClient(DevOpsConfiguration config, GitHttpClient gitHttpClient, BuildHttpClient buildHttpClient)
 {
     _config          = config;
     _gitHttpClient   = gitHttpClient;
     _buildHttpClient = buildHttpClient;
 }
예제 #6
0
 private VssConnection CreateConnectionFromConfiguration(DevOpsConfiguration configuration)
 {
     return(new VssConnection(new Uri(configuration.OrganizationUrl), new VssBasicCredential(string.Empty, configuration.OrganizationOwnerPatToken)));
 }
예제 #7
0
        private async Task <List <WorkItem> > GetWorkItemGroupsInternal(WorkItemTrackingHttpClient client, DevOpsConfiguration configuration)
        {
            try
            {
                var stopWatch = new Stopwatch();
                stopWatch.Start();
                var allItems = new List <WorkItem>();

                var query = new Wiql {
                    Query = configuration.WorkItemQuery
                };
                var workItemGroupResult = await client.QueryByWiqlAsync(query);

                var workItemGroups = (from i in Enumerable.Range(0, workItemGroupResult.WorkItems.Count()) group workItemGroupResult.WorkItems.ToList()[i] by i / 200).ToList();

                _logger.LogInformation($"Got {workItemGroupResult.WorkItems.Count()} split into {workItemGroups.Count()} groups. Elapsed: {stopWatch.ElapsedMilliseconds}");
                foreach (var queryGroup in workItemGroups)
                {
                    if (!queryGroup.Any())
                    {
                        continue;
                    }

                    var             newIds = queryGroup.ToList().Select(s => s.Id).ToArray();
                    List <WorkItem> workItems;

                    if (configuration.GetWorkItemFields().Length == 0)
                    {
                        workItems = await client.GetWorkItemsAsync(ids : newIds, asOf : workItemGroupResult.AsOf, expand : WorkItemExpand.Relations);
                    }
                    else
                    {
                        workItems = await client.GetWorkItemsAsync(ids : newIds, fields : configuration.GetWorkItemFields(), asOf : workItemGroupResult.AsOf);
                    }

                    allItems.AddRange(workItems);
                }

                if (!string.IsNullOrEmpty(configuration.OrderByWorkItemFieldName) && configuration.GetWorkItemFields().Contains(configuration.OrderByWorkItemFieldName))
                {
                    allItems = allItems.OrderByDescending(s => s.Fields[configuration.OrderByWorkItemFieldName]).ToList();
                }

                _logger.LogInformation($"Found {allItems.Count} items, Elapsed: {stopWatch.ElapsedMilliseconds}");
                return(allItems);
            }
            catch (Exception e)
            {
                _logger.LogCritical($"Failed to fetch DevOp items {e}");
                throw;
            }
        }
예제 #8
0
        private async Task <CodeHubWorkItemList> GetAllWorkItemsInternal(WorkItemTrackingHttpClient client, DevOpsConfiguration configuration)
        {
            configuration ??= _devOpsConfiguration.Value;

            var allItems = await GetWorkItemGroupsInternal(client, configuration);

            var mapped = _mapper.Map <List <CodeHubWorkItem> >(allItems);

            return(new CodeHubWorkItemList {
                WorkItems = mapped
            });
        }