1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-05 17:53:12 +02:00

poc: just a small test

This commit is contained in:
Ivar Conradi Østhus 2022-02-09 12:48:39 +01:00
parent 4754d203e4
commit fe6236a3ec
No known key found for this signature in database
GPG Key ID: 31AC596886B0BD09
7 changed files with 41 additions and 1 deletions

View File

@ -164,6 +164,11 @@ class EventStore extends EventEmitter implements IEventStore {
}
}
async getLatestId(): Promise<number> {
const item = await this.db(TABLE).max('id').first();
return item.max;
}
rowToEvent(row: IEventTable): IEvent {
return {
id: row.id,

View File

@ -11,6 +11,7 @@ import NotFoundError from '../../error/notfound-error';
import { IAuthRequest } from '../unleash-types';
import ApiUser from '../../types/api-user';
import { ALL } from '../../types/models/api-token';
import EventService from '../../services/event-service';
const version = 2;
@ -24,19 +25,25 @@ export default class FeatureController extends Controller {
private featureToggleServiceV2: FeatureToggleService;
private eventService: EventService;
private readonly cache: boolean;
private cachedFeatures: any;
private latestEventId: number;
constructor(
{
featureToggleServiceV2,
}: Pick<IUnleashServices, 'featureToggleServiceV2'>,
eventService,
}: Pick<IUnleashServices, 'featureToggleServiceV2' | 'eventService'>,
config: IUnleashConfig,
) {
super(config);
const { experimental } = config;
this.featureToggleServiceV2 = featureToggleServiceV2;
this.eventService = eventService;
this.logger = config.getLogger('client-api/feature.js');
this.get('/', this.getAll);
this.get('/:featureName', this.getFeatureToggle);
@ -56,6 +63,20 @@ export default class FeatureController extends Controller {
},
);
}
if (this.cache) {
process.nextTick(async () => {
this.latestEventId = await this.eventService.getLatestId();
setInterval(async () => {
const eventId = await this.eventService.getLatestId();
console.log(eventId);
if (this.latestEventId !== eventId) {
console.log('clear cache');
this.latestEventId = eventId;
await this.cachedFeatures.clear();
}
}, 500);
});
}
}
private async resolveQuery(

View File

@ -28,6 +28,10 @@ export default class EventService {
async getEventsForProject(project: string): Promise<IEvent[]> {
return this.eventStore.getEventsFilterByProject(project);
}
async getLatestId(): Promise<number> {
return this.eventStore.getLatestId();
}
}
module.exports = EventService;

View File

@ -420,6 +420,7 @@ class FeatureToggleService {
async getClientFeatures(
query?: IFeatureToggleQuery,
): Promise<FeatureConfigurationClient[]> {
console.log('fetch!');
return this.featureToggleClientStore.getClient(query);
}

View File

@ -9,4 +9,5 @@ export interface IEventStore extends Store<IEvent, number>, EventEmitter {
getEventsFilterByType(name: string): Promise<IEvent[]>;
getEventsForFeature(featureName: string): Promise<IEvent[]>;
getEventsFilterByProject(project: string): Promise<IEvent[]>;
getLatestId(): Promise<number>;
}

View File

@ -32,6 +32,10 @@ process.nextTick(async () => {
metricsV2: {
enabled: true,
},
clientFeatureMemoize: {
enabled: true,
maxAge: 120_000,
},
},
authentication: {
initApiTokens: [

View File

@ -11,6 +11,10 @@ class FakeEventStore extends EventEmitter implements IEventStore {
this.events = [];
}
getLatestId(): Promise<number> {
return Promise.resolve(1);
}
async getEventsForFeature(featureName: string): Promise<IEvent[]> {
return this.events.filter((e) => e.featureName === featureName);
}