Пример #1
0
        /// <summary>
        /// The internal Assembler converting the <see cref="SearchIssuesResponse"/> to an enriched list of Sonar Issues.
        /// </summary>
        /// <param name="searchIssuesResponse">The list of Issues from the Sonar API.</param>
        /// <param name="groupADSet">The active directory information needed to get some informations.</param>
        /// <param name="mapper">The AutoMapper interface to create the Issues Detail <see cref="IssueDetail"/>.</param>
        /// <param name="sonarConnector">The link to the Sonar Services.</param>
        /// <returns>An enriched and filtered list of Sonar Issues.</returns>
        internal static List <Issue> CreateIssueSet(this SearchIssuesResponse searchIssuesResponse, GroupADSet groupADSet, IMapper mapper, ISonarConnector sonarConnector, ITfsConnector tfsConnector)
        {
            List <Issue> issueSet = new List <Issue>();

            if (searchIssuesResponse?.issues == null)
            {
                return(issueSet);
            }

            issueSet.Capacity = searchIssuesResponse.issues.Count;
            foreach (var responseIssue in searchIssuesResponse.issues)
            {
                if (responseIssue != null)
                {
                    Issue issue = new Issue()
                    {
                        IssueDetail = mapper.Map <IssueDetail>(responseIssue)
                    };

                    issue = issue.AddChangeSet(sonarConnector);
                    if (issue.ChangeSetDate != null && issue.ChangeSetDate?.AddDays(5) > issue.IssueDetail.creationDate)
                    {
                        issue = issue.AddCodeProject(tfsConnector);
                        issue = issue.AddActiveDirectoryGroup(groupADSet);
                        issue = issue.AddCodeLineCount(tfsConnector);

                        issueSet.Add(issue);
                    }
                }
            }

            issueSet.TrimExcess();
            return(issueSet);
        }
Пример #2
0
        private SearchIssuesResponse SetDefaultLineValueIfNoLineNumber(SearchIssuesResponse searchIssuesResponse)
        {
            if (searchIssuesResponse?.issues == null)
            {
                return(searchIssuesResponse);
            }
            var issuesWithNoLineNumber = searchIssuesResponse.issues.Where(_ => _.line == 0);

            foreach (var currentIssue in issuesWithNoLineNumber)
            {
                currentIssue.line = default(int);
            }
            return(searchIssuesResponse);
        }
Пример #3
0
        public async Task <SearchIssuesResponse> GetIssuesAsync(SonarRequestGetIssues sonarSettingRequest)
        {
            if (sonarSettingRequest == null || _sonarSettings == null)
            {
                return(null);
            }
            if (sonarSettingRequest.NbIssuesPerRequest == default(int))
            {
                sonarSettingRequest.NbIssuesPerRequest = _sonarSettings.NbIssuesPerRequestDefault;
            }

            SearchIssuesResponse searchIssuesResponse = new SearchIssuesResponse();

            searchIssuesResponse.issues = new List <Issues>();
            bool needToRetrieveNextIssues = true;
            int  pageNumber = 1;

            while (needToRetrieveNextIssues)
            {
                List <KeyValuePair <string, string> > args = new List <KeyValuePair <string, string> >
                {
                    new KeyValuePair <string, string>("ps", sonarSettingRequest.NbIssuesPerRequest.ToString()),
                    new KeyValuePair <string, string>("assigned", "true"),
                    new KeyValuePair <string, string>("p", pageNumber.ToString()),
                    new KeyValuePair <string, string>("createdAfter", sonarSettingRequest.DateFrom.ToString("yyyy-MM-dd")),// "2017-10-01"));
                    new KeyValuePair <string, string>("createdBefore", sonarSettingRequest.DateTo.ToString("yyyy-MM-dd")),
                    new KeyValuePair <string, string>("statuses", "OPEN,REOPENED"),
                    new KeyValuePair <string, string>("severities", "CRITICAL, MAJOR"),
                    new KeyValuePair <string, string>("languages", "cs")
                };
                if (sonarSettingRequest.Users != null)
                {
                    args.Add(new KeyValuePair <string, string>("assignees", string.Join(",", sonarSettingRequest.Users)));
                }
                SearchIssuesResponse result = await _httpApiClient.PostAsync <SearchIssuesResponse>(args, _sonarSettings.Uri_GetIssues, _sonarSettings.Token);

                if (result?.issues == null)
                {
                    break;
                }
                searchIssuesResponse.issues.AddRange(result.issues);
                needToRetrieveNextIssues = sonarSettingRequest.NbIssuesPerRequest == result.issues.Count;
                pageNumber++;
            }

            return(searchIssuesResponse);
        }
Пример #4
0
        /// <summary>
        /// Get Sonar issues corresponding to the <see cref="SonarRequestGetIssues"/> parameters.
        /// </summary>
        /// <param name="sonarSettingRequest">The parameters used to get the issues.</param>
        /// <returns>A list of Sonar issues with ActiveDirectory, ChangeSet and CodeProject informations.</returns>
        public IssuesSonarSet GetIssuesSonar(SonarRequestGetIssues sonarSettingRequest)
        {
            if (sonarSettingRequest == null)
            {
                return(null);
            }

            _loggingService.LogInfo(this, "Parameters : DateFrom " + sonarSettingRequest.DateFrom.ToString() + ", DateTo " + sonarSettingRequest.DateFrom.ToString());

            GroupADSet groupADSet = _activeDirectoryService.GetUsersByGroupAd(sonarSettingRequest.GroupAdSet);

            sonarSettingRequest.Users = groupADSet?.GetListOfUser();

            SearchIssuesResponse searchIssuesResponse = _sonarConnector.GetIssuesAsync(sonarSettingRequest).Result;
            List <Issue>         issueSet             = searchIssuesResponse.CreateIssueSet(groupADSet, _mapper, _sonarConnector, _tfsConnector);

            _loggingService.LogInfo(this, issueSet.Count().ToString() + " resultats. Parameters : DateFrom " + sonarSettingRequest.DateFrom.ToString() + ", DateTo " + sonarSettingRequest.DateTo.ToString());

            return(new IssuesSonarSet()
            {
                IssueSet = issueSet
            });
        }