目的
プロジェクトの課題が今週にどの程度更新され、そのうちどの程度が完了したか調べたい
プロジェクトを複数横断して、その週に更新されたチケットを集める
やってみた事
設定ファイルに記述されたプロジェクトで
その週に更新された課題を代表者のメールアドレスに送信する
送信されるレポートメールサンプル
代表者メールアドレスにその週に更新があったプロジェクト
とその課題がメール送信されます
▼ [PRJ_NAME] チケット 4件 更新 内完了 2件
[PRJ_NAME-10] 課題の概要
[PRJ_NAME-15] 課題の概要
[PRJ_NAME-22] 課題の概要
[PRJ_NAME-31] 課題の概要…
▼ [PRJ_NAME] チケット 3件 更新 内完了 0件
[PRJ_NAME-3] 課題の概要
[PRJ_NAME-11] 課題の概要
[PRJ_NAME-20] 課題の概要…
設定ファイル"config.ini"の記述例
Windowsのiniファイルの構文に従って設定ファイルを記述します
1234567891011 <span class="com"># 情報を取得するBACKLOGプロジェクトの名称(複数指定可)</span><span class="pun">[</span><span class="typ">ProjectName</span><span class="pun">]</span><span class="pln">project</span><span class="pun">:PROJECT</span><span class="pln">_1HOGE_PRJHUGAHUGA_SVCHOMUHOMU_AKMAWS_TESTNIFTY_ACTNIKONIKONIWEB_PUB_RELEASEUNIT-TANAKA</span>
123 <span class="com"># 代表者メールアドレス</span><span class="pun">[</span><span class="typ">ChiefAddress</span><span class="pun">]</span><span class="pln">address </span><span class="pun">=</span><span class="pln"> hogefoobar2015</span><span class="pln">@example</span><span class="pun">.</span><span class="pln">com</span>
1 |
<span class="com"> </span> |
プログラム本体
動作確認環境
- Python2.6.6
- backloglib(python)
https://code.google.com/p/backloglib/
設定ファイル
プログラムと同じディレクトリに配置の上
ファイル名をconfig.iniとしてください
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | # -*- coding: utf-8 -*- ##### ## FileName:report_mail_weekly.py ## Author:Ryo Tanaka ## Version:0.1.1 ## Date:2014/12/25 ## Usage:./report_mail_weekly.py ## Summary:更新が今週のBACKLOGのプロジェクトサマリをメール送信します ##### __author__ = 'tanaka' import math import datetime import backloglib import smtplib import ConfigParser from email.MIMEText import MIMEText from email.Header import Header from email.Utils import formatdate ############ # 設定項目 # ############ config_file = "config.ini" spacename = "スペースネームを記載 xxxx.backlog.jp の部分です" username = "API用ユーザネームを記載 APIリクエストに使うユーザ名" password = "API用ユーザパスワードを記載 APIリクエストに使うユーザのパスワード" smtpsvr = "メール送信サーバアドレス" port = 25 from_addr = 'メール送信元アドレスを記載' # # get_week_start その週の初めを取得します # @param today datetime.datetime.todayオブジェクト # @return week_start 週の初めの西暦(YYYYMMDD) # def get_week_start(today): week_start = today + datetime.timedelta(days = - week_start_offset) week_start = week_start.strftime( '%Y%m%d' ) return week_start # # get_week_end その週の終わりを取得します # @param today datetime.datetime.todayオブジェクト # @return week_end 週の終わりの西暦(YYYYMMDD) # def get_week_end(today): week_end = today + datetime.timedelta(days = week_end_offset) week_end = week_end.strftime( '%Y%m%d' ) return week_end # # create_message MIMETextを作成 # @param from_addr 送信元アドレス # @param to_addr 送信先アドレス # @param subject 件名 # @param body メール本文 # @param encoding 文字エンコーディング # @return msg MIMEText # def create_message(from_addr, to_addr, subject, body, encoding): msg = MIMEText(body, 'plain' , encoding) msg[ 'Subject' ] = Header(subject, encoding) msg[ 'From' ] = from_addr msg[ 'To' ] = to_addr msg[ 'Date' ] = formatdate(localtime = True ) msg[ 'X-Priority' ] = '1' return msg # # send_mail メール送信 # @param from_addr 送信元アドレス # @param to_addr 送信先アドレス # @param msg 送信するMIMEText # def send_mail(from_addr, to_addr, msg): smtp = smtplib.SMTP(smtpsvr, port) smtp.sendmail(from_addr, [to_addr], msg.as_string()) smtp.close() # # make_report 報告レポート作成 # @param project プロジェクト名 # @param summary 課題の概要 # @param issue 課題キー # @param total 課題数 # @param finish_total 完了した課題数 # @return rep 構築されたレポート # def make_report(project, issue, summary, total, finish_total): rep = u "▼ [" + project + u "]" + "\n" \ + u "チケット " + str (total) + u "件 更新 内完了 " + str (finish_total) + u "件" + "\n" \ + u "[" + issue + u "] " + summary + "\n" return rep # # append_report 報告レポート追記 # @param report 追記元レポート # @param issue 追記課題キー # @param summary 追記課題概要 # def append_report(report, issue, summary): rep = report + u "[" + issue + u "] " + summary + "\n" return rep # #### # # MAIN # # #### # if __name__ = = "__main__" : config = ConfigParser.SafeConfigParser() config.read( "./config.ini" ) projects = config.get( "ProjectName" , "project" ) projects = projects.splitlines() chief_addr = config.get( "ChiefAddress" , "address" ) today = datetime.datetime.today() week_start_offset = int ( str (today.weekday())) week_end_offset = 7 - week_start_offset week_start = get_week_start(today) week_end = get_week_end(today) compiled_report = "" backlog = backloglib.Backlog(spacename, username, password) for prj_index in range ( len (projects)): project = backlog.get_project(projects[prj_index]) report_subject = "【BACKLOG】" + project.key + "プロジェクト週次レポート" issues = backlog.find_issue({ 'projectId' :project. id , 'sort' : "DUE_DATE" , 'updated_on_min' :week_start, 'updated_on_max' :week_end, 'order' : 1 }) issues_finished = backlog.find_issue({ 'projectId' :project. id , 'statusId' : 4 , 'sort' : "CREATED" , 'updated_on_min' :week_start, 'updated_on_max' :week_end, 'order' : 1 }) total = len (issues) total_finished = len (issues_finished) if len (issues) < 1 : continue report = [ 0 for cnt in range ( len (projects))] for issue_index in range ( len (issues)): issue = backlog.get_issue(issues[issue_index]. id ) if issue_index = = 0 : rep_section = make_report(project.key, issues[issue_index].key, issues[issue_index].summary, total, total_finished) report[prj_index] = rep_section else : report[prj_index] = append_report(report[prj_index], issues[issue_index].key, issues[issue_index].summary) report[prj_index] = report[prj_index].encode( 'utf-8' ) compiled_report + = report[prj_index] + "\n" report = "".join( map ( str , report)) # 配列を結合 whole_msg = create_message(from_addr, chief_addr, report_subject, str (compiled_report), 'utf-8' ) send_mail(from_addr, chief_addr, whole_msg) exit( 0 ) |
config.iniサンプル
1 2 3 4 5 6 7 8 | # 情報を取得するBACKLOGプロジェクトの名称(複数指定可) [ProjectName] project:TEST1 TEST2 # 代表者メールアドレス [ChiefAddress] address = test @ test .com |
お詫び
2015/01/29 に上記ソースコードのメール送信部分にてエラーが起きてしまう部分を修正しました。
投稿者プロフィール
最新の投稿
AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
セキュリティ2021年7月14日ゼロデイ攻撃とは
セキュリティ2021年7月14日マルウェアとは
WAF2021年7月13日クロスサイトスクリプティングとは?