// // GET: /ReopenRate/ public ActionResult Index(string project) { _jss = new JiraSoapServiceService(); _token = _jss.login(_jiraUsername, _jiraPassword ); string projectId; project = Util.nvl(project, "DPS"); // Get Project ID List<RemoteProject> projects = HttpRuntime.Cache.GetOrStore<List<RemoteProject>>("projects", 3600, () => _jss.getProjectsNoSchemes(_token).ToList()); projectId = projects.Find(p => p.key == project).id; // Get Versions, limit to ones we care about List<RemoteVersion> versions = HttpRuntime.Cache.GetOrStore<List<RemoteVersion>>("versions-"+project, 3600, () => _jss.getVersions(_token, project).ToList()); versions = versions.Where(v => !v.archived && (!v.released || v.releaseDate > DateTime.Now.AddDays(-90))).OrderBy(v => v.sequence).ToList(); // Populate version list var rlist = new List<ReopenRateVersion>(); foreach (var v in versions) { ReopenRateVersion r = new ReopenRateVersion() { VersionId = v.id, VersionName = v.name }; rlist.Add(r); } rlist.Add(new ReopenRateVersion() { VersionId = "", VersionName = "None" }); // Enrich version list with data from DB (not available in API) JiraRepository rc = new JiraRepository(); rc.GetReopenRates(projectId, ref rlist); return View(rlist); }
/// <summary> /// Returns a google chart of issues burndown for a specified version /// </summary> /// <param name="projectKey">Project Key, eg. DPS</param> /// <param name="version">Name of the desired version</param> /// <param name="refresh">Refresh parameter for chart- options are a number of minutes, or "now" to remove the cache</param> /// <returns></returns> public ActionResult IssuesBurndownChart(string projectKey, string version, string refresh) { try { int i; _jss = new JiraSoapServiceService(); _token = _jss.login(_jiraUsername, _jiraPassword); string versionId=""; if (String.IsNullOrEmpty(projectKey)) return View("Error", new ErrorInfoViewModel() { ErrorMessage = "Please select a project" }); // Agile or Regular? if (!int.TryParse(projectKey, out i)) { // Get relevant version List<RemoteVersion> versions = HttpRuntime.Cache.GetOrStore<List<RemoteVersion>>("versions-" + projectKey, 3600, () => _jss.getVersions(_token, projectKey).ToList()); try { versionId = versions.Find(v => v.name == version).id; } catch (NullReferenceException) { return View("Error", new ErrorInfoViewModel() { ErrorMessage = String.Format("Version does not exist in project {0}.", projectKey) }); } } // Handle refresh - options are now or a value in minutes int refreshMinutes; handleRefreshParameter(Request.QueryString["refresh"], "sprint-" + version, out refreshMinutes); // Populate View Model parameters JiraRepository rc = new JiraRepository(); IssuesBurndownChartViewModel vm = new IssuesBurndownChartViewModel(); vm.Title = String.Format("Issues Burndown Chart for {0}", version); vm.Refresh = refreshMinutes; vm.Sprint = HttpRuntime.Cache.GetOrStore<JiraSprint>("sprint-" + version, 60 * 45, () => String.IsNullOrEmpty(versionId) ? rc.GetBugsForAgileSprint(projectKey, version) : rc.GetBugsForSprint(projectKey, versionId, version)); return View(vm); } catch (Exception ex) { return View("Error", new ErrorInfoViewModel() { ErrorMessage = String.Format("An unexpected error has occurred ({0}).", ex.Message), Refresh = 15 }); } }