1 | _ = require 'lodash'
|
2 | colors = require 'colors'
|
3 | moment = require 'moment'
|
4 |
|
5 | class Printer
|
6 | constructor: ({ @slug }) ->
|
7 |
|
8 | printDeployment: (result) =>
|
9 | return @_printEmpty("deployment") if _.isEmpty result
|
10 | @_printPretty result
|
11 |
|
12 | printDockerUrls: (result) =>
|
13 | return if _.isEmpty result
|
14 | console.log "[current state]"
|
15 | _.each result, @printDockerUrl
|
16 | console.log ''
|
17 |
|
18 | printDockerUrl: (dockerUrl, cluster) =>
|
19 | return if _.isEmpty dockerUrl
|
20 | console.log " [#{cluster}]"
|
21 | console.log " ", colors.gray('docker_url'), colors.bold dockerUrl
|
22 |
|
23 | printGovernators: (result) =>
|
24 | return @_printEmpty("pending deploys") if _.isEmpty result
|
25 | console.log "[deployments]"
|
26 | _.each result, @printGovernator
|
27 | console.log ''
|
28 |
|
29 | printGovernator: (deploys, cluster) =>
|
30 | return if _.isEmpty deploys
|
31 | console.log " [#{cluster}]"
|
32 | _.each deploys, @_printGovernatorDeploy
|
33 |
|
34 | _printGovernatorDeploy: ({ deploymentKey, deployAtSince, status }) =>
|
35 | status = colors.yellow status if status == 'pending'
|
36 | status = colors.red status unless status == 'pending'
|
37 | console.log " ", colors.bold "#{deploymentKey}:"
|
38 | console.log " ", colors.gray('deployAt'), colors.cyan deployAtSince
|
39 | console.log " ", colors.gray('status'), status
|
40 |
|
41 | _printEmpty: (thing) =>
|
42 | console.log colors.yellow "No #{thing} exists for #{@slug}"
|
43 |
|
44 | printJSON: (result) =>
|
45 | console.log JSON.stringify result, null, 2
|
46 |
|
47 | _printPretty: (result) =>
|
48 | console.log ''
|
49 | console.log "[deployment]", colors.bold "#{@slug}"
|
50 | @_printBuild result
|
51 | @_printCluster result
|
52 | console.log ''
|
53 |
|
54 | _printBuild: (result) =>
|
55 | result.build ?= {}
|
56 | if !result.build['travis-ci']? or !result.build['docker']?
|
57 | result.build.pending = true
|
58 | console.log ''
|
59 | console.log "[build status] ", @_passfail result.build
|
60 | console.log " travis:", @_passfail result.build["travis-ci"]
|
61 | console.log " docker:", @_passfail result.build.docker
|
62 |
|
63 | _printCluster: (result) =>
|
64 | return if _.isEmpty result.cluster
|
65 | console.log ''
|
66 | console.log "[cluster status]"
|
67 | _.each _.keys(result.cluster), (cluster) =>
|
68 | console.log " #{cluster}:", @_passfail result.cluster[cluster]
|
69 |
|
70 | _passfail: (options) =>
|
71 | return colors.yellow "(pending)" if _.isEmpty options
|
72 | { passing, pending, createdAt, updatedAt } = options
|
73 | return colors.yellow "(pending)" if pending
|
74 | status = colors.green "(passing)" if passing
|
75 | status = colors.red "(failed)" unless passing
|
76 | date = createdAt ? updatedAt
|
77 | return status unless date?
|
78 | humanDate = moment(date).fromNow()
|
79 | return "#{status} #{colors.cyan(humanDate)}"
|
80 |
|
81 | module.exports = Printer
|