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
4
.gitignore
vendored
4
.gitignore
vendored
@ -51,4 +51,6 @@ package-lock.json
|
|||||||
/website/node_modules
|
/website/node_modules
|
||||||
/website/yarn.lock
|
/website/yarn.lock
|
||||||
/website/translated_docs
|
/website/translated_docs
|
||||||
/website/i18n/*
|
/website/i18n/*
|
||||||
|
.env
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ const COLUMNS = [
|
|||||||
'client_ip',
|
'client_ip',
|
||||||
'last_seen',
|
'last_seen',
|
||||||
'created_at',
|
'created_at',
|
||||||
|
'environment',
|
||||||
];
|
];
|
||||||
const TABLE = 'client_instances';
|
const TABLE = 'client_instances';
|
||||||
|
|
||||||
@ -30,6 +31,7 @@ const mapRow = (row) => ({
|
|||||||
clientIp: row.client_ip,
|
clientIp: row.client_ip,
|
||||||
lastSeen: row.last_seen,
|
lastSeen: row.last_seen,
|
||||||
createdAt: row.created_at,
|
createdAt: row.created_at,
|
||||||
|
environment: row.environment,
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapToDb = (client) => ({
|
const mapToDb = (client) => ({
|
||||||
@ -38,6 +40,7 @@ const mapToDb = (client) => ({
|
|||||||
sdk_version: client.sdkVersion || '',
|
sdk_version: client.sdkVersion || '',
|
||||||
client_ip: client.clientIp,
|
client_ip: client.clientIp,
|
||||||
last_seen: client.lastSeen || 'now()',
|
last_seen: client.lastSeen || 'now()',
|
||||||
|
environment: client.environment || 'default',
|
||||||
});
|
});
|
||||||
|
|
||||||
export default class ClientInstanceStore implements IClientInstanceStore {
|
export default class ClientInstanceStore implements IClientInstanceStore {
|
||||||
@ -79,7 +82,7 @@ export default class ClientInstanceStore implements IClientInstanceStore {
|
|||||||
const rows = instances.map(mapToDb);
|
const rows = instances.map(mapToDb);
|
||||||
await this.db(TABLE)
|
await this.db(TABLE)
|
||||||
.insert(rows)
|
.insert(rows)
|
||||||
.onConflict(['app_name', 'instance_id'])
|
.onConflict(['app_name', 'instance_id', 'environment'])
|
||||||
.merge();
|
.merge();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +129,7 @@ export default class ClientInstanceStore implements IClientInstanceStore {
|
|||||||
|
|
||||||
await this.db(TABLE)
|
await this.db(TABLE)
|
||||||
.insert(mapToDb(details))
|
.insert(mapToDb(details))
|
||||||
.onConflict(['app_name', 'instance_id'])
|
.onConflict(['app_name', 'instance_id', 'environment'])
|
||||||
.merge();
|
.merge();
|
||||||
|
|
||||||
stopTimer();
|
stopTimer();
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
import { Request, Response } from 'express';
|
import { Response } from 'express';
|
||||||
import Controller from '../controller';
|
import Controller from '../controller';
|
||||||
import { IUnleashServices } from '../../types';
|
import { IUnleashServices } from '../../types';
|
||||||
import { IUnleashConfig } from '../../types/option';
|
import { IUnleashConfig } from '../../types/option';
|
||||||
import { Logger } from '../../logger';
|
import { Logger } from '../../logger';
|
||||||
import ClientMetricsService from '../../services/client-metrics';
|
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 {
|
export default class RegisterController extends Controller {
|
||||||
logger: Logger;
|
logger: Logger;
|
||||||
@ -22,9 +26,20 @@ export default class RegisterController extends Controller {
|
|||||||
this.post('/', this.handleRegister);
|
this.post('/', this.handleRegister);
|
||||||
}
|
}
|
||||||
|
|
||||||
async handleRegister(req: Request, res: Response): Promise<void> {
|
private resolveEnvironment(user: User, data: IClientApp) {
|
||||||
const data = req.body;
|
if (user instanceof ApiUser) {
|
||||||
const clientIp = req.ip;
|
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);
|
await this.metrics.registerClient(data, clientIp);
|
||||||
return res.status(202).end();
|
return res.status(202).end();
|
||||||
}
|
}
|
||||||
|
@ -13,4 +13,5 @@ export const clientRegisterSchema = joi
|
|||||||
.items(joi.string(), joi.any().strip()),
|
.items(joi.string(), joi.any().strip()),
|
||||||
started: joi.date().required(),
|
started: joi.date().required(),
|
||||||
interval: joi.number().required(),
|
interval: joi.number().required(),
|
||||||
|
environment: joi.string().optional(),
|
||||||
});
|
});
|
||||||
|
@ -10,6 +10,7 @@ export interface INewClientInstance {
|
|||||||
sdkVersion?: string;
|
sdkVersion?: string;
|
||||||
clientIp?: string;
|
clientIp?: string;
|
||||||
lastSeen?: Date;
|
lastSeen?: Date;
|
||||||
|
environment?: string;
|
||||||
}
|
}
|
||||||
export interface IClientInstanceStore
|
export interface IClientInstanceStore
|
||||||
extends Store<
|
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