1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-18 01:18:23 +02:00

Make Appinstance registration include environment (#1014)

This commit is contained in:
Christopher Kolstad 2021-10-12 10:39:28 +02:00 committed by GitHub
parent 8ac3f6fc36
commit 20a4aeff97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 58 additions and 7 deletions

2
.gitignore vendored
View File

@ -52,3 +52,5 @@ package-lock.json
/website/yarn.lock
/website/translated_docs
/website/i18n/*
.env

View File

@ -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();

View File

@ -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();
}

View File

@ -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(),
});

View File

@ -10,6 +10,7 @@ export interface INewClientInstance {
sdkVersion?: string;
clientIp?: string;
lastSeen?: Date;
environment?: string;
}
export interface IClientInstanceStore
extends Store<

View File

@ -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,
};