-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathapp.js
80 lines (70 loc) · 2.02 KB
/
app.js
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
'use strict'
var debug = require('debug')('slack-docker-notify')
var fs = require('fs')
var https = require('https')
var moment = require('moment')
var request = require('superagent')
var Docker = require('dockerode')
var DOCKER_HOST = process.env.DOCKER_HOST
var DOCKER_PORT = process.env.DOCKER_PORT
var DOCKER_TLS_VERIFY = process.env.DOCKER_TLS_VERIFY
var DOCKER_CERT_PATH = process.env.DOCKER_CERT_PATH
if (DOCKER_HOST && DOCKER_TLS_VERIFY && DOCKER_CERT_PATH) {
debug('starting http connect to docker at: %s', DOCKER_HOST)
let docker = new Docker({
host: DOCKER_HOST,
port: DOCKER_PORT,
ca: fs.readFileSync(DOCKER_CERT_PATH + '/ca.pem'),
cert: fs.readFileSync(DOCKER_CERT_PATH + '/cert.pem'),
key: fs.readFileSync(DOCKER_CERT_PATH + '/key.pem')
});
docker.getEvents(handleEvents)
}
else {
let docker = new Docker({socketPath: '/tmp/docker.sock'});
debug('starting unix socket connection to docker at: %s', '/tmp/docker.sock')
}
// util fns
function handleEvents(e, r) {
if (e) return console.log(e)
r.on('data', function(d) {
let event = d.toString()
event = JSON.parse(event)
sendEventToSlack(event)
})
}
function dissoc (obj, key) {
delete obj[key]
return obj
}
function formatDockerEvent(obj) {
let time = moment(obj.time * 1000).format("MMM Do h:mm a")
return `${time} => ${obj.status} ${obj.id}`
}
function makeBody(msg) {
return {
channel: "#notifications",
username: "dockerbot",
text: msg,
icon_emoji: ":ghost:"
}
}
function sendEventToSlack(obj) {
debug('sending event to slack')
let msg = formatDockerEvent(obj)
debug(msg)
let payload = makeBody(msg)
let url = process.env.SLACK_WEBHOOK_URL
if (!url) return debug('must set $SLACK_WEBHOOK_URL env var')
let opts = {
hostname: process.env.SLACK_WEBHOOK_URL,
method: 'POST',
}
request
.post(process.env.SLACK_WEBHOOK_URL)
.send(payload)
.set('Accept', 'application/json')
.end(function(err, res) {
debug('slack responded: %s %s', res.status, res.text)
})
}