UNPKG

jira-cli

Version:
231 lines (196 loc) 7.52 kB
/*global requirejs,console,define,fs*/ module.exports = function () { var program = require('commander'); var sslRequest = require('../../lib/ssl_request');; var Table = require('cli-table'); var config = require('../../lib/config'); var getRapidBoardID = function getRapidBoardID(rapidBoardID, cb) { if (typeof rapidBoardID !== 'string') { rapidBoardID = undefined; } sslRequest.get(config.auth.url + 'rest/greenhopper/latest/rapidviews/list').end((err, res) => { try { if (!res.ok) { console.log('Error getting rapid boards. HTTP Status Code: ' + res.status); return; } } catch(e) { if (err && err.message) { return cb(`A connection error occurred: Error Number: ${err.errno} | Message: ${err.message}`) } return cb(e); } displayRapidBoards(rapidBoardID, res.body, cb); }); }; var displayRapidBoards = function displayRapidBoards(rapidBoardID, data, cb) { var table = new Table({ head: ['Key', 'Name'] }); var pushTable = []; for (i = 0; i < data.views.length; i++) { var item = data.views[i]; if (rapidBoardID !== undefined) { if (item.name.toLowerCase() == rapidBoardID.toLowerCase()) { pushTable = [[item.id, item.name]]; break; } if (item.name.toLowerCase().indexOf(rapidBoardID.toLowerCase()) === -1) { continue; } } pushTable.push([item.id, item.name]); } table.push.apply(table, pushTable); if (table.length === 0) { if (rapidBoardID === undefined) { console.log('No rapid boards found in your Jira instance'); } else { console.log('No rapid boards found matching term in your Jira instance: ' + rapidBoardID); } } else if (table.length === 1) { console.log('****Found Rapid Board: ' + table[0][1]); cb(table[0][0]); } else { console.log('\nMatching Rapid Boards:'); console.log('=========================================\n'); console.log(table.toString()); } }; var getSprintID = function getSprintID(rapidBoardID, sprintID, cb) { if (typeof sprintID !== 'string') { sprintID = undefined; } sslRequest.get(config.auth.url + 'rest/greenhopper/latest/sprintquery/' + rapidBoardID).end((err, res) => { try { if (!res.ok) { console.log('Error getting sprints. HTTP Status Code: ' + res.status); return; } } catch(e) { if (err && err.message) { return cb(`A connection error occurred: Error Number: ${err.errno} | Message: ${err.message}`) } return cb(e); } displaySprints(rapidBoardID, sprintID, res.body, cb); }); }; var displaySprints = function displaySprints(rapidBoardID, sprintID, data, cb) { var table = new Table({ head: ['Key', 'Name', 'Status'] }); var pushTable = []; for (i = 0; i < data.sprints.length; i++) { var item = data.sprints[i]; if (sprintID !== undefined) { if (item.name.toLowerCase() == sprintID.toLowerCase()) { pushTable = [[item.id, item.name, item.state]]; break; } if (item.state !== 'ACTIVE') { continue; } if (item.name.toLowerCase().indexOf(sprintID.toLowerCase()) === -1) { continue; } } pushTable.push([item.id, item.name, item.state]); } table.push.apply(table, pushTable); if (table.length == 0) { if (sprintID === undefined) { console.log('No sprints found in rapid board ' + rapidBoardID); } else { console.log('No sprints found matching term in rapid board ' + rapidBoardID + ': ' + sprintID); } } else if (table.length === 1) { console.log('****Found Sprint: ' + table[0][1]); cb(table[0][0]); } else { console.log('\nMatching Sprints:'); console.log('=========================================\n'); console.log(table.toString()); return cb(pushTable[pushTable.length - 1][0], pushTable); //picks the last sprint } }; var getSprintIssues = function getSprintIssues(rapidBoardID, sprintID, cb) { var qParams = 'rapidViewId=' + rapidBoardID; if (sprintID) { qParams += '&sprintId=' + sprintID; } sslRequest.get(config.auth.url + 'rest/greenhopper/latest/rapid/charts/sprintreport?' + qParams).end((err, res) => { try { if (!res.ok) { console.log('Error getting sprint data. HTTP Status Code: ' + res.status); console.dir(res.body); return; } } catch(e) { if (err && err.message) { return cb(`A connection error occurred: Error Number: ${err.errno} | Message: ${err.message}`) } return cb(e); } cb(res.body); }); }; var displaySprintIssues = function displaySprintIssues(rapidBoardID, sprintID, data) { var sprint = new Table({ head: ['Key', 'Name', 'Status', 'Start Date', 'End Date'] }); var completed = new Table({ head: ['Key', 'Type', 'Assignee', 'Priority', 'Status', 'Summary'] }); var incompleted = new Table({ head: ['Key', 'Type', 'Assignee', 'Priority', 'Status', 'Summary'] }); var punted = new Table({ head: ['Key', 'Type', 'Assignee', 'Priority', 'Status', 'Summary'] }); var pushIssues = function pushIssues(issues, table) { if (!issues) return; issues.forEach(function (issue) { var priority = issue.priorityName || 'Unknown', summary = issue.summary.length > 45 ? issue.summary.substr(0, 42) + '...' : issue.summary, status = issue.statusName || 'Unknown', assignee = issue.assignee || 'None', key = issue.key || 'Unknown', type = issue.typeName || 'Unknown'; table.push([key, type, assignee, priority, status, summary]); }); }; pushIssues(data.contents.completedIssues, completed); pushIssues(data.contents.issuesNotCompletedInCurrentSprint, incompleted); pushIssues(data.contents.puntedIssues, punted); sprint.push([data.sprint.id, data.sprint.name, data.sprint.state, data.sprint.startDate, data.sprint.endDate]); var displayTable = function displayTable(msg, table) { if (table.length > 0) { console.log(msg); console.log(table.toString()); console.log('\n==============================================================\n'); } }; console.log('\n=============================================================='); console.log('==== SPRINT ===='); console.log('==============================================================\n'); displayTable('Sprint:', sprint); displayTable('Completed Issues:', completed); displayTable('Punted Issues:', punted); displayTable('Incompleted Issues:', incompleted); }; return function sprint(userRapidBoardID, userSprintID, cb) { getRapidBoardID(userRapidBoardID, function (rapidBoardID) { getSprintID(rapidBoardID, userSprintID, function (sprintID, allSprints) { getSprintIssues(rapidBoardID, sprintID, function (data) { if (cb) { displaySprintIssues(rapidBoardID, sprintID, data); return cb(allSprints); } else { displaySprintIssues(rapidBoardID, sprintID, data); } }); }); }); }; }();