1 | _ = require 'lodash'
|
2 | colors = require 'colors'
|
3 | program = require 'commander'
|
4 | moment = require 'moment'
|
5 | cliClear = require 'cli-clear'
|
6 | Printer = require './src/printer'
|
7 | Config = require './src/config.coffee'
|
8 | packageJSON = require './package.json'
|
9 |
|
10 | GovernatorService = require './src/governator-service.coffee'
|
11 | DeployStateService = require './src/deploy-state-service'
|
12 | ServiceStateService = require './src/service-state-service'
|
13 |
|
14 | program
|
15 | .version packageJSON.version
|
16 | .usage '[options] <project-name> <tag>'
|
17 | .option '-o, --owner <octoblu>', 'Project owner'
|
18 | .option '-j, --json', 'Print JSON'
|
19 |
|
20 | class Command
|
21 | constructor: ->
|
22 | process.on 'uncaughtException', @die
|
23 | @config = new Config()
|
24 | {@repo, @owner, @tag, @json} = @parseOptions()
|
25 | @deployStateService = new DeployStateService { config: @config.get() }
|
26 | @governatorService = new GovernatorService { config: @config.get() }
|
27 | @serviceStateService = new ServiceStateService { config: @config.get() }
|
28 |
|
29 | parseOptions: =>
|
30 | program.parse process.argv
|
31 | repo = program.args[0]
|
32 | repo ?= @config.getPackageName()
|
33 |
|
34 | tag = program.args[1]
|
35 | tag ?= @config.getPackageVersion()
|
36 |
|
37 | { owner, json } = program
|
38 | owner ?= 'octoblu'
|
39 |
|
40 | @dieHelp new Error 'Missing repo' unless repo?
|
41 | @dieHelp new Error 'Missing tag' unless tag?
|
42 |
|
43 | return { repo, owner, json: json?, tag }
|
44 |
|
45 | run: =>
|
46 | @getStatus()
|
47 |
|
48 | getStatus: =>
|
49 | cliClear()
|
50 | slug = "#{@owner}/#{@repo}:#{@tag}"
|
51 | printer = new Printer { @json, slug }
|
52 | console.log '[refreshed at] ', colors.cyan moment().toString()
|
53 | @deployStateService.getStatus { @repo, @owner, @tag }, (error, deployment) =>
|
54 | return @die error if error?
|
55 | @serviceStateService.getStatuses { @repo, @owner }, (error, dockerUrls) =>
|
56 | return @die error if error?
|
57 | @governatorService.getStatuses { @repo, @owner, @tag }, (error, governators) =>
|
58 | return @die error if error?
|
59 | return printer.printJSON { deployment, dockerUrls, governators } if @json
|
60 | printer.printDeployment deployment
|
61 | printer.printDockerUrls dockerUrls
|
62 | printer.printGovernators governators
|
63 | _.delay @getStatus, 1000 * 40
|
64 |
|
65 | dieHelp: (error) =>
|
66 | program.outputHelp()
|
67 | return @die error
|
68 |
|
69 | die: (error) =>
|
70 | return process.exit(0) unless error?
|
71 | console.error error.stack
|
72 | process.exit 1
|
73 |
|
74 | module.exports = Command
|