mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Make Appinstance registration include environment (#1014)
This commit is contained in:
		
							parent
							
								
									8ac3f6fc36
								
							
						
					
					
						commit
						20a4aeff97
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -52,3 +52,5 @@ package-lock.json | ||||
| /website/yarn.lock | ||||
| /website/translated_docs | ||||
| /website/i18n/* | ||||
| .env | ||||
| 
 | ||||
|  | ||||
| @ -18,6 +18,7 @@ const COLUMNS = [ | ||||
|     'client_ip', | ||||
|     'last_seen', | ||||
|     'created_at', | ||||
|     'environment', | ||||
| ]; | ||||
| const TABLE = 'client_instances'; | ||||
| 
 | ||||
| @ -30,6 +31,7 @@ const mapRow = (row) => ({ | ||||
|     clientIp: row.client_ip, | ||||
|     lastSeen: row.last_seen, | ||||
|     createdAt: row.created_at, | ||||
|     environment: row.environment, | ||||
| }); | ||||
| 
 | ||||
| const mapToDb = (client) => ({ | ||||
| @ -38,6 +40,7 @@ const mapToDb = (client) => ({ | ||||
|     sdk_version: client.sdkVersion || '', | ||||
|     client_ip: client.clientIp, | ||||
|     last_seen: client.lastSeen || 'now()', | ||||
|     environment: client.environment || 'default', | ||||
| }); | ||||
| 
 | ||||
| export default class ClientInstanceStore implements IClientInstanceStore { | ||||
| @ -79,7 +82,7 @@ export default class ClientInstanceStore implements IClientInstanceStore { | ||||
|         const rows = instances.map(mapToDb); | ||||
|         await this.db(TABLE) | ||||
|             .insert(rows) | ||||
|             .onConflict(['app_name', 'instance_id']) | ||||
|             .onConflict(['app_name', 'instance_id', 'environment']) | ||||
|             .merge(); | ||||
|     } | ||||
| 
 | ||||
| @ -126,7 +129,7 @@ export default class ClientInstanceStore implements IClientInstanceStore { | ||||
| 
 | ||||
|         await this.db(TABLE) | ||||
|             .insert(mapToDb(details)) | ||||
|             .onConflict(['app_name', 'instance_id']) | ||||
|             .onConflict(['app_name', 'instance_id', 'environment']) | ||||
|             .merge(); | ||||
| 
 | ||||
|         stopTimer(); | ||||
|  | ||||
| @ -1,9 +1,13 @@ | ||||
| import { Request, Response } from 'express'; | ||||
| import { Response } from 'express'; | ||||
| import Controller from '../controller'; | ||||
| import { IUnleashServices } from '../../types'; | ||||
| import { IUnleashConfig } from '../../types/option'; | ||||
| import { Logger } from '../../logger'; | ||||
| import ClientMetricsService from '../../services/client-metrics'; | ||||
| import { IAuthRequest, User } from '../../server-impl'; | ||||
| import { IClientApp } from '../../types/model'; | ||||
| import ApiUser from '../../types/api-user'; | ||||
| import { ALL } from '../../types/models/api-token'; | ||||
| 
 | ||||
| export default class RegisterController extends Controller { | ||||
|     logger: Logger; | ||||
| @ -22,9 +26,20 @@ export default class RegisterController extends Controller { | ||||
|         this.post('/', this.handleRegister); | ||||
|     } | ||||
| 
 | ||||
|     async handleRegister(req: Request, res: Response): Promise<void> { | ||||
|         const data = req.body; | ||||
|         const clientIp = req.ip; | ||||
|     private resolveEnvironment(user: User, data: IClientApp) { | ||||
|         if (user instanceof ApiUser) { | ||||
|             if (user.environment !== ALL) { | ||||
|                 return user.environment; | ||||
|             } else if (user.environment === ALL && data.environment) { | ||||
|                 return data.environment; | ||||
|             } | ||||
|         } | ||||
|         return 'default'; | ||||
|     } | ||||
| 
 | ||||
|     async handleRegister(req: IAuthRequest, res: Response): Promise<void> { | ||||
|         const { body: data, ip: clientIp, user } = req; | ||||
|         data.environment = this.resolveEnvironment(user, data); | ||||
|         await this.metrics.registerClient(data, clientIp); | ||||
|         return res.status(202).end(); | ||||
|     } | ||||
|  | ||||
| @ -13,4 +13,5 @@ export const clientRegisterSchema = joi | ||||
|             .items(joi.string(), joi.any().strip()), | ||||
|         started: joi.date().required(), | ||||
|         interval: joi.number().required(), | ||||
|         environment: joi.string().optional(), | ||||
|     }); | ||||
|  | ||||
| @ -10,6 +10,7 @@ export interface INewClientInstance { | ||||
|     sdkVersion?: string; | ||||
|     clientIp?: string; | ||||
|     lastSeen?: Date; | ||||
|     environment?: string; | ||||
| } | ||||
| export interface IClientInstanceStore | ||||
|     extends Store< | ||||
|  | ||||
| @ -0,0 +1,29 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| exports.up = function (db, cb) { | ||||
|     db.runSql( | ||||
|         ` | ||||
|     ALTER TABLE client_instances DROP CONSTRAINT client_instances_pkey; | ||||
|     ALTER TABLE client_instances ADD COLUMN environment varchar(255) NOT NULL DEFAULT 'default'; | ||||
|     ALTER TABLE client_instances ADD CONSTRAINT client_instances_pkey PRIMARY KEY (app_name, environment, instance_id); | ||||
|     CREATE INDEX client_instances_environment_idx ON client_instances(environment); | ||||
|   `,
 | ||||
|         cb, | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| exports.down = function (db, cb) { | ||||
|     db.runSql( | ||||
|         ` | ||||
|       DROP INDEX client_instances_environment_idx; | ||||
|     ALTER TABLE client_instances DROP CONSTRAINT client_instances_pkey; | ||||
|     ALTER TABLE client_instances ADD CONSTRAINT client_instances_pkey PRIMARY KEY (app_name, instance_id); | ||||
|     ALTER TABLE client_instances DROP COLUMN environment; | ||||
|   `,
 | ||||
|         cb, | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| exports._meta = { | ||||
|     version: 1, | ||||
| }; | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user