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:
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