mirror of
https://github.com/Unleash/unleash.git
synced 2024-12-28 00:06:53 +01:00
Merge pull request #243 from Unleash/add-sdk-version
Add support for sdkVersion in client registration
This commit is contained in:
commit
ee76f21a92
@ -1,6 +1,7 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
- Add sdkVersion in client registration
|
||||
- disable edit of built-in strategies
|
||||
|
||||
## 3.0.0-alpha.1
|
||||
|
@ -1,30 +1,5 @@
|
||||
# This document describes the client metrics endpoints
|
||||
|
||||
### Client registration
|
||||
|
||||
`POST: http://unleash.host.com/api/client/register`
|
||||
|
||||
Register a client instance with the unleash server. The client should send all fields specified.
|
||||
|
||||
```json
|
||||
{
|
||||
"appName": "appName",
|
||||
"instanceId": "instanceId",
|
||||
"strategies": ["default", "some-strategy-1"],
|
||||
"started": "2016-11-03T07:16:43.572Z",
|
||||
"interval": 10000,
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**Fields:**
|
||||
|
||||
* **appName** - Name of the application seen by unleash-server
|
||||
* **instanceId** - Instance id for this application (typically hostname, podId or similar)
|
||||
* **strategies** - List of strategies implemented by this application
|
||||
* **started** - When this client started. Should be reported as UTC time.
|
||||
* **interval** - At wich interval will this client be expected to send metrics?
|
||||
|
||||
### Send metrics
|
||||
|
||||
`POST http://unleash.host.com/api/client/metrics`
|
||||
|
28
docs/api/client/register-api.md
Normal file
28
docs/api/client/register-api.md
Normal file
@ -0,0 +1,28 @@
|
||||
# This document describes the client registration endpoints
|
||||
|
||||
### Client registration
|
||||
|
||||
`POST: http://unleash.host.com/api/client/register`
|
||||
|
||||
Register a client instance with the unleash server. The client should send all fields specified.
|
||||
|
||||
```json
|
||||
{
|
||||
"appName": "appName",
|
||||
"instanceId": "instanceId",
|
||||
"sdkVersion": "unleash-client-java:2.2.0",
|
||||
"strategies": ["default", "some-strategy-1"],
|
||||
"started": "2016-11-03T07:16:43.572Z",
|
||||
"interval": 10000
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**Fields:**
|
||||
|
||||
* **appName** - Name of the application seen by unleash-server
|
||||
* **instanceId** - Instance id for this application (typically hostname, podId or similar)
|
||||
* **sdkVersion** - Optional field that describes the sdk version (name:version)
|
||||
* **strategies** - List of strategies implemented by this application
|
||||
* **started** - When this client started. Should be reported as UTC time.
|
||||
* **interval** - At wich interval will this client be expected to send metrics?
|
@ -5,6 +5,7 @@ const logger = require('../logger');
|
||||
const COLUMNS = [
|
||||
'app_name',
|
||||
'instance_id',
|
||||
'sdk_version',
|
||||
'client_ip',
|
||||
'last_seen',
|
||||
'created_at',
|
||||
@ -14,6 +15,7 @@ const TABLE = 'client_instances';
|
||||
const mapRow = row => ({
|
||||
appName: row.app_name,
|
||||
instanceId: row.instance_id,
|
||||
sdkVersion: row.sdk_version,
|
||||
clientIp: row.client_ip,
|
||||
lastSeen: row.last_seen,
|
||||
createdAt: row.created_at,
|
||||
@ -48,6 +50,7 @@ class ClientInstanceStore {
|
||||
.update({
|
||||
last_seen: 'now()',
|
||||
client_ip: details.clientIp,
|
||||
sdk_version: details.sdkVersion,
|
||||
});
|
||||
}
|
||||
|
||||
@ -55,6 +58,7 @@ class ClientInstanceStore {
|
||||
return this.db(TABLE).insert({
|
||||
app_name: details.appName,
|
||||
instance_id: details.instanceId,
|
||||
sdk_version: details.sdkVersion,
|
||||
client_ip: details.clientIp,
|
||||
});
|
||||
}
|
||||
|
@ -12,12 +12,4 @@ const clientMetricsSchema = joi.object().keys({
|
||||
}),
|
||||
});
|
||||
|
||||
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(),
|
||||
});
|
||||
|
||||
module.exports = { clientMetricsSchema, clientRegisterSchema };
|
||||
module.exports = { clientMetricsSchema };
|
||||
|
14
lib/routes/client-api/register-schema.js
Normal file
14
lib/routes/client-api/register-schema.js
Normal file
@ -0,0 +1,14 @@
|
||||
'use strict';
|
||||
|
||||
const joi = require('joi');
|
||||
|
||||
const clientRegisterSchema = joi.object().keys({
|
||||
appName: joi.string().required(),
|
||||
instanceId: joi.string().required(),
|
||||
sdkVersion: joi.string().optional(),
|
||||
strategies: joi.array().required().items(joi.string(), joi.any().strip()),
|
||||
started: joi.date().required(),
|
||||
interval: joi.number().required(),
|
||||
});
|
||||
|
||||
module.exports = { clientRegisterSchema };
|
@ -4,7 +4,7 @@ const { Router } = require('express');
|
||||
const joi = require('joi');
|
||||
const logger = require('../../logger');
|
||||
|
||||
const { clientRegisterSchema } = require('./metrics-schema');
|
||||
const { clientRegisterSchema } = require('./register-schema');
|
||||
|
||||
exports.router = config => {
|
||||
const { clientInstanceStore, clientApplicationsStore } = config.stores;
|
||||
|
@ -28,6 +28,22 @@ function getSetup() {
|
||||
}
|
||||
|
||||
test('should register client', t => {
|
||||
t.plan(0);
|
||||
const { request } = getSetup();
|
||||
return request
|
||||
.post('/api/client/register')
|
||||
.send({
|
||||
appName: 'demo',
|
||||
instanceId: 'test',
|
||||
strategies: ['default'],
|
||||
sdkVersion: 'unleash-client-test:1.2',
|
||||
started: Date.now(),
|
||||
interval: 10,
|
||||
})
|
||||
.expect(202);
|
||||
});
|
||||
|
||||
test('should register client without sdkVersin', t => {
|
||||
t.plan(0);
|
||||
const { request } = getSetup();
|
||||
return request
|
||||
|
@ -0,0 +1,15 @@
|
||||
'use strict';
|
||||
|
||||
exports.up = function(db, callback) {
|
||||
db.runSql(
|
||||
'ALTER TABLE client_instances ADD "sdk_version" varchar(255);',
|
||||
callback
|
||||
);
|
||||
};
|
||||
|
||||
exports.down = function(db, callback) {
|
||||
db.runSql(
|
||||
'ALTER TABLE client_instances DROP COLUMN "sdk_version";',
|
||||
callback
|
||||
);
|
||||
};
|
Loading…
Reference in New Issue
Block a user