class Alerty::Plugin::AmazonSns
Public Class Methods
new(config)
click to toggle source
# 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 @message = config.message @topic_arn = config.topic_arn @num_retries = config.num_retries || 3 end
Public Instance Methods
alert(record)
click to toggle source
# File lib/alerty/plugin/amazon_sns.rb, line 25 def alert(record) subject = get_subject(record) message = get_message(record) 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
Private Instance Methods
expand_placeholder(str, record)
click to toggle source
# File lib/alerty/plugin/amazon_sns.rb, line 61 def expand_placeholder(str, record) replaced = str.gsub('${command}', record[:command]) replaced.gsub!('${hostname}', record[:hostname]) replaced.gsub!('${output}', record[:output]) replaced end
get_message(record)
click to toggle source
# File lib/alerty/plugin/amazon_sns.rb, line 45 def get_message(record) message = @message.nil? ? record[:output] : expand_placeholder(@message, record) message = ' ' if message.empty? # SNS constraint, SNS errors if message is empty message end
get_subject(record)
click to toggle source
# File lib/alerty/plugin/amazon_sns.rb, line 51 def get_subject(record) subject = expand_placeholder(@subject, record) subject = subject[0..98] # SNS constraint, must be less than 100 character long end
guess_region(topic_arn)
click to toggle source
# File lib/alerty/plugin/amazon_sns.rb, line 56 def guess_region(topic_arn) # arn:aws:sns:ap-northeast-1:<account_id>:<topic_name> topic_arn.split(':')[3] end