public async System.Threading.Tasks.Task <ActionResult> CodeAnalysis()
        {
            SessionInfo sessionInfo = (SessionInfo)HttpContext.Session["SessionInfo"];

            if (!sessionInfo.Connected)
            {
                return(RedirectToAction("ConnectToProject", "Project"));
            }
            else
            {
                GitHubMetrics         ghMetrics = new GitHubMetrics(sessionInfo.ProjectDetails.GitHubProjectName, sessionInfo.ProjectDetails.GitHubProjectOwner, sessionInfo.ProjectDetails.GitHubToken);
                SonarQubeMetrics      sqMetrics = new SonarQubeMetrics(sessionInfo.ProjectDetails.SonarProjectName, sessionInfo.ProjectDetails.SonarServerUrl, sessionInfo.ProjectDetails.SonarQubeToken);
                CodeAnalysisViewModel baVmodel  = new CodeAnalysisViewModel();
                baVmodel.AverageIssueEffort              = sqMetrics.CalculateAverageTimeForResolvingIssue();
                baVmodel.EstTimeToFixAllIssues           = TimeSpan.FromSeconds(sqMetrics.CalculateTimeForClosingAllIssues().TotalSeconds / await ghMetrics.GetNumberOfActiveContributorsAsync());
                baVmodel.EstTimeToFixImportantIssues     = TimeSpan.FromSeconds(sqMetrics.CalculateTimeForClosingAllImportantIssues().TotalSeconds / await ghMetrics.GetNumberOfActiveContributorsAsync());
                baVmodel.IssuesCountWithSeverity         = sqMetrics.GetIssuesCountWithSeverity();
                baVmodel.ExpectedDateForClosingAllIssues = DateTime.Now + baVmodel.EstTimeToFixAllIssues;
                baVmodel.CodeQuality = sqMetrics.CalculateCodeQuality();
                return(View(baVmodel));
            }
        }
        public async System.Threading.Tasks.Task <ActionResult> ProjectQuality()
        {
            SessionInfo sessionInfo = (SessionInfo)HttpContext.Session["SessionInfo"];

            if (!sessionInfo.Connected)
            {
                return(RedirectToAction("ConnectToProject", "Project"));
            }
            else
            {
                //calculate metrics
                GitHubMetrics           ghMetrics = new GitHubMetrics(sessionInfo.ProjectDetails.GitHubProjectName, sessionInfo.ProjectDetails.GitHubProjectOwner, sessionInfo.ProjectDetails.GitHubToken);
                SonarQubeMetrics        sqMetrics = new SonarQubeMetrics(sessionInfo.ProjectDetails.SonarProjectName, sessionInfo.ProjectDetails.SonarServerUrl, sessionInfo.ProjectDetails.SonarQubeToken);
                MixedMetrics            mMetrics  = new MixedMetrics(ghMetrics, sqMetrics);
                ProjectQualityViewModel pqModel   = new ProjectQualityViewModel();
                pqModel.ProjectQuality = await mMetrics.CalculateQualityFactors();

                pqModel.EstimatedTimeToBetaRelease = await mMetrics.CalculateTimeToBetaRelease();

                pqModel.EstimatedTimeToFullRelease = await mMetrics.CalculateTimeToFullRelease();

                return(View(pqModel));
            }
        }