Sha256: d34f38a311278e943379a43c03d92d30ff1473ee56f3e3e57e5a3f401140354f

Contents?: true

Size: 1.41 KB

Versions: 44

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

module Motor
  module Alerts
    module_function

    def send_alert(alert)
      if alert.preferences[:adapter] == 'slack'
        send_slack_alert(alert)
      else
        send_email_alert(alert)
      end
    end

    def send_email_alert(alert)
      alert.to_emails.split(',').each do |email|
        if email.include?('@')
          Motor::AlertsMailer.alert_email(alert, email: email).deliver_now!
        else
          send_query_email_alerts(alert, email.gsub(/[{}]/, ''))
        end
      end
    end

    def send_query_email_alerts(alert, column_name)
      result = Queries::RunQuery.call(alert.query)

      column_index = result.columns.find_index { |c| c[:name] == column_name }

      emails = result.data.pluck(column_index).uniq

      emails.each do |email|
        Motor::AlertsMailer.alert_email(alert, email: email).deliver_now!
      end
    end

    def send_slack_alert(alert)
      slack_users = Slack::Client.load_users(limit: Slack::ITEMS_LIMIT)['members']

      alert.preferences[:slack_conversation_ids].each do |conversation_id|
        user = slack_users.find { |u| u['id'] == conversation_id }

        Motor::Alerts::SlackSender.call(alert, conversation_id, slack_user: user)
      end
    end
  end
end

require_relative './alerts/scheduler'
require_relative './alerts/scheduled_alerts_cache'
require_relative './alerts/persistance'
require_relative './alerts/slack_sender'

Version data entries

44 entries across 44 versions & 5 rubygems

Version Path
motor-admin-0.4.36 lib/motor/alerts.rb
motor-admin-0.4.35 lib/motor/alerts.rb
motor-admin-0.4.34 lib/motor/alerts.rb
motor-admin-0.4.33 lib/motor/alerts.rb
motor-admin-0.4.32 lib/motor/alerts.rb
motor-admin-0.4.31 lib/motor/alerts.rb
motor-admin-0.4.30 lib/motor/alerts.rb
motor-admin-0.4.29 lib/motor/alerts.rb
motor-admin-0.4.28 lib/motor/alerts.rb
motor-admin-0.4.27 lib/motor/alerts.rb
motor-admin-unosquare-0.4.28 lib/motor/alerts.rb
motor-admin-unosquare-0.4.27 lib/motor/alerts.rb
motor-admin-pz-0.4.26 lib/motor/alerts.rb
motor-admin-0.4.26 lib/motor/alerts.rb
motor-admin-0.4.25 lib/motor/alerts.rb
motor-admin-0.4.24 lib/motor/alerts.rb
motor-admin-0.4.23 lib/motor/alerts.rb
motor-admin-pz-0.4.22 lib/motor/alerts.rb
motor-admin-0.4.22 lib/motor/alerts.rb
motor-admin-pz-0.4.21 lib/motor/alerts.rb