Уведомление JIRA по электронной почте, когда отработанное время журнала достигает бюджетного времени. По требованию

Я хотел бы знать, есть ли возможность отправить уведомление, когда отработанное время журнала достигает расчетного времени.

пример: Старт.

Оценка: Первоначальная оценка - 5 минут 5 м.

Осталось: Оставшаяся оценка - 5 минут 5 м

Зарегистрировано: затраченное время - не указано не указано

Когда я записываю время.

Оценка: Первоначальная оценка - 5 минут 5 м.

Осталось: Затраченное время - 4 минуты Оставшаяся оценка - 1 минута 1 мин.

Зарегистрировано: Затраченное время - 4 минуты Оставшаяся оценка - 1 минута 4 м

Мне нравится, когда JIRA отправляет уведомление до окончания 1 минуты или того, что я когда-либо устанавливал.

Прошу прощения за плохой английский.

Спасибо


person schwertfisch    schedule 10.05.2013    source источник


Ответы (1)


Я полагаю, вы хотели создать какое-то триггерное событие, когда зарегистрированная работа приближается к исходной оценке, но я не знаю, как вы могли бы сделать это в JIRA. Тем не менее, я знаю кое-что, что все еще может помочь вам решить вашу проблему.

Попробуйте использовать следующий отличный скрипт:

import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.properties.APKeys
import com.atlassian.jira.config.properties.ApplicationProperties
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.issue.worklog.Worklog
import com.atlassian.jira.jql.parser.DefaultJqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.mail.Email
import com.atlassian.mail.MailException
import com.atlassian.mail.MailFactory
import com.atlassian.mail.queue.SingleMailQueueItem
import com.atlassian.query.Query
import groovy.text.GStringTemplateEngine
import org.apache.log4j.Logger
import com.atlassian.core.util.DateUtils

def componentManager = ComponentManager.getInstance()
def worklogManager = componentManager.getWorklogManager()
def userUtil = componentManager.getUserUtil()
def user = userUtil.getUser('admin')
def searchProvider = componentManager.getSearchProvider()
def queryParser = new DefaultJqlQueryParser()
Logger log = Logger.getLogger('worklogNotification')

Query jql = queryParser.parseQuery('project = ABC and updated > startOfDay(-1d)')
SearchResults results = searchProvider.search(jql, user, PagerFilter.getUnlimitedFilter())
List issues = results.getIssues()
String emailFormat = 'HTML'
def mailServerManager = componentManager.getMailServerManager()
def mailServer = mailServerManager.getDefaultSMTPMailServer()
String defaultSubject = 'Logged work on JIRA issue %ISSUE% exceeds original estimate'
String body = ''
Map binding = [:]
String loggedWorkDiff = ''
String template = '''
Dear ${issue.assignee.displayName}, <br /><br />

Logged work on issue <a href="$baseUrl/browse/${issue.key}">${issue.key} (${issue.summary})</a> exceeds original estimate ($loggedWorkDiff more than expected).<br />

*** This is an automatically generated email, you do not need to reply ***<br />
'''
GStringTemplateEngine engine = new GStringTemplateEngine()

ApplicationProperties applicationProperties = componentManager.getApplicationProperties()
binding.put("baseUrl", applicationProperties.getString(APKeys.JIRA_BASEURL))

if (mailServer && ! MailFactory.isSendingDisabled()) {
    for (Issue issue in issues) {
        if(issue.originalEstimate) {
            loggedWork = 0
            worklogs = worklogManager.getByIssue(issue)
            worklogs.each{Worklog worklog -> loggedWork += worklog.getTimeSpent()}
            if(loggedWork - issue.originalEstimate) {
                loggedWorkDiff = DateUtils.getDurationString(Math.round(loggedWork - issue.originalEstimate))
                email = new Email(issue.getAssigneeUser().getEmailAddress())
                email.setFrom(mailServer.getDefaultFrom())
                email.setSubject(defaultSubject.replace('%ISSUE%', issue.getKey()))
                email.setMimeType(emailFormat == "HTML" ? "text/html" : "text/plain")
                binding.put("issue", issue)
                binding.put('loggedWorkDiff', loggedWorkDiff)

                body = engine.createTemplate(template).make(binding).toString()
                email.setBody(body)
                try {
                    log.debug ("Sending mail to ${email.getTo()}")
                    log.debug ("with body ${email.getBody()}")
                    log.debug ("from template ${template}")
                    SingleMailQueueItem item = new SingleMailQueueItem(email);
                    ComponentAccessor.getMailQueue().addItem(item);
                }
                catch (MailException e) {
                    log.warn ("Error sending email", e)
                }
            }
        }
    }
}

Этот сценарий принимает задачи для проекта ABC, которые были обновлены в течение предыдущего дня (JQL: "project = ABC and updated > startOfDay(-1d)"), вычисляет разницу между зарегистрированной работой и предполагаемой работой и отправляет уведомление ответственному за задачу, если зарегистрированная работа превышает первоначальную оценку. .

Вы можете добавить этот скрипт в список сервисов JIRA (JIRA -> Администрирование -> Система -> Дополнительно -> Сервисы).

Имя: [любое имя]

Класс: com.onresolve.jira.groovy.GroovyService

Задержка: 1440

Входной файл: [путь к вашему скрипту на сервере]

Задержка: 1440

Обратите внимание, что вы укажете 1440 (мин) в качестве задержки обслуживания, что равно одному дню. Итак, скрипт будет выполняться один раз в сутки, отправляя уведомление исполнителям выдачи о превышении первоначальных смет.

Также обратите внимание, что для возможности запустите свой скрипт.

person altern    schedule 23.05.2013
comment
Спасибо, но мы используем OnDemand, и нет возможности добавлять сценарии в службы =( - person schwertfisch; 24.05.2013
comment
@Schwertfisch: OnDemand и автономная JIRA сильно различаются с точки зрения возможностей настройки. Упомяните OnDemand в своем вопросе, чтобы люди, которые будут отвечать на ваш вопрос, знали о ваших ограничениях по настройке. - person altern; 27.05.2013