* feat(assist): added default metrics * feat(assist): added assist_ label to easy metrics sort * feat(assist): finished metrics template implementation (now available on /metrics) * feat(assist): removed unnecessary _ symbol from app name * feat(assist): integrated metrics to rest api and websockets handlers * feat(assist): fixed wrong naming issue * feat(assist): added connection type to some metrics * feat(assist): added url route parser for metrics stats
99 lines
No EOL
2.7 KiB
JavaScript
99 lines
No EOL
2.7 KiB
JavaScript
const client = require('prom-client')
|
|
|
|
// Create a Registry which registers the metrics
|
|
const register = new client.Registry()
|
|
register.setDefaultLabels({
|
|
app: 'assist'
|
|
})
|
|
|
|
// Enable the collection of default metrics
|
|
client.collectDefaultMetrics({ register })
|
|
|
|
// http metrics
|
|
|
|
const httpRequestDuration = new client.Histogram({
|
|
name: 'request_duration_seconds',
|
|
help: 'A histogram displaying the duration of each HTTP request in seconds.',
|
|
labelNames: ['method', 'route', 'code'],
|
|
buckets: [.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10, 25, 50, 100, 250, 500, 1000],
|
|
});
|
|
|
|
const RecordRequestDuration = function(method, route, code, duration) {
|
|
httpRequestDuration.observe({ method: method, route: route, code: code }, duration);
|
|
}
|
|
|
|
const httpTotalRequests = new client.Counter({
|
|
name: 'requests_total',
|
|
help: 'A counter displaying the number of all HTTP requests.',
|
|
});
|
|
|
|
const IncreaseTotalRequests = function () {
|
|
httpTotalRequests.inc();
|
|
}
|
|
|
|
// websocket metrics
|
|
|
|
const websocketTotalConnections = new client.Counter({
|
|
name: 'ws_connections_total',
|
|
help: 'A counter displaying the number of all ws connections',
|
|
labelNames: ['type'], // tab, agent
|
|
});
|
|
|
|
const IncreaseTotalWSConnections = function (type) {
|
|
websocketTotalConnections.inc({type: type});
|
|
}
|
|
|
|
const websocketOnlineConnections = new client.Gauge({
|
|
name: 'ws_connections_online',
|
|
help: 'A gauge displaying the number of online (active) connections',
|
|
labelNames: ['type'], // tab, agent
|
|
});
|
|
|
|
const IncreaseOnlineConnections = function (type) {
|
|
websocketOnlineConnections.inc({type: type});
|
|
}
|
|
|
|
const DecreaseOnlineConnections = function (type) {
|
|
websocketOnlineConnections.dec({type: type});
|
|
}
|
|
|
|
const websocketTotalRooms = new client.Counter({
|
|
name: 'ws_rooms_total',
|
|
help: 'A counter displaying the number of all rooms',
|
|
});
|
|
|
|
const IncreaseTotalRooms = function () {
|
|
websocketTotalRooms.inc();
|
|
}
|
|
|
|
const websocketOnlineRooms = new client.Gauge({
|
|
name: 'ws_rooms_online',
|
|
help: 'A gauge displaying the number of online (active) rooms',
|
|
});
|
|
|
|
const IncreaseOnlineRooms = function () {
|
|
websocketOnlineRooms.inc();
|
|
}
|
|
|
|
const DecreaseOnlineRooms = function () {
|
|
websocketOnlineRooms.dec();
|
|
}
|
|
|
|
register.registerMetric(httpRequestDuration);
|
|
register.registerMetric(httpTotalRequests);
|
|
register.registerMetric(websocketTotalConnections);
|
|
register.registerMetric(websocketOnlineConnections);
|
|
register.registerMetric(websocketTotalRooms);
|
|
register.registerMetric(websocketOnlineRooms);
|
|
|
|
module.exports = {
|
|
register,
|
|
RecordRequestDuration,
|
|
IncreaseTotalRequests,
|
|
IncreaseTotalWSConnections,
|
|
IncreaseOnlineConnections,
|
|
DecreaseOnlineConnections,
|
|
IncreaseTotalRooms,
|
|
IncreaseOnlineRooms,
|
|
DecreaseOnlineRooms,
|
|
} |