mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Add support for sdkVersion in client registration
This commit is contained in:
		
							parent
							
								
									669c860c8d
								
							
						
					
					
						commit
						46b82ecd6a
					
				@ -1,6 +1,7 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [Unreleased]
 | 
			
		||||
- Add sdkVersion in client registration
 | 
			
		||||
 | 
			
		||||
## 3.0.0-alpha.1
 | 
			
		||||
- upgrade unleash-frontend to 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