server/lib/minicron/alert/email.rb
require 'mail'
module Minicron
module Alert
# Allows the sending of email alerts
class Email
# Configure the mail client
def initialize
Mail.defaults do
delivery_method(
:smtp,
address: Minicron.config['alerts']['email']['smtp']['address'],
port: Minicron.config['alerts']['email']['smtp']['port'],
domain: Minicron.config['alerts']['email']['smtp']['domain'],
user_name: Minicron.config['alerts']['email']['smtp']['user_name'],
password: Minicron.config['alerts']['email']['smtp']['password'],
authentication: Minicron.config['alerts']['email']['smtp']['authentication'],
enable_starttls_auto: Minicron.config['alerts']['email']['smtp']['enable_starttls_auto']
)
end
end
# Return the message for an alert
#
# @option options [Minicron::Hub::Model::Job] job a job instance
# @option options [String] kind 'fail' or 'miss'
# @option options [Integer, nil] schedule_id only applies to 'miss' alerts
# @option options [Integer, nil] execution_id only used by 'fail' alerts
# @option options [Integer] job_id used to look up the job name for the alert message
# @option options [Time] expected_at when the schedule was expected to execute
# @option options [String] medium the medium to send the alert via
def get_message(options = {})
case options[:kind]
when 'miss'
"Job ##{options[:job_id]} '#{options[:job].name}' failed to execute at its expected time: #{options[:expected_at]}."
when 'fail'
"Execution ##{options[:execution_id]} of Job ##{options[:job_id]} '#{options[:job].name}' failed."
else
raise Minicron::ArgumentError, "The kind '#{options[:kind]} is not supported!"
end
end
# Send an email alert
#
# @param from [String]
# @param to [String]
# @param subject [String]
# @param message [String]
def send(from, to, subject, message)
Mail.deliver do
to to
from from
subject subject
body message
end
end
end
end
end