Class: Alerty::Plugin::AmazonSns

Inherits:
Object
  • Object
show all
Defined in:
lib/alerty/plugin/amazon_sns.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ AmazonSns

Returns a new instance of AmazonSns.

Raises:

  • (ConfigError)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/alerty/plugin/amazon_sns.rb', line 9

def initialize(config)
  raise ConfigError.new('amazon_sns: topic_arn is not configured') unless config.topic_arn
  raise ConfigError.new('amazon_sns: subject is not configured') unless config.subject
  # see http://docs.aws.amazon.com/sdkforruby/api/Aws/SNS/Client.html
  # ENV or ~/.aws/credentials or instance profile on EC2, or alerty config file
  params = {}
  params[:region] = config.aws_region || guess_region(config.topic_arn)
  params[:access_key_id] = config.aws_access_key_id if config.aws_access_key_id
  params[:secret_access_key] = config.aws_secret_access_key if config.aws_secret_access_key
  @client = Aws::SNS::Client.new(params)
  @subject = config.subject
  @topic_arn = config.topic_arn
  @num_retries = config.num_retries || 3
end

Instance Method Details

#alert(record) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/alerty/plugin/amazon_sns.rb', line 24

def alert(record)
  message = record[:output]
  subject = expand_placeholder(@subject, record)
  subject = subject[0..98] # SNS constraint, must be less than 100 character long
  retries = 0
  begin
    @client.publish(topic_arn: @topic_arn, message: message, subject: subject)
    Alerty.logger.info "Sent #{{subject: subject, message: message}} to #{@topic_arn}"
  rescue => e
    retries += 1
    sleep 1
    if retries <= @num_retries
      retry
    else
      raise e
    end
  end
end