Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Notify me when scriptrunner post function fails

ZubatyNos October 14, 2022

Hi folks,

is there a way for me to get a notification whenever e.g during a workflow transition one of my scriptrunner post function executions fails? A possible workaround I thought of would be to just surround the whole script in a try catch block and send an email whenever it fails, but I'd like that to be my last option.

Screenshot 2022-10-14 142806.png

Regards

 

 

1 answer

2 votes
Tom Lister
Community Champion
October 14, 2022

HI @ZubatyNos 

I have usually added a custom logger in the Jira log4j config to allow Scriptunner to log information separately.

Then in your script you can pick that up to create output in a file for analysis

Logger logit = Logger.getLogger("com.blah.scriptrunner")
logit.info("my trace message")

It's also possible to add email appenders in log4j but I'v not tried that on Jira.

Sending emails isn't too onerous, I have examples of that if you want.

Another option maybe creating a custom event https://support.atlassian.com/jira-cloud-administration/docs/add-a-custom-event/

The fire that event in your catch block e.g. https://community.atlassian.com/t5/Answers-Developer-Questions/is-there-a-simple-way-to-fire-an-event-using-groovy-script/qaq-p/522574

Tom Lister
Community Champion
October 14, 2022

import com.atlassian.jira.component.ComponentAccessor

import groovy.xml.MarkupBuilder
import com.atlassian.jira.mail.Email
import com.atlassian.jira.mail.settings.MailSettings
import com.atlassian.mail.MailException

import org.apache.log4j.Logger

Logger logit = Logger.getLogger("com.blah.eu.logging")


String emailAddress = "blah@blah.com"
String bodytext = buildHTMLBody( )

 

def title = " Jira & Confluence cloud migration."
//logit.info title
sendEmail(emailAddress, title, bodytext, logit)


String buildHTMLBody() {
def writer = new StringWriter()
def html = new MarkupBuilder(writer)
def greeting = "Hello "
html.html {
head {
title: "Jira & Confluence on Cloud"
}
body(id: "main") {
p {
mkp.yield greeting
}
p {
mkp.yield "This email is to confirm ... "
strong "log.blah.com"
mkp.yield " and "
strong "space.blah.com"
mkp.yield " sites to Atlassian Cloud."
br{}

}
}
}

return (writer.toString())
}

 

String sendEmail(String emailAddr, String subject, String body, Logger logit) {
// Stop emails being sent if the outgoing mail server gets disabled (useful if you start a script sending emails and need to stop it)
def mailSettings = ComponentAccessor.getComponent(MailSettings)
if (mailSettings?.send()?.disabled) {
logit.error "Your outgoing mail server has been disabled"

return "Your outgoing mail server has been disabled"
}

def mailServer = ComponentAccessor.mailServerManager.defaultSMTPMailServer
if (!mailServer) {
logit.error("Your mail server Object is Null, make sure to set the SMTP Mail Server Settings Correctly on your Server")
return "Failed to Send Mail. No SMTP Mail Server Defined"
}

def email = new Email(emailAddr)
//email.setCc("ch22.jung@samsung.com")
// email.setCc("omair.irshad@cheil.com")
email.setMimeType("text/html")
email.setSubject(subject)
email.setBody(body)
try {
mailServer.send(email)
logit.info("Mail sent")
//"Success"
} catch (MailException e) {
logit.error("Send mail failed with error: ${e.message}")
//" Failed to Send Mail, Check Logs for error")
}
}

Suggest an answer

Log in or Sign up to answer