class NotificationClass
Wrapper class to notify stakeholders
Public Instance Methods
notify(event_level:, event_message:, email_to: nil, email_from: nil, signature: nil, webhookurl: nil, subjecttype: nil)
click to toggle source
# File lib/miq_utilities/notification.rb, line 19 def notify(event_level:, event_message:, email_to: nil, email_from: nil, signature: nil, webhookurl: nil, subjecttype: nil) @logger = LoggingClass.new(self.class.to_s) request_or_vm = $evm.root.attributes['miq_provision_id'] || $evm.root.attributes['vm'] user = $evm.root.attributes['userid'] userid = $evm.root['user'].attributes['userid'] message = "Request ID/VM Name:<#{request_or_vm}>\n User:<#{user}> ID:<#{userid}>\n" + event_message signature ||= 'ManageIQ' case event_level.upcase when 'INFO' send_slack_message(message: message, webhookurl: webhookurl) when 'WARN', 'WARNING' subject = 'ManageIQ Warning' send_slack_message(message: message, webhookurl: webhookurl) if $evm.nil? @logger.log(level: 'warn', message: 'The $evm object is null. Unable to send email notification.') else send_email(message: message, subject: subject, from_email: email_from, signature: signature, to_email: email_to) end when 'ERR', 'ERROR' subject = 'ManageIQ Error' send_slack_message(message: message, webhookurl: webhookurl) if $evm.nil? @logger.log(level: 'warn', message: 'The $evm object is null. Unable to send email or on-screen notifications.') else on_screen_message(level: event_level, message: message, type: subjecttype) send_email(message: message, subject: subject, from_email: email_from, signature: signature, to_email: email_to) end when 'NOTE' if $evm.nil? @logger.log(level: 'warn', message: 'The $evm object is null. Unable to send on-screen notification.') else on_screen_message(level: event_level, message: message, type: subjecttype) end end rescue => err raise("<#{err}>") end
on_screen_message(level:, message:, subject: nil, type: nil)
click to toggle source
# File lib/miq_utilities/notification.rb, line 85 def on_screen_message(level:, message:, subject: nil, type: nil) if subject.nil? vm = $evm.root['vm'] prov = $evm.root['miq_provision'] subject ||= vm unless vm.nil? subject ||= prov.miq_request unless prov.nil? prov.message = message unless prov.nil? end levelvalid = %w[info warn error].any? { |msglevel| level.upcase.include? msglevel.to_s.upcase } level = 'info' unless levelvalid begin if type.nil? $evm.create_notification(level: level, subject: subject, message: message) else $evm.create_notification(type: type, subject: subject) end rescue => err raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>") end end
send_email(message:, subject:, from_email:, signature:, to_email: nil)
click to toggle source
# File lib/miq_utilities/notification.rb, line 57 def send_email(message:, subject:, from_email:, signature:, to_email: nil) if to_email.nil? user = $evm.root['user'] to = user.attributes['email'] # Look at the Event Type in the Current Object or in the Root Object event_type = $evm.object['event'] || $evm.root['event_type'] end event_type ||= 'MIQ Event' to ||= to_email subject += " - #{event_type}" body = 'Hello, ' body += message body += 'Thank you,' body += signature $evm.execute(:send_email, to, from_email, subject, body) rescue => err raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>") end
send_slack_message(message:, webhookurl:)
click to toggle source
# File lib/miq_utilities/notification.rb, line 78 def send_slack_message(message:, webhookurl:) notifier = Slack::Notifier.new webhookurl notifier.ping message rescue => err raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>") end