· 6 years ago · Mar 06, 2020, 03:18 AM
1function doGet() {
2
3 //TOKEN
4 var username = "{YOUR USERNAME HERE}";
5 var apiToken = "{YOUR JIRA TOKEN HERE}";
6 var basicToken = Utilities.formatString("%s:%s", username,apiToken);
7 var basicTokenEncoded = Utilities.base64Encode(basicToken, Utilities.Charset.UTF_8);
8 var headers = {
9 'Authorization' : Utilities.formatString("Basic %s", basicTokenEncoded)
10 };
11 var options = {
12 'headers' : headers
13};
14
15 //Config Sheet
16 var sheetHeaders = [
17 'Key',
18 'Summary',
19 'Assignee',
20 'Squad',
21 'Status',
22 'Environment',
23 'Fix Version',
24 'Request From Tribe',
25 'Request From',
26 'Github',
27 'Jira',
28 'Resolution',
29 'Note'
30 ];
31 var headerCount = sheetHeaders.length -1;
32
33 //========================================================
34
35 var ss = SpreadsheetApp.getActiveSpreadsheet();
36 var sheetName = "Master";
37 SpreadsheetApp.setActiveSheet(ss.getSheetByName(sheetName))
38 var newSheet = ss.getActiveSheet();
39
40 if(newSheet){
41 newSheet.clear();
42 }
43
44 var taskCount = 0;
45 var totalTasks = 1;
46 var rows = [],
47 data;
48
49 //Config API
50 var jql ="filter%3D%22Android%20Gate%20Keeper%20Reminder%22";
51 var maxResults ="50";
52 var startAt = 0;
53 var fields = "key,summary,assignee,status,resolution,created,updated,customfield_10014,customfield_10064,issuetype,customfield_10181,fixVersions,priority,customfield_10077,creator,customfield_10550,customfield_10067,customfield_10253";
54
55
56 while (taskCount < totalTasks){
57 var url=Utilities.formatString("https://tokopedia.atlassian.net/rest/api/2/search?jql=%s&maxResults=%s&fields=%s&startAt=%d",jql,maxResults,fields,taskCount);
58 var response = UrlFetchApp.fetch(url, options)
59 var dataAll = JSON.parse(response.getContentText());
60 var dataSet = dataAll.issues;
61
62 totalTasks = dataAll.total;
63
64 for (i = 0; i < dataSet.length; i++) {
65 data = dataSet[i];
66 var fixVersions = data.fields.fixVersions;
67 var releaseDate;
68 var quarter = "";
69 var fixVersionName = "undefined";
70 if(fixVersions.length>0){
71 fixVersionName = fixVersions[0].name;
72 releaseDate = new Date(fixVersions[0].releaseDate);
73 var releaseMonth = releaseDate.getMonth()+1;
74 var formattedMonth = Utilities.formatDate(releaseDate, 'America/New_York', 'MMMM');
75 var year = releaseDate.getYear();
76
77 switch(releaseMonth) {
78 case 1.0 :
79 case 2.0 :
80 case 3.0 : quarter = Utilities.formatString("%s %s", "Q1", year);break;
81 case 4.0 :
82 case 5.0 :
83 case 6.0 : quarter = Utilities.formatString("%s %s", "Q2", year);break;
84 case 7.0 :
85 case 8.0 :
86 case 9.0 :quarter = Utilities.formatString("%s %s", "Q3", year);break;
87 default : quarter = Utilities.formatString("%s %s", "Q4", year);break;
88 }
89
90 }
91 var fixVersionSample = data.fields.fixVersions.length>0? data.fields.fixVersions[0].name : "";
92 var isReleased = data.fields.fixVersions.length>0? data.fields.fixVersions[0].released : false;
93 var issueType = data.fields.issuetype.name;
94
95 var bugType = (data.fields.customfield_10550!= null && data.fields.customfield_10550.length>0)? data.fields.customfield_10550.join() : "Undefined";
96
97 var summary = data.fields.summary;
98 var requestFromTribe = data.fields.customfield_10077!=null?data.fields.customfield_10077.value : "";
99 var createdBy = data.fields.creator.name;
100 var statusName = data.fields.status.name;
101
102 var environment = data.fields.customfield_10253!= null? data.fields.customfield_10253.value : "";
103
104 var resolution = "Done";
105 if(statusName != "Done" && statusName != "PO Approved"){
106 resolution = "In Progress";
107 }
108
109 if (requestFromTribe == "[MB] Android" && issueType != "Bug"){
110 issueType = "Core";
111 } else if (issueType == "Story"){
112 issueType = "Task";
113 }
114
115 if(quarter != "Q4 2019"
116 && quarter != "Q3 2019" ){
117 var jiraURL = Utilities.formatString("%s%s", "https://tokopedia.atlassian.net/browse/", data.key)
118 var slackName = findSlackName(requestFromTribe);
119
120 rows.push([data.key,
121 summary,
122 data.fields.assignee!= null? data.fields.assignee.name : "",
123 data.fields.customfield_10181!= null? data.fields.customfield_10181.value : "", //Squad
124 statusName,
125 environment,
126 fixVersionSample,
127 requestFromTribe,
128 createdBy,
129 data.fields.customfield_10064, //Github Link
130 Utilities.formatString("%s%s", "https://tokopedia.atlassian.net/browse/", data.key), //Github Link
131 resolution
132 ]);
133
134 if(slackName != ""){
135 triggerSlackRequest("main","Hi "+ slackName+", Please ensure these tasks has been checked (feature and data tracking) and move your ticket to *PO Approved*\n " + jiraURL);
136 }
137 }
138 taskCount++;
139
140 }
141 }
142
143 triggerSlackRequest("main",":alert: Guys, Please take process these tickets at most by *11.00 on Friday* because we need to build app for release. :alert: ");
144
145 // ---- SHEET NAME
146
147 newSheet.getRange('A1:M1').setValues([sheetHeaders]).setFontWeight('bold');
148
149 dataRange = newSheet.getRange(2, 1, rows.length, headerCount);
150 dataRange.setValues(rows);
151}
152
153function triggerSlackRequest(channel, msg) {
154 var slackWebhook = "{SLACK WEBHOOK}";
155 var payload = { "channel": channel, "text": msg, "link_names": 1, "username": "lunchbot", "icon_emoji": ":hamburger:" };
156 var options = { "method": "post", "contentType": "application/json", "muteHttpExceptions": true, "payload": JSON.stringify(payload) };
157
158 Logger.log(UrlFetchApp.fetch(slackWebhook, options));
159}
160
161function findSlackName(requestFromSquad) {
162 var ss = SpreadsheetApp.getActiveSpreadsheet();
163 SpreadsheetApp.setActiveSheet(ss.getSheetByName("GateKeeper"))
164 var sheet = ss.getActiveSheet();
165 var rangeData = sheet.getDataRange();
166 var lastColumn = rangeData.getLastColumn();
167 var lastRow = rangeData.getLastRow();
168 var searchRange = sheet.getRange(2,2, lastRow-1, lastColumn-1);
169
170 var slackEmail = "";
171 var slackId = "";
172 for (j = 1; j < lastRow ; j++){
173 var cell = searchRange.getCell(j,1).getValue();
174 if (cell == requestFromSquad){
175 slackEmail = searchRange.getCell(j,3).getValue();
176 slackId = findSlackId(slackEmail);
177 break;
178 }
179 };
180
181 return Utilities.formatString("<@%s>", slackId);
182}
183
184function findSlackId(email){
185 var token = "{SLACK APP TOKEN}"
186 var url = "https://slack.com/api/users.lookupByEmail?"
187 var urlFormat = Utilities.formatString("%stoken=%s&email=%s", url, token, email) //Github Link
188 var options = { "method": "get"};
189 var response = UrlFetchApp.fetch(urlFormat, options)
190 var json = JSON.parse(response.getContentText());
191 if(json.user!= null && json.user.id!= null){
192 var slackId = json.user.id
193 return slackId;
194 }else{
195 return "";}
196}