1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/lib/routes/metrics.js

104 lines
3.1 KiB
JavaScript
Raw Normal View History

'use strict';
const logger = require('../logger');
const ClientMetrics = require('../client-metrics');
2016-11-04 16:19:31 +01:00
const ClientMetricsService = require('../client-metrics/service');
const joi = require('joi');
2016-10-27 16:55:38 +02:00
module.exports = function (app, config) {
2016-11-04 23:02:55 +01:00
const {
2016-11-05 13:36:44 +01:00
clientMetricsStore,
clientStrategyStore,
clientInstanceStore,
} = config.stores;
const metrics = new ClientMetrics();
2016-11-05 13:36:44 +01:00
const service = new ClientMetricsService(clientMetricsStore);
2016-11-02 12:49:25 +01:00
service.on('metrics', (entries) => {
2016-11-04 16:16:55 +01:00
entries.forEach((m) => {
metrics.addPayload(m.metrics);
});
2016-11-02 12:49:25 +01:00
});
2016-11-04 16:16:55 +01:00
app.get('/metrics', (req, res) => {
res.json(metrics.getMetricsOverview());
2016-11-02 12:49:25 +01:00
});
2016-10-27 16:55:38 +02:00
2016-11-05 11:50:34 +01:00
app.get('/metrics/features', (req, res) => {
2016-11-04 16:16:55 +01:00
res.json(metrics.getTogglesMetrics());
});
const clientMetricsSchema = joi.object().keys({
appName: joi.string().required(),
instanceId: joi.string().required(),
bucket: joi.object().required()
.keys({
start: joi.date().required(),
stop: joi.date().required(),
toggles: joi.object()
.required()
.unknown()
.min(1)
.max(1000),
}),
});
2016-11-02 12:49:25 +01:00
app.post('/client/metrics', (req, res) => {
try {
2016-11-02 12:49:25 +01:00
const data = typeof req.body === 'string' ? JSON.parse(req.body) : req.body;
const result = joi.validate(data, clientMetricsSchema);
if (result.error) {
throw result.error;
}
2016-11-04 16:16:55 +01:00
service
.insert(result.value)
2016-11-04 16:16:55 +01:00
.catch(e => logger.error('Error inserting metrics data', e));
} catch (e) {
2016-11-02 12:49:25 +01:00
logger.error('Error receiving metrics', e);
}
res.end();
});
2016-10-27 16:55:38 +02:00
const clientRegisterSchema = joi.object().keys({
appName: joi.string().required(),
instanceId: joi.string().required(),
strategies: joi.array()
.required()
.items(joi.string(), joi.any().strip()),
started: joi.date().required(),
interval: joi.number().required(),
});
2016-11-02 12:49:25 +01:00
app.post('/client/register', (req, res) => {
2016-11-04 23:02:55 +01:00
const data = req.body;
2016-11-05 12:42:58 +01:00
const clientIp = req.ip;
2016-11-02 12:49:25 +01:00
joi.validate(data, clientRegisterSchema, (err, cleaned) => {
if (err) {
return res.json(400, err);
}
clientStrategyStore.insert(cleaned.appName, cleaned.strategies)
.then(() => clientInstanceStore.insert({
appName: cleaned.appName,
instanceId: cleaned.instanceId,
clientIp,
}))
.then(() => console.log('new client registerd'))
.catch((error) => logger.error('Error registering client', error));
res.end();
});
2016-10-27 16:55:38 +02:00
});
2016-11-02 23:17:28 +01:00
app.get('/client/strategies', (req, res) => {
clientStrategyStore.getAll().then(data => res.json(data));
2016-11-02 23:17:28 +01:00
});
2016-11-04 23:02:55 +01:00
app.get('/client/instances', (req, res) => {
clientInstanceStore.getAll()
2016-11-04 23:02:55 +01:00
.then(data => res.json(data))
.catch(err => console.error(err));
});
};