require 'rcs-common/trace' require_release 'rcs-db/config' require_release 'rcs-db/alert' module RCS module Monitor class Mailer include RCS::Tracer def initialize @cached_rcpts = [] end def alert(subject, message, html: nil, binding: nil, short_message: nil) if short_messages? and short_message html = false message = short_message elsif binding html = true message = render_template(message, binding) end alert!(subject, message, html: html) end def alert!(subject, message, options = {}) if alert_users.empty? trace(:warn, "Ensure that at least one user in the ALERT group has a valid email") return end alert_users.each do |rcpt| result = RCS::DB::Alerting.__send__(:send_mail, rcpt, subject, message, options) return false unless result end end def alert_group ::Group.where(alert: true).first end def alert_users group = alert_group @cached_rcpts = group ? group.users.map(&:contact).select { |email| !email.to_s.empty? } : [] rescue Moped::Errors::ConnectionFailure, Moped::Errors::QueryFailure @cached_rcpts end def render_template(template, binding) template = ERB.new(File.new("#{__dir__}/#{template}.erb").read, nil, "%") template.result(binding) end def short_messages? RCS::DB::Config.instance.global['SHORT_EMAIL'] end end end end .