| 135 | }; |
| 136 | |
| 137 | var handleCodePipeline = function(event, context) { |
| 138 | var subject = "AWS CodePipeline Notification"; |
| 139 | var timestamp = (new Date(event.Records[0].Sns.Timestamp)).getTime()/1000; |
| 140 | var snsSubject = event.Records[0].Sns.Subject; |
| 141 | var message; |
| 142 | var fields = []; |
| 143 | var color = "warning"; |
| 144 | var changeType = ""; |
| 145 | |
| 146 | try { |
| 147 | message = JSON.parse(event.Records[0].Sns.Message); |
| 148 | detailType = message['detail-type']; |
| 149 | |
| 150 | if(detailType === "CodePipeline Pipeline Execution State Change"){ |
| 151 | changeType = ""; |
| 152 | } else if(detailType === "CodePipeline Stage Execution State Change"){ |
| 153 | changeType = "STAGE " + message.detail.stage; |
| 154 | } else if(detailType === "CodePipeline Action Execution State Change"){ |
| 155 | changeType = "ACTION"; |
| 156 | } |
| 157 | |
| 158 | if(message.detail.state === "SUCCEEDED"){ |
| 159 | color = "good"; |
| 160 | } else if(message.detail.state === "FAILED"){ |
| 161 | color = "danger"; |
| 162 | } |
| 163 | header = message.detail.state + ": CodePipeline " + changeType; |
| 164 | fields.push({ "title": "Message", "value": header, "short": false }); |
| 165 | fields.push({ "title": "Pipeline", "value": message.detail.pipeline, "short": true }); |
| 166 | fields.push({ "title": "Region", "value": message.region, "short": true }); |
| 167 | fields.push({ |
| 168 | "title": "Status Link", |
| 169 | "value": "https://console.aws.amazon.com/codepipeline/home?region=" + message.region + "#/view/" + message.detail.pipeline, |
| 170 | "short": false |
| 171 | }); |
| 172 | } |
| 173 | catch(e) { |
| 174 | color = "good"; |
| 175 | message = event.Records[0].Sns.Message; |
| 176 | header = message.detail.state + ": CodePipeline " + message.detail.pipeline; |
| 177 | fields.push({ "title": "Message", "value": header, "short": false }); |
| 178 | fields.push({ "title": "Detail", "value": message, "short": false }); |
| 179 | } |
| 180 | |
| 181 | |
| 182 | var slackMessage = { |
| 183 | text: "*" + subject + "*", |
| 184 | attachments: [ |
| 185 | { |
| 186 | "color": color, |
| 187 | "fields": fields, |
| 188 | "ts": timestamp |
| 189 | } |
| 190 | ] |
| 191 | }; |
| 192 | |
| 193 | return _.merge(slackMessage, baseSlackMessage); |
| 194 | }; |