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

116 lines
3.7 KiB
JavaScript
Raw Normal View History

'use strict';
const logger = require('../logger');
const ClientMetrics = require('../client-metrics');
const joi = require('joi');
2016-11-11 15:46:59 +01:00
const { clientMetricsSchema, clientRegisterSchema } = require('./metrics-schema');
/*
* TODO:
* - always catch errors and always return a response to client!
* - clean up and document uri endpoint
* - always json response (middleware?)
* - fix failing tests
*/
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;
2016-11-11 15:46:59 +01:00
const metrics = new ClientMetrics(clientMetricsStore);
app.get('/client/seen-toggles', (req, res) => {
const seenAppToggles = metrics.getAppsWitToggles();
res.json(seenAppToggles);
2016-11-02 12:49:25 +01:00
});
2016-10-27 16:55:38 +02:00
2016-11-30 18:56:25 +01:00
app.get('/metrics/feature-toggles', (req, res) => {
2016-11-04 16:16:55 +01:00
res.json(metrics.getTogglesMetrics());
});
2016-11-02 12:49:25 +01:00
app.post('/client/metrics', (req, res) => {
2016-11-11 15:46:59 +01:00
const data = req.body;
const clientIp = req.ip;
2016-11-11 15:46:59 +01:00
joi.validate(data, clientMetricsSchema, (err, cleaned) => {
if (err) {
return res.status(400).json(err);
}
clientMetricsStore
.insert(cleaned)
.then(() => clientInstanceStore.insert({
appName: cleaned.appName,
instanceId: cleaned.instanceId,
clientIp,
}))
2016-11-04 16:16:55 +01:00
.catch(e => logger.error('Error inserting metrics data', e));
2016-11-11 15:46:59 +01:00
res.status(202).end();
});
});
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) {
2016-11-10 22:05:50 +01:00
return res.status(400).json(err);
}
clientStrategyStore
.insert(cleaned.appName, cleaned.strategies)
.then(() => clientInstanceStore.insert({
appName: cleaned.appName,
instanceId: cleaned.instanceId,
clientIp,
}))
2016-11-11 15:46:59 +01:00
.then(() => logger.info('New client registered!'))
.catch((error) => logger.error('Error registering client', error));
2016-11-11 15:46:59 +01:00
res.status(202).end();
});
2016-10-27 16:55:38 +02:00
});
2016-11-02 23:17:28 +01:00
app.get('/client/strategies', (req, res) => {
const appName = req.query.appName;
if(appName) {
clientStrategyStore.getByAppName(appName)
.then(data => res.json(data))
.catch(err => logger.error(err));
} else {
clientStrategyStore.getAll()
.then(data => res.json(data))
.catch(err => logger.error(err));
}
});
app.get('/client/applications/', (req, res) => {
clientInstanceStore.getApplications()
.then(apps => {
const applications = apps.map(({appName}) => ({
appName: appName,
links: {
appDetails: `/api/client/applications/${appName}`
}
}))
res.json({applications})
})
.catch(err => logger.error(err));
2016-11-02 23:17:28 +01:00
});
2016-11-04 23:02:55 +01:00
app.get('/client/applications/:appName', (req, res) => {
const appName = req.params.appName;
const seenToggles = metrics.getSeenTogglesByAppName(appName);
Promise.all([
clientInstanceStore.getByAppName(appName),
clientStrategyStore.getByAppName(appName)
])
.then(([instances, strategies]) => res.json({appName, instances, strategies, seenToggles}))
2016-11-11 15:46:59 +01:00
.catch(err => logger.error(err));
2016-11-04 23:02:55 +01:00
});
};