# frozen_string_literal: true require "dogapi" module Backup module Notifier class DataDog < Base ## # The DataDog API key attr_accessor :api_key ## # The title of the event attr_accessor :title attr_deprecate :text, version: "4.2", message: "Please use the `message` attribute. For more information "\ "see https://github.com/backup/backup/pull/698" ## # The timestamp for the event attr_accessor :date_happened ## # The priority of the event (low/normal) attr_accessor :priority ## # The host that generated the event attr_accessor :host ## # The tags for this host (should be an array) attr_accessor :tags ## # The alert_type of the event (error/warning/info/success) attr_accessor :alert_type ## # The aggregation_key for the event attr_accessor :aggregation_key ## # The source_type for the event (nagios, hudson, jenkins, user, my apps, # feed, chef, puppet, git, bitbucket, fabric, capistrano) attr_accessor :source_type_name def initialize(model, &block) super instance_eval(&block) if block_given? @title ||= "Backup #{model.label}" end private ## # Notify the user of the backup operation results. # # `status` indicates one of the following: # # `:success` # : The backup completed successfully. # : Notification will be sent if `on_success` is `true`. # # `:warning` # : The backup completed successfully, but warnings were logged. # : Notification will be sent if `on_warning` or `on_success` is `true`. # # `:failure` # : The backup operation failed. # : Notification will be sent if `on_warning` or `on_success` is `true`. # def notify!(status) msg = message.call(model, status: status_data_for(status)) hash = { alert_type: default_alert_type(status) } hash.store(:msg_title, @title) hash.store(:date_happened, @date_happened) if @date_happened hash.store(:priority, @priority) if @priority hash.store(:host, @host) if @host hash.store(:tags, @tags) if @tags hash.store(:aggregation_key, @aggregation_key) if @aggregation_key hash.store(:source_type_name, @source_type_name) if @source_type_name hash.store(:alert_type, @alert_type) if @alert_type send_event(msg, hash) end # Dogapi::Client will raise an error if unsuccessful. def send_event(msg, hash) client = Dogapi::Client.new(@api_key) event = Dogapi::Event.new(msg, hash) client.emit_event(event) end # set alert type def default_alert_type(status) case status when :success then "success" when :warning then "warning" when :failure then "error" end end end end end