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

            if (!sessionInfo.Connected)
            {
                return(RedirectToAction("ConnectToProject", "Project"));
            }
            else
            {
                //Preparing model and metrics object
                GitHubMetrics ghMetrics = new GitHubMetrics(sessionInfo.ProjectDetails.GitHubProjectName, sessionInfo.ProjectDetails.GitHubProjectOwner, sessionInfo.ProjectDetails.GitHubToken);
                IssuesModel   model     = new IssuesModel();

                model.AverageIssueClosingTime = await ghMetrics.CalculateAverageIssueClosingTimeAsync();

                model.ClosedIssues = await ghMetrics.CountClosedIssuesAsync();

                model.OpenedIssues = await ghMetrics.CountOpenedIssuesAsync();

                model.EstimatedTimeToCloseAllIssues = await ghMetrics.CalculateEstimatedTimeToCloseAllIssuesAsync();

                model.ExpectedDateForClosingAllIssues = DateTime.Now + model.EstimatedTimeToCloseAllIssues;
                model.ClosedIssuesForMonth            = await ghMetrics.CountClosedIssuesForLastSixMonthsAsync();

                model.UserWithLargestIssuesClosed = null;

                return(View(model));
            }
        }
        public async System.Threading.Tasks.Task <ActionResult> GetBestContributorAsync()
        {
            BestUserPartialModel buPmodel    = new BestUserPartialModel();
            SessionInfo          sessionInfo = (SessionInfo)HttpContext.Session["SessionInfo"];
            GitHubMetrics        ghMetrics   = new GitHubMetrics(sessionInfo.ProjectDetails.GitHubProjectName, sessionInfo.ProjectDetails.GitHubProjectOwner, sessionInfo.ProjectDetails.GitHubToken);

            buPmodel.UserWithLargestIssuesClosed = await ghMetrics.FindUserWithLargestNumberOfClosedIssuesAsync();

            return(PartialView("_BestUser", buPmodel));
        }
        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));
            }
        }