-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
69 lines (55 loc) · 1.47 KB
/
index.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
const port = process.env.PORT || 3000
const upstream_uri = process.env.UPSTREAM_URI || 'http://worldclockapi.com/api/json/utc/now'
const service_name = process.env.SERVICE_NAME || 'test-1-v1'
const express = require('express')
const app = express()
const request = require('request-promise-native')
app.get('/', async(req, res) => {
const begin = Date.now()
// Do Bad Things
createIssues(req, res)
// Forward Headers for tracing
const headers = forwardTraceHeaders(req)
let up
try {
up = await request({
url: upstream_uri,
headers: headers
})
} catch (error) {
up = error
}
const timeSpent = (Date.now() - begin) / 1000 + "secs"
res.end(`${service_name} - ${timeSpent}\n${upstream_uri} -> ${up}`)
})
app.listen(port, () => {
console.log(`${service_name} listening on port ${port}!`)
})
function forwardTraceHeaders(req) {
incoming_headers = [
'x-request-id',
'x-b3-traceid',
'x-b3-spanid',
'x-b3-parentspanid',
'x-b3-sampled',
'x-b3-flags',
'x-ot-span-context',
'x-dev-user',
'fail'
]
const headers = {}
for (let h of incoming_headers) {
if (req.header(h))
headers[h] = req.header(h)
}
return headers
}
function createIssues(req, res) {
// Look at the "fail %" header to increase chance of failure
// Failures cascade, so this number shouldn't be set too high (under 0.3 is good)
const failPercent = Number(req.header('fail')) || 0
console.log(`failPercent: ${failPercent}`)
if (Math.random() < failPercent) {
res.status(500).end()
}
}