mirror of
https://github.com/Unleash/unleash.git
synced 2025-06-18 01:18:23 +02:00
feat: compare old and new proxy results (#6497)
This commit is contained in:
parent
a544a8a4ad
commit
160eec18a0
@ -21,6 +21,7 @@ import NotImplementedError from '../error/not-implemented-error';
|
|||||||
import NotFoundError from '../error/notfound-error';
|
import NotFoundError from '../error/notfound-error';
|
||||||
import rateLimit from 'express-rate-limit';
|
import rateLimit from 'express-rate-limit';
|
||||||
import { minutesToMilliseconds } from 'date-fns';
|
import { minutesToMilliseconds } from 'date-fns';
|
||||||
|
import isEqual from 'lodash.isequal';
|
||||||
|
|
||||||
interface ApiUserRequest<
|
interface ApiUserRequest<
|
||||||
PARAM = any,
|
PARAM = any,
|
||||||
@ -174,23 +175,49 @@ export default class FrontendAPIController extends Controller {
|
|||||||
if (!this.config.flagResolver.isEnabled('embedProxy')) {
|
if (!this.config.flagResolver.isEnabled('embedProxy')) {
|
||||||
throw new NotFoundError();
|
throw new NotFoundError();
|
||||||
}
|
}
|
||||||
const toggles: ProxyFeatureSchema[] =
|
let toggles: ProxyFeatureSchema[];
|
||||||
await this.services.proxyService.getProxyFeatures(
|
let newToggles: ProxyFeatureSchema[] = [];
|
||||||
|
if (this.config.flagResolver.isEnabled('globalFrontendApiCache')) {
|
||||||
|
[toggles, newToggles] = await Promise.all([
|
||||||
|
this.services.proxyService.getProxyFeatures(
|
||||||
|
req.user,
|
||||||
|
FrontendAPIController.createContext(req),
|
||||||
|
),
|
||||||
|
this.services.proxyService.getNewProxyFeatures(
|
||||||
|
req.user,
|
||||||
|
FrontendAPIController.createContext(req),
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
if (
|
||||||
|
!isEqual(
|
||||||
|
toggles.sort((a, b) => a.name.localeCompare(b.name)),
|
||||||
|
newToggles.sort((a, b) => a.name.localeCompare(b.name)),
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
this.logger.warn(
|
||||||
|
`old features and new features are different. Old count ${toggles.length}, new count ${newToggles.length}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toggles = await this.services.proxyService.getProxyFeatures(
|
||||||
req.user,
|
req.user,
|
||||||
FrontendAPIController.createContext(req),
|
FrontendAPIController.createContext(req),
|
||||||
);
|
);
|
||||||
if (this.config.flagResolver.isEnabled('globalFrontendApiCache')) {
|
|
||||||
// deliberately run comparison without blocking
|
|
||||||
void this.services.proxyService.compareToggleDefinitions(req.user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const returnedToggles = this.config.flagResolver.isEnabled(
|
||||||
|
'returnGlobalFrontendApiCache',
|
||||||
|
)
|
||||||
|
? newToggles
|
||||||
|
: toggles;
|
||||||
|
|
||||||
res.set('Cache-control', 'no-cache');
|
res.set('Cache-control', 'no-cache');
|
||||||
|
|
||||||
this.services.openApiService.respondWithValidation(
|
this.services.openApiService.respondWithValidation(
|
||||||
200,
|
200,
|
||||||
res,
|
res,
|
||||||
proxyFeaturesSchema.$id,
|
proxyFeaturesSchema.$id,
|
||||||
{ toggles },
|
{ toggles: returnedToggles },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user