Задач Jira напоминание
Как создать уведомление по электронной почте на заданный адрес группы, когда проблема открыта для 24/36/48 часов.
должно быть одно напоминание для любого из этих типов (24/36/48) , и если проблема вновь открыл счет должен быть перезапущен.
3 ответов
это лучше всего достигается через подписка.
сначала создайте фильтр поиска для каждого типа (24h, 36h и т. д.). Примечание: На данный момент мы должны быть немного более точными о том, что вы подразумеваете под "24h open". Я предполагаю, что вы заботитесь о проблемах, которые не назначены надолго.
Итак, чтобы отфильтровать эти проблемы, вы можете использовать такой фильтр:
created <= -24h and status = Open and assignee is null
Если вы хотите, чтобы проблемы, которые не были затронуты в течение 24 часов, использовали "обновлено" вместо приведенный выше пример. Нажмите здесь о том, как использовать язык запросов Jira.
сохраните фильтр со значимым именем (например, "24h open").
теперь в разделе Проблемы - > управление фильтрами есть столбец "подписки", где вы можете подписаться на этот фильтр самостоятельно или любой группой Jira. Просто используйте Расписание ежедневно и интервал один раз в день, выберите удобное время и там вы идете.
используйте тот же метод для повторного открытия проблем, но измените фильтр запрос:
status = Reopened AND updated <= -24h
после того, как лот поиска я решил это так:
- создано настраиваемое поле под названием "открыть с" - поле "Дата и время" для хранения времени открытия проблемы.
- создано настраиваемое поле под названием "Уведомление" - текстовое поле только для чтения.
- С помощью Jira Scripting Suite, я создал пост-функцию и разместил ее на каждом переходе в состояние "открыть". Это вопрос открытия время.
код:
from com.atlassian.jira import ComponentManager
from datetime import datetime
opend_since_field = "customfield_10001"
# get opened since custom field:
cfm = ComponentManager.getInstance().getCustomFieldManager()
# get current time
currentTime = datetime.today()
# save current time
issue.setCustomFieldValue(cfm.getCustomFieldObject(opend_since_field),currentTime)
- Я создал новый фильтр, чтобы получить список проблем, которые открыты более 24 часов:
сайт jql:
project = XXX AND status= Open ORDER BY updated ASC, key DESC
- наконец - я использовал Jira удаленный API - the XML-RPC метод для написания скрипта python, который планируется запускать каждые 5 минут. Сценарий считывает все выданные из фильтра, вытаскивает все из них, которые имеют статус "Open" для более чем 24h / 36h / 48h, отправьте напоминание по электронной почте и отметьте их как уведомление, поэтому будет отправлено только одно напоминание каждого типа.
код python:
#!/usr/bin/python
# Refer to the XML-RPC Javadoc to see what calls are available:
# http://docs.atlassian.com/software/jira/docs/api/rpc-jira-plugin/latest/com/atlassian/jira/rpc/xmlrpc/XmlRpcService.html
# /home/issues_reminder.py
import xmlrpclib
import time
from time import mktime
from datetime import datetime
from datetime import timedelta
import smtplib,email
from smtplib import SMTP
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
# Jira connction info
server = 'https://your.jira.com/rpc/xmlrpc'
user = 'user'
password = 'password'
filter = '10302' # Filter ID
# Email definitions
smtpserver = 'mail.server.com'
fromAddr = 'support@your.jira.com'
mail_user = 'jira_admin@your.domain.com'
mail_password = 'password'
toAddr = 'support@your.domain.com'
mysubject = "hrs Issue notification!!!"
opend_since_field = "customfield_10101"
COMMASPACE = ', '
def email_issue(issue,esc_time):
# create html email
subject = '['+issue+'] '+esc_time+mysubject
html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '
html +='"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">'
html +='<body style="font-size:12px;font-family:Verdana">'
html +='<p align="center"><img src="your_logo.jpg" alt="logo" height="43" width="198"></p> '
html +='<p> The issue ['+issue+'] is open for over '+esc_time+' hours.</p>'
html +='<p> A link to view the issue: https://your.jira.com/browse/'+issue+'.</p>'
html +='<BR><p> This is an automated email sent from Jira.</p>'
html +='</body></html>'
emailMsg = email.MIMEMultipart.MIMEMultipart('alternative')
emailMsg['Subject'] = subject
emailMsg['From'] = fromAddr
emailMsg['To'] = toAddr
emailMsg.attach(MIMEText(html, 'html'))
# Send the email
emailserver = SMTP(smtpserver) # ip or domain name of smtp server
emailserver.login(mail_user, mail_password)
emailserver.sendmail(fromAddr, [toAddr], emailMsg.as_string())
emailserver.quit()
return
s = xmlrpclib.ServerProxy(server)
auth = s.jira1.login(user, password)
esc12List = []
esc24List = []
esc48List = []
issues = s.jira1.getIssuesFromFilter(auth, filter)
print "Modifying issue..."
for issue in issues:
creation = 0;
# get open since time
for customFields in issue['customFieldValues']:
if customFields['customfieldId'] == opend_since_field :
print "found field!"+ customFields['values']
creation = customFields['values']
if (creation == 0):
creation = issue['created']
print "field not found"
creationTime = datetime.fromtimestamp(mktime(time.strptime(creation, '%d/%b/%y %I:%M %p')))
currentTime = datetime.fromtimestamp(mktime(time.gmtime()))
delta = currentTime - creationTime
esc12 = timedelta(hours=12)
esc24 = timedelta(hours=24)
esc48 = timedelta(hours=48)
print "\nchecking issue "+issue['key']
if (delta < esc12):
print "less than 12 hours"
print "not updating"
continue
if (delta < esc24):
print "less than 24 hours"
for customFields in issue['customFieldValues']:
if customFields['customfieldId'] == 'customfield_10412':
if customFields['values'] == '12h':
print "not updating"
break
else:
print "updating !!!"
s.jira1.updateIssue(auth, issue['key'], {"customfield_10412": ["12h"]})
esc12List.append(issue['key'])
break
continue
if (delta < esc48):
print "less than 48 hours"
for customFields in issue['customFieldValues']:
if customFields['customfieldId'] == 'customfield_10412':
if customFields['values'] == '24h':
print "not updating"
break
else:
print "updating !!!"
s.jira1.updateIssue(auth, issue['key'], {"customfield_10412": ["24h"]})
esc24List.append(issue['key'])
break
continue
print "more than 48 hours"
for customFields in issue['customFieldValues']:
if customFields['customfieldId'] == 'customfield_10412':
if customFields['values'] == '48h':
print "not updating"
break
else:
print "updating !!!"
s.jira1.updateIssue(auth, issue['key'], {"customfield_10412": ["48h"]})
esc48List.append(issue['key'])
break
for key in esc12List:
email_issue(key,'12')
for key in esc24List:
email_issue(key,'24')
for key in esc48List:
email_issue(key,'48')
основные плюсы этого метода в том, что он очень настраиваемый, и, сохраняя данные в настраиваемых полях, легко создавать фильтры и отчеты, чтобы показать проблемы, которые были открыты в течение длительного времени.
Я в целом согласен с подходом коф, но последние версии плагинов Jira Плагин Автоматизации и плагин автоматизации PDF включить для его дальнейшего улучшения.
Итак, вы определяете и обновляете настраиваемое поле сценария, как написано выше. Вы создаете сохраненный фильтр с запросом JQL, как написано выше.
(самое интересное начинается здесь.)
вы создали новый правила автоматизации С Плагин Автоматизации:
определите триггер на основе выражения CRON в соответствии с вашим предпочтительным расписанием (например, каждые 5 минут)
выберите действие " отправить PDF "для выполнения, выберите шаблон PDF (если достаточно простого списка проблем, используйте шаблон" навигатор проблем") и введите адреса электронной почты для ping.
преимущества этого над вашим первоначальным решением:
Это более ремонтопригодно: это все плагин на основе, и все удовольствие происходит внутри JIRA. Никаких внешних зависимостей,никаких сценариев.
формат PDF позволяет лучше форматировать и визуализировать возможности (диаграммы!), чем простая ссылка.
отказ от ответственности:я разработчик этого платного дополнения JIRA.