public async Task <CodeHubWorkItemList> GetWorkItemsFromProvider(DevOpsConfiguration configuration) { var connection = CreateConnectionFromConfiguration(configuration); var client = connection.GetClient <WorkItemTrackingHttpClient>(); return(await GetAllWorkItemsInternal(client, null)); }
public TestPlanTool(DevOpsConfiguration config) { _config = config; Log.Logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger(); Logger = (Logger)Log.Logger; }
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)); }
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); }
public DevOpsClient(DevOpsConfiguration config, GitHttpClient gitHttpClient, BuildHttpClient buildHttpClient) { _config = config; _gitHttpClient = gitHttpClient; _buildHttpClient = buildHttpClient; }
private VssConnection CreateConnectionFromConfiguration(DevOpsConfiguration configuration) { return(new VssConnection(new Uri(configuration.OrganizationUrl), new VssBasicCredential(string.Empty, configuration.OrganizationOwnerPatToken))); }
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; } }
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 }); }