module Kuroko2
module Workflow
module Notifier
class Hipchat
attr_reader :hipchat, :message_builder
USER_NAME = 'kuroko2'
def initialize(instance)
hipchat_options = Kuroko2.config.notifiers.hipchat.try!(:options).try!(:symbolize_keys) || {}
@instance = instance
@definition = instance.job_definition
@hipchat = HipChat::Client.new(Kuroko2.config.notifiers.hipchat.api_token, hipchat_options)
@message_builder = Workflow::Notifier::Concerns::ChatMessageBuilder.new(instance)
end
def notify_launch
if @definition.hipchat_notify_finished?
message = build_message(level: 'SUCCESS', text: message_builder.launched_text)
message << "
"
message << @instance.logs.reverse.detect{ |log| log.level == 'INFO' }.try!(:message)
send_to_hipchat(message, color: 'yellow')
end
end
def notify_retrying
if @definition.hipchat_notify_finished
message = build_message(level: 'SUCCESS', text: message_builder.retrying_text)
message << "
"
message << @instance.logs.last(2).first.message
send_to_hipchat(message, color: 'yellow')
end
end
def notify_skipping
if @definition.hipchat_notify_finished
message = build_message(level: 'SUCCESS', text: message_builder.skipping_text)
message << "
"
message << @instance.logs.last(2).first.message
send_to_hipchat(message, color: 'yellow')
end
end
def notify_cancellation
if @definition.notify_cancellation || @definition.hipchat_notify_finished?
message = build_message(level: 'WARNING', text: message_builder.failure_text)
message << "
"
message << @instance.logs.reverse.detect{ |log| log.level == 'WARN' }.try!(:message)
send_to_hipchat(message, color: 'yellow')
end
end
def notify_failure
message = build_message(level: 'FAILURE', text: message_builder.failure_text)
message << "
"
message << @instance.logs.last(2).first.message
send_to_hipchat(message, color: 'red', notify: true)
send_additional_text_to_hipchat
end
def notify_critical
message = build_message(level: 'CRITICAL', text: message_builder.failure_text)
message << "
"
message << @instance.logs.last(2).first.message
send_to_hipchat(message, color: 'red', notify: true)
send_additional_text_to_hipchat
end
def notify_finished
if @definition.hipchat_notify_finished?
message = build_message(level: 'SUCCESS', text: message_builder.finished_text)
send_to_hipchat(message)
end
end
def notify_long_elapsed_time
message = build_message(level: 'WARNING', text: message_builder.long_elapsed_time_text)
send_to_hipchat(message, color: 'red')
end
private
def send_to_hipchat(message, color: 'green', notify: false, format: 'html')
if notify_hipchat?
hipchat[@definition.hipchat_room].send(USER_NAME, message, color: color, notify: notify, message_format: format)
end
end
def build_message(level: , text:)
message = "[#{level}] "
message << text
message << "(Open)"
end
def send_additional_text_to_hipchat
if @definition.hipchat_additional_text.present?
message = message_builder.additional_text
send_to_hipchat(message, color: 'red', notify: true, format: 'text')
end
end
def notify_hipchat?
@definition.hipchat_room.present?
end
end
end
end
end