Class: Lita::Handlers::CodedeployStatus
- Inherits:
-
Handler
- Object
- Handler
- Lita::Handlers::CodedeployStatus
- Defined in:
- lib/lita/handlers/codedeploy_status.rb
Instance Method Summary collapse
- #codedeploy_api ⇒ Object
- #codedeploy_api_init ⇒ Object
- #codedeploy_status(response) ⇒ Object
- #deployment_done ⇒ Object
- #deployment_instance_status(instance_id) ⇒ Object
- #deployment_status ⇒ Object
- #deployment_updated ⇒ Object
- #do_watch_deployment(branch, response, timer = nil) ⇒ Object
- #get_deployment_instances ⇒ Object
- #latest_deployment_id(application_name, deployment_group_name) ⇒ Object
- #render_output(branch, response) ⇒ Object
- #update_deployment_info ⇒ Object
- #watch_deployment(branch, response) ⇒ Object
Instance Method Details
#codedeploy_api ⇒ Object
100 101 102 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 100 def codedeploy_api @aws_api ||= codedeploy_api_init end |
#codedeploy_api_init ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 104 def codedeploy_api_init if config.aws_access_key && config.aws_secret_access_key Aws.config[:credentials] = Aws::Credentials.new(config.aws_access_key, config.aws_secret_access_key) end if config.aws_region Aws.config[:region] = config.aws_region end Aws::CodeDeploy::Client.new end |
#codedeploy_status(response) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 15 def codedeploy_status(response) @helper = Module.new do def time_ago(t) if t "(#{TimeLord::Period.new(t, ::Time.now).in_words})" end end def short_instance_id(instance_id) instance_id.split('/')[1] end end branch_name = response.matches[0][0] if branch_name && branch_name != '' branch = config.branches[branch_name] else config.branches.each do |k,v| if v[:default] branch_name = k branch = v end end end unless deployment_done response.reply("Deployment watch in progress - please wait until it is done before starting a new one.") return end unless branch response.reply("Could not find branch info for branch #{branch_name}.") return end branch[:name] = branch_name log.debug "Starting deployment watch for branch #{branch[:name]}: application_name #{branch[:application_name]}, deployment_group_name #{branch[:deployment_group_name]}" begin @deployment_id = latest_deployment_id(branch[:application_name], branch[:deployment_group_name]) @deployment_instances = get_deployment_instances watch_deployment(branch, response) rescue => e response.reply("Error: #{e.}") end end |
#deployment_done ⇒ Object
130 131 132 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 130 def deployment_done @deployment == nil || @deployment.deployment_info.complete_time != nil end |
#deployment_instance_status(instance_id) ⇒ Object
126 127 128 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 126 def deployment_instance_status(instance_id) codedeploy_api.get_deployment_instance(deployment_id: @deployment_id, instance_id: instance_id) end |
#deployment_status ⇒ Object
122 123 124 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 122 def deployment_status codedeploy_api.get_deployment(deployment_id: @deployment_id) end |
#deployment_updated ⇒ Object
134 135 136 137 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 134 def deployment_updated @previous_instance_id != @current_instance_id || @previous_instance_update != @current_instance_update end |
#do_watch_deployment(branch, response, timer = nil) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 74 def do_watch_deployment(branch, response, timer=nil) begin update_deployment_info if deployment_done render_output(branch, response) timer.stop if timer else if deployment_updated render_output(branch, response) end end rescue => e response.reply("Error: #{e.}") end end |
#get_deployment_instances ⇒ Object
118 119 120 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 118 def get_deployment_instances codedeploy_api.list_deployment_instances(deployment_id: @deployment_id).instances_list end |
#latest_deployment_id(application_name, deployment_group_name) ⇒ Object
114 115 116 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 114 def latest_deployment_id(application_name, deployment_group_name) codedeploy_api.list_deployments(application_name: application_name, deployment_group_name: deployment_group_name).deployments.first end |
#render_output(branch, response) ⇒ Object
91 92 93 94 95 96 97 98 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 91 def render_output(branch, response) response.reply(render_template_with_helpers("codedeploy_status", [@helper], config: config, branch: branch, deployment_id: @deployment_id, deployment: @deployment, deployment_instances: @deployment_instances, deployment_instance_status: @deployment_instance_status)) end |
#update_deployment_info ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 139 def update_deployment_info @deployment = deployment_status @deployment_instance_status = @deployment_instances.collect {|instance_id| deployment_instance_status(instance_id)} raise 'Unable to get deployment info' unless @deployment && @deployment_instance_status @previous_instance_id = @current_instance_id @previous_instance_update = @current_instance_update @deployment_instance_status.each do |status| if status.instance_summary.status == 'InProgress' @current_instance_id = status.instance_summary.instance_id @current_instance_update = status.instance_summary.last_updated_at end end end |
#watch_deployment(branch, response) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/lita/handlers/codedeploy_status.rb', line 65 def watch_deployment(branch, response) do_watch_deployment(branch, response) unless deployment_done every(10) do |timer| do_watch_deployment(branch, response, timer) end end end |