Module: Motor::Alerts

Defined in:
lib/motor/alerts.rb,
lib/motor/alerts/scheduler.rb,
lib/motor/alerts/persistance.rb,
lib/motor/alerts/slack_sender.rb,
lib/motor/alerts/scheduled_alerts_cache.rb

Defined Under Namespace

Modules: Persistance, ScheduledAlertsCache, Scheduler, SlackSender

Class Method Summary collapse

Class Method Details

.send_alert(alert) ⇒ Object



7
8
9
10
11
12
13
# File 'lib/motor/alerts.rb', line 7

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

.send_email_alert(alert) ⇒ Object



15
16
17
18
19
20
21
22
23
# File 'lib/motor/alerts.rb', line 15

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

.send_query_email_alerts(alert, column_name) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/motor/alerts.rb', line 25

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

.send_slack_alert(alert) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/motor/alerts.rb', line 37

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