-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathserver.js
62 lines (53 loc) · 1.88 KB
/
server.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
import './env.js'
import './jobs/index.js'
import transcript from './api/transcript.js'
import { getTotalHosts, getOpenHosts, getCurrentlyActiveUsers } from "./api/state.js";
import express from 'express'
import responseTime from 'response-time'
import bugsnag from './bugsnag.js'
import metrics from './metrics.js'
import routes from './routes.js'
const app = express()
app.use(bugsnag().requestHandler)
app.use(express.json())
app.use(express.urlencoded({extended: true}))
app.use(responseTime(function (req, res, time) {
app.use(express.static('public'))
app.use(bugsnag().errorHandler)
const stat = (req.method + req.url.split('?')[0]).toLowerCase()
.replace(/[:.]/g, '')
.replace(/\//g, '_')
const httpCode = res.statusCode
const timingStatKey = `http.response.${stat}`
const codeStatKey = `http.response.${stat}.${httpCode}`
metrics.timing(timingStatKey, time)
metrics.increment(codeStatKey, 1)
}))
app.use(responseTime(function (req, res, time) {
const stat = (req.method + req.url.split('?')[0]).toLowerCase()
.replace(/[:.]/g, '')
.replace(/\//g, '_')
const httpCode = res.statusCode
const timingStatKey = `http.response.${stat}`
const codeStatKey = `http.response.${stat}.${httpCode}`
metrics.timing(timingStatKey, time)
metrics.increment(codeStatKey, 1)
}))
app.get('/ping', (req, res) => {
res.send('pong!')
})
// create endpoints for all files in the /api directory
routes(app)
const port = process.env.PORT || 0
const listener = app.listen(port, () => {
console.log(transcript('startup', {port: listener.address().port}))
})
// Spit out global metrics every 1s
setInterval(async () => {
const total = await getTotalHosts()
const open = await getOpenHosts()
const active_users = await getCurrentlyActiveUsers();
metrics.gauge("hosts.open", open)
metrics.gauge("hosts.total", total)
metrics.gauge("app.active_users", active_users);
}, 1000 * 60);