8

問題が24/36/48時間開いているときに、事前定義されたメールグループに電子メールで通知を作成する方法。

これらのタイプ(24/36/48)のいずれかに対して1つのリマインダーがあり、問題が再度開かれた場合は、カウントを再開する必要があります。

4

3 に答える 3

2

たくさんの検索の後、私はそれを次のように解決しました:

  • 「Opensince」というカスタムフィールドを作成しました。これは、問題が開かれた時刻を保持する「日時」フィールドです。
  • 「通知」と呼ばれるカスタムフィールドを作成しました。これは読み取り専用のテキストフィールドです。
  • 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を使用しました。XML-RPCメソッドを使用して、5分ごとに実行するようにスケジュールされたPythonスクリプトを記述しました。スクリプトは、フィルターから発行されたものをすべて読み取り、24時間/36時間/48時間以上「オープン」ステータスのすべてをプルし、リマインダーメールを送信し、通知済みとしてマークするため、各タイプのリマインダーは1つだけ送信されます。 。

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')

この方法の主な長所は、高度にカスタマイズ可能であり、データをカスタムフィールドに保存することで、長い間開かれていた問題を示すフィルターやレポートを簡単に作成できることです。

于 2012-07-18T08:10:21.107 に答える
2

これは、サブスクリプションを介して最もよく達成されます。

まず、タイプごと(24時間、36時間など)の検索フィルターを作成します。注:この時点で、「24時間オープン」の意味についてもう少し正確にする必要があります。私はあなたが長い間割り当てられていない問題を気にかけていると思います。

したがって、この問題を除外するには、次のようなフィルターを使用できます。

created <= -24h and status = Open and assignee is null

24時間触れられていない問題が必要な場合は、上記の例で作成したものではなく、「更新済み」を使用してください。Jiraクエリ言語の使用方法については、ここをクリックしてください。

意味のある名前(「24hopen」など)でフィルターを保存します。

[Issues]-> [Manage Filters]の下に、自分自身または任意のJiraグループでこのフィルターをサブスクライブできる[subscriptions]列があります。毎日のスケジュールと1日1回の間隔を使用し、都合の良い時間を選択してください。

再開された問題に対して同じ手法を使用しますが、フィルタークエリを次のように変更します。

status = Reopened AND updated <= -24h
于 2012-07-16T14:16:14.057 に答える
2

私は一般的にKufのアプローチに同意しますが、最近のJIRAプラグインリリースのAutomationプラグインPDF Automationプラグインにより、さらに拡張することができます。

したがって、上記のように、スクリプト化されたカスタムフィールドを定義および更新します。上記のように、JQLクエリを使用して保存済みフィルターを作成します。

(興味深い部分はここから始まります。)

Automationプラグインを使用して新しい自動化ルールを設定します。

  1. 希望するスケジュールに一致するようにCRON式ベースのトリガーを定義します(たとえば、5分ごと)

  2. 実行する「PDFの送信」アクションを選択し、PDFテンプレートを選択して(単純な問題リストで十分な場合は、「問題ナビゲーター」テンプレートを使用)、pingする電子メールアドレスを入力します。

元のソリューションに対するこれの利点:

  1. それはより保守可能です:それはすべてプラグインベースであり、すべての楽しみはJIRAの内部で起こります。外部依存関係はなく、維持するスクリプトもありません。

  2. PDF形式では、単純な問題のリンクよりも優れた書式設定と視覚化の可能性(チャート!)が可能です。

免責事項:私はこの有料のJIRAアドオンの開発者です。

于 2014-08-27T09:48:27.627 に答える