src/commands/drains/index.js
'use strict'
let cli = require('heroku-cli-util')
let co = require('co')
function styledDrain (id, name, drain) {
let output = `${id} (${name})`
if (drain.extended) output = output + ` drain_id=${drain.extended.drain_id}`
cli.log(output)
}
function * run (context, heroku) {
const {partition} = require('lodash')
let path = `/apps/${context.app}/log-drains`
if (context.flags.extended) path = path + '?extended=true'
let drains = yield heroku.request({path})
if (context.flags.json) {
cli.styledJSON(drains)
} else {
drains = partition(drains, 'addon')
if (drains[1].length > 0) {
cli.styledHeader('Drains')
drains[1].forEach((drain) => {
styledDrain(drain.url, cli.color.green(drain.token), drain)
})
}
if (drains[0].length > 0) {
let addons = yield drains[0].map((d) => heroku.get(`/apps/${context.app}/addons/${d.addon.name}`))
cli.styledHeader('Add-on Drains')
addons.forEach((addon, i) => {
styledDrain(cli.color.yellow(addon.plan.name), cli.color.green(addon.name), drains[0][i])
})
}
}
}
module.exports = {
topic: 'drains',
description: 'display the log drains of an app',
needsApp: true,
needsAuth: true,
flags: [
{name: 'json', description: 'output in json format'},
{name: 'extended', char: 'x', hidden: true}
],
run: cli.command(co.wrap(run))
}