Skip to content

Commit

Permalink
additional metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
mnaamani committed Jul 25, 2023
1 parent 7af5b4a commit ace9482
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 11 deletions.
32 changes: 25 additions & 7 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,21 @@ export const metrics = {
register_failure_user: new prom.Counter({
name: 'register_failure_user',
help: 'Failure due user input.',
labelNames: ['code'],
}),
register_failure_server: new prom.Counter({
name: 'register_failure_server',
help: 'Failure due to internal server error.',
labelNames: ['code', 'reason'],
}),
register_attempt: new prom.Counter({
name: 'register_attempt',
help: 'Total registration attempts.',
}),
response_time: new prom.Histogram({
name: 'register_response',
help: 'response time',
}),
}

const app = express()
Expand Down Expand Up @@ -96,20 +102,27 @@ app.post('/register', async (req, res) => {
res.status(500).send({
error: 'NodeNotReady',
})
metrics.register_failure_server.inc(1)
metrics.register_failure_server.inc(
{ code: 500, reason: 'still_syncing' },
1
)
return
}

const callback = (result: AnyJson, statusCode: number) => {
processingRequest.unlock()
res.setHeader('Content-Type', 'application/json')
res.status(statusCode).send(result)
const { error } = result as any
if (statusCode >= 500) {
metrics.register_failure_server.inc(1)
metrics.register_failure_server.inc(
{ code: statusCode, reason: error },
1
)
} else if (statusCode >= 400) {
metrics.register_failure_user.inc(1)
} else if (statusCode == 200) {
metrics.register_success.inc(1)
metrics.register_failure_user.inc({ code: statusCode }, 1)
} else {
metrics.register_success.inc({ code: statusCode }, 1)
}
}

Expand All @@ -129,6 +142,7 @@ app.post('/register', async (req, res) => {
}

processingRequest.lock(async () => {
const end = metrics.response_time.startTimer()
try {
await register(
req.ip,
Expand All @@ -147,8 +161,12 @@ app.post('/register', async (req, res) => {
processingRequest.unlock()
log(err)
res.status(500).end()
metrics.register_failure_server.inc(1)
metrics.register_failure_server.inc(
{ code: 500, reason: 'internal_error' },
1
)
}
metrics.response_time.observe(end())
})
})

Expand All @@ -165,4 +183,4 @@ prometheus.get('/metrics', async (request, response) => {

prometheus.listen(PROMETHEUS_PORT, () => {
log(`prometheus metrics at http://localhost:${PROMETHEUS_PORT}/metrics`)
})
})
3 changes: 0 additions & 3 deletions src/metrics.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/register.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ new prom.Gauge({
collect: async function () {
const info = await globalLimiter.wouldLimitWithInfo(GLOBAL_REGISTER_ID)
this.set(info.actionsRemaining)
}
},
})

// per ip rate limit to apply after input validation checks
Expand Down

0 comments on commit ace9482

Please sign in to comment.