Module: Motor::Alerts::SlackSender
- Defined in:
- lib/motor/alerts/slack_sender.rb
Constant Summary collapse
- MARKDOWN_LINK_TRANSFORM_REGEXP =
/\[(.+?)\]\((.+?)\)/.freeze
- MARKDOWN_PATHS_TRANSFORM_REGEXP =
/\n\s*\#{1,5}\s*(.*)\n?/.freeze
- MARKDOWN_HEADING_TRANSFORM_REGEXP =
/\n\s*\#{1,5}\s*(.*)\n?/.freeze
- MARKDOWN_BOLD_TRANSFORM_REGEXP =
/[*_]{2}/.freeze
- DEFAULT_FILENAME =
'data.csv'
Class Method Summary collapse
- .build_alert_message(alert) ⇒ Object
- .build_query_link(alert) ⇒ Object
- .call(alert, conversation_id, slack_user: nil) ⇒ Object
- .generate_csv(query_result) ⇒ Object
- .load_data(alert, slack_user = nil) ⇒ Object
- .render_markdown(alert, query_result) ⇒ Object
Class Method Details
.build_alert_message(alert) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/motor/alerts/slack_sender.rb', line 34 def (alert) " \#{build_query_link(alert)}\n \#{alert.description}\n MARKDOWN\nend\n" |
.build_query_link(alert) ⇒ Object
41 42 43 44 45 |
# File 'lib/motor/alerts/slack_sender.rb', line 41 def build_query_link(alert) link = Motor::Admin.routes.url_helpers.motor_ui_query_url(alert.query_id, host: Motor.app_host) "*<#{link}|#{alert.name}>*" end |
.call(alert, conversation_id, slack_user: nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/motor/alerts/slack_sender.rb', line 15 def call(alert, conversation_id, slack_user: nil) query_result = load_data(alert, slack_user) if alert.query.preferences[:visualization] == 'markdown' text = [build_query_link(alert), render_markdown(alert, query_result)].join Slack::Client.(channel: conversation_id, as_user: slack_user.present?, text: text) else Slack::Client.(channel: conversation_id, as_user: slack_user.present?, text: (alert)) Slack::Client.send_file(channels: conversation_id, content: generate_csv(query_result), filename: DEFAULT_FILENAME) end end |
.generate_csv(query_result) ⇒ Object
59 60 61 62 63 |
# File 'lib/motor/alerts/slack_sender.rb', line 59 def generate_csv(query_result) rows = [query_result.columns.pluck(:name)] + query_result.data rows.map(&:to_csv).join end |
.load_data(alert, slack_user = nil) ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/motor/alerts/slack_sender.rb', line 65 def load_data(alert, slack_user = nil) if slack_user Queries::RunQuery.call(alert.query, variables_hash: { current_user_email: slack_user['email'] }) else Queries::RunQuery.call(alert.query) end end |
.render_markdown(alert, query_result) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/motor/alerts/slack_sender.rb', line 47 def render_markdown(alert, query_result) params = query_result.columns.pluck(:name).zip(query_result.data[0]).to_h.symbolize_keys markdown = ["\n", Mustache.render(alert.query.preferences[:visualization_options][:markdown], **params)].join markdown.gsub(/\((.*)\)/, "(http://#{Motor.app_host}\\1)") .gsub(MARKDOWN_LINK_TRANSFORM_REGEXP, '<\2|\1>') .gsub(MARKDOWN_HEADING_TRANSFORM_REGEXP, "\n\n*\\1*") .gsub(MARKDOWN_BOLD_TRANSFORM_REGEXP, '*') end |