@groundbreaker/github-cycle-time v0.0.2
@groundbreaker/github-cycle-time 
Calculates Reaction/Lead/Cycle Time from your Organization's GitHub issues.
Getting Started
Add as a dependency to your project:
yarn add @groundbreaker/github-cycle-timeor
npm install @groundbreaker/github-cycle-timeUsage
Creating an instance of CycleTime
const CycleTime = require('@groundbreaker/github-cycle-time');
// assuming you have stored your configuration in the environment...
service = new CycleTime({ org: process.env.GITHUB_ORG, token: process.env.GITHUB_TOKEN });Options
org(string) - Github Organization name. Requiredtoken(string) - Github Personal Access Token. RequiredbaseUrl(string) - Github API Base URL. Defaults tohttps://api.github.com. Optionalcache(blob-store) - An object that implements the abstract-blob-store API. Defaults toMemBlobs, an in-memory reference implementation that ships withabstract-blob-store. You will get better results with fs-blob-store, s3-blob-store, or one of the other blob-store implementations.
API
CycleTime#tickets(since)
This provides access to all of the tickets in your organization, summarized with event timestamps, and cycle durations. Must be called with a ISO8601 timestamp string argument, which filters issues that were created on or after this date. This method returns a Promise, and must be used with then() or async/await.
Example
const CycleTime = require('@groundbreaker/github-cycle-time');
service = new CycleTime({ org: process.env.GITHUB_ORG, token: process.env.GITHUB_TOKEN });
service.tickets('2018-08-01T00:00:00Z')
.then((data) => {
// do something with data
console.log(data);
})
.catch((error) => {
console.error(error);
});Return Value
[
{
id: 1,
opened: '1978-01-13T09:11:00Z',
assigned: '1978-01-14T09:11:00Z',
closed: '1978-01-16T09:11:00Z',
reopened: '1978-01-15T09:11:00Z',
reaction_time: 86400,
cycle_time: 172800,
lead_time: 259200
}
]- All dates are ISO 8601 strings, in the UTC timezone.
- All durations are in seconds, and may be expressed as decimals.
- Some events may have a
nullvalue, e.g.closedisnullbecause the issue is still open.
CycleTime#metrics(since)
This provides an aggregation of the cycle durations for all the tickets in your organization returned by CycleTime#tickets(since). Must be called with a ISO8601 timestamp string argument, which filters issues that were created on or after this date. This method returns a Promise, and must be used with then() or async/await.
const CycleTime = require('@groundbreaker/github-cycle-time');
service = new CycleTime({ org: process.env.GITHUB_ORG, token: process.env.GITHUB_TOKEN });
service.metrics('2018-08-01T00:00:00Z')
.then((data) => {
// do something with data
console.log(data);
})
.catch((error) => {
console.error(error);
});Return Value
{
org: 'groundbreaker',
reaction_time_mean: 8,
reaction_time_median: 8,
reaction_time_mean_human: '0.1M',
reaction_time_median_human: '0.1M',
cycle_time_mean: 8024878,
cycle_time_median: 8024878,
cycle_time_mean_human: '13W 1D 21H 8.0M',
cycle_time_median_human: '13W 1D 21H 8.0M',
lead_time_mean: 8024886,
lead_time_median: 8024886,
lead_time_mean_human: '13W 1D 21H 8.1M',
lead_time_median_human: '13W 1D 21H 8.1M'
}- All durations are in seconds, and may be expressed as decimals.
- All
*_meanvalues are straight averages, and should be interpreted as the effective cycle times. - All
*_medianvalues find the middle value, effectively throwing away outliers, and should be seens as the typical cycle times. - All
*_humanvalues are formatted duration strings, with weeks (W) as the largest unit of measure, and minutes (M) as the smallest unit of measure. Units with a0value are not shown in the output.