public Source GetChangeSet(SonarRequestGetChangeSet sonarRequestGetChangeSet) { if (sonarRequestGetChangeSet == null || _sonarSettings == null) { return(null); } try { string cacheKey = string.Format("GetChangesetRespByComponent_{0}", sonarRequestGetChangeSet.Component); var listIssues = _cacheManager.Resolve(cacheKey, async() => { return(await GetSourceFromSonar(sonarRequestGetChangeSet)); }); if (sonarRequestGetChangeSet.Line == default(int)) { return(listIssues.GetAwaiter().GetResult()?.Where(_ => _.AuthorEmail == sonarRequestGetChangeSet.AuthorEmail) ?.MinBy(_ => Math.Abs((_.CreationDate - sonarRequestGetChangeSet.IssueDate).Ticks))); } else { return(listIssues.GetAwaiter().GetResult()?.FirstOrDefault(_ => _.Line == sonarRequestGetChangeSet.Line)); } } catch (Exception ex) { _loggingService.LogError(sonarRequestGetChangeSet, "", ex); return(null); } }
private async Task <List <Source> > GetSourceFromSonar(SonarRequestGetChangeSet sonarRequestGetChangeSet) { try { if (sonarRequestGetChangeSet == null || _sonarSettings == null) { return(new List <Source>()); } List <KeyValuePair <string, string> > args = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("key", sonarRequestGetChangeSet.Component) }; LinesResponse responseLines = await _httpApiClient.PostAsync <LinesResponse>(args, _sonarSettings.Uri_GetChangeSet, _sonarSettings.Token); List <Source> res = new List <Source>(); if (responseLines?.sources != null) { foreach (var item in responseLines.sources) { res.Add(new Source() { ChangeSet = item.ChangeSet, Line = item.Line, AuthorEmail = item.Author, CreationDate = item.CreationDate }); } } return(res); } catch { return(null); } }
/// <summary> /// Call the SonarConnector and get the <see cref="Source"/> corresponding to the actual issue informations. /// </summary> /// <param name="sonarRequestGetChangeSet">The Issue informations used to detect the ChangeSet.</param> /// <param name="sonarConnector"></param> /// <returns>The <see cref="Source"/> containing the ChangeSet id, it's Date, ...</returns> private static Source GetChangeSetAsync(this Issue issue, ISonarConnector sonarConnector) { if (issue == null) { return(null); } SonarRequestGetChangeSet sonarRequestGetChangeSet = new SonarRequestGetChangeSet() { AuthorEmail = issue.IssueDetail.author, IssueDate = issue.IssueDetail.creationDate, Component = issue.IssueDetail.component, Line = issue.IssueDetail.line }; return(sonarConnector.GetChangeSet(sonarRequestGetChangeSet)); }