mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-24 01:18:01 +02:00
refactor: Instance stats service composition root (#6029)
This commit is contained in:
parent
b0ecfd4d34
commit
41351a694e
@ -8,3 +8,4 @@ export * from './dependent-features/createDependentFeaturesService';
|
|||||||
export * from './tag-type/createTagTypeService';
|
export * from './tag-type/createTagTypeService';
|
||||||
export * from './project-environments/createEnvironmentService';
|
export * from './project-environments/createEnvironmentService';
|
||||||
export * from './events/createEventsService';
|
export * from './events/createEventsService';
|
||||||
|
export * from './instance-stats/createInstanceStatsService';
|
||||||
|
188
src/lib/features/instance-stats/createInstanceStatsService.ts
Normal file
188
src/lib/features/instance-stats/createInstanceStatsService.ts
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
import { InstanceStatsService } from './instance-stats-service';
|
||||||
|
import {
|
||||||
|
createFakeGetActiveUsers,
|
||||||
|
createGetActiveUsers,
|
||||||
|
} from './getActiveUsers';
|
||||||
|
import {
|
||||||
|
createFakeGetProductionChanges,
|
||||||
|
createGetProductionChanges,
|
||||||
|
} from './getProductionChanges';
|
||||||
|
import { IUnleashConfig } from '../../types';
|
||||||
|
import { Db } from '../../db/db';
|
||||||
|
import FeatureToggleStore from '../feature-toggle/feature-toggle-store';
|
||||||
|
import UserStore from '../../db/user-store';
|
||||||
|
import ProjectStore from '../../db/project-store';
|
||||||
|
import EnvironmentStore from '../project-environments/environment-store';
|
||||||
|
import StrategyStore from '../../db/strategy-store';
|
||||||
|
import ContextFieldStore from '../../db/context-field-store';
|
||||||
|
import GroupStore from '../../db/group-store';
|
||||||
|
import SegmentStore from '../../db/segment-store';
|
||||||
|
import RoleStore from '../../db/role-store';
|
||||||
|
import SettingStore from '../../db/setting-store';
|
||||||
|
import ClientInstanceStore from '../../db/client-instance-store';
|
||||||
|
import EventStore from '../events/event-store';
|
||||||
|
import { ApiTokenStore } from '../../db/api-token-store';
|
||||||
|
import { ClientMetricsStoreV2 } from '../metrics/client-metrics/client-metrics-store-v2';
|
||||||
|
import VersionService from '../../services/version-service';
|
||||||
|
import FeatureStrategyStore from '../feature-toggle/feature-toggle-strategies-store';
|
||||||
|
import FakeUserStore from '../../../test/fixtures/fake-user-store';
|
||||||
|
import FakeFeatureToggleStore from '../feature-toggle/fakes/fake-feature-toggle-store';
|
||||||
|
import FakeProjectStore from '../../../test/fixtures/fake-project-store';
|
||||||
|
import FakeEnvironmentStore from '../project-environments/fake-environment-store';
|
||||||
|
import FakeGroupStore from '../../../test/fixtures/fake-group-store';
|
||||||
|
import FakeContextFieldStore from '../../../test/fixtures/fake-context-field-store';
|
||||||
|
import FakeRoleStore from '../../../test/fixtures/fake-role-store';
|
||||||
|
import FakeClientInstanceStore from '../../../test/fixtures/fake-client-instance-store';
|
||||||
|
import FakeClientMetricsStoreV2 from '../metrics/client-metrics/fake-client-metrics-store-v2';
|
||||||
|
import FakeApiTokenStore from '../../../test/fixtures/fake-api-token-store';
|
||||||
|
import FakeEventStore from '../../../test/fixtures/fake-event-store';
|
||||||
|
import FakeSettingStore from '../../../test/fixtures/fake-setting-store';
|
||||||
|
import FakeSegmentStore from '../../../test/fixtures/fake-segment-store';
|
||||||
|
import FakeStrategiesStore from '../../../test/fixtures/fake-strategies-store';
|
||||||
|
import FakeFeatureStrategiesStore from '../feature-toggle/fakes/fake-feature-strategies-store';
|
||||||
|
|
||||||
|
export const createInstanceStatsService = (db: Db, config: IUnleashConfig) => {
|
||||||
|
const { eventBus, getLogger, flagResolver } = config;
|
||||||
|
const featureToggleStore = new FeatureToggleStore(
|
||||||
|
db,
|
||||||
|
eventBus,
|
||||||
|
getLogger,
|
||||||
|
flagResolver,
|
||||||
|
);
|
||||||
|
const userStore = new UserStore(db, getLogger);
|
||||||
|
const projectStore = new ProjectStore(
|
||||||
|
db,
|
||||||
|
eventBus,
|
||||||
|
getLogger,
|
||||||
|
flagResolver,
|
||||||
|
);
|
||||||
|
const environmentStore = new EnvironmentStore(db, eventBus, getLogger);
|
||||||
|
const strategyStore = new StrategyStore(db, getLogger);
|
||||||
|
const contextFieldStore = new ContextFieldStore(
|
||||||
|
db,
|
||||||
|
getLogger,
|
||||||
|
flagResolver,
|
||||||
|
);
|
||||||
|
const groupStore = new GroupStore(db);
|
||||||
|
const segmentStore = new SegmentStore(
|
||||||
|
db,
|
||||||
|
eventBus,
|
||||||
|
getLogger,
|
||||||
|
flagResolver,
|
||||||
|
);
|
||||||
|
const roleStore = new RoleStore(db, eventBus, getLogger);
|
||||||
|
const settingStore = new SettingStore(db, getLogger);
|
||||||
|
const clientInstanceStore = new ClientInstanceStore(
|
||||||
|
db,
|
||||||
|
eventBus,
|
||||||
|
getLogger,
|
||||||
|
);
|
||||||
|
const eventStore = new EventStore(db, getLogger);
|
||||||
|
const apiTokenStore = new ApiTokenStore(db, eventBus, getLogger);
|
||||||
|
const clientMetricsStoreV2 = new ClientMetricsStoreV2(
|
||||||
|
db,
|
||||||
|
getLogger,
|
||||||
|
flagResolver,
|
||||||
|
);
|
||||||
|
const instanceStatsServiceStores = {
|
||||||
|
featureToggleStore,
|
||||||
|
userStore,
|
||||||
|
projectStore,
|
||||||
|
environmentStore,
|
||||||
|
strategyStore,
|
||||||
|
contextFieldStore,
|
||||||
|
groupStore,
|
||||||
|
segmentStore,
|
||||||
|
roleStore,
|
||||||
|
settingStore,
|
||||||
|
clientInstanceStore,
|
||||||
|
eventStore,
|
||||||
|
apiTokenStore,
|
||||||
|
clientMetricsStoreV2,
|
||||||
|
};
|
||||||
|
const featureStrategiesStore = new FeatureStrategyStore(
|
||||||
|
db,
|
||||||
|
eventBus,
|
||||||
|
getLogger,
|
||||||
|
flagResolver,
|
||||||
|
);
|
||||||
|
const versionServiceStores = {
|
||||||
|
...instanceStatsServiceStores,
|
||||||
|
featureStrategiesStore,
|
||||||
|
};
|
||||||
|
const getActiveUsers = createGetActiveUsers(db);
|
||||||
|
const getProductionChanges = createGetProductionChanges(db);
|
||||||
|
const versionService = new VersionService(
|
||||||
|
versionServiceStores,
|
||||||
|
config,
|
||||||
|
getActiveUsers,
|
||||||
|
getProductionChanges,
|
||||||
|
);
|
||||||
|
|
||||||
|
const instanceStatsService = new InstanceStatsService(
|
||||||
|
instanceStatsServiceStores,
|
||||||
|
config,
|
||||||
|
versionService,
|
||||||
|
getActiveUsers,
|
||||||
|
getProductionChanges,
|
||||||
|
);
|
||||||
|
|
||||||
|
return instanceStatsService;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const createFakeInstanceStatsService = (config: IUnleashConfig) => {
|
||||||
|
const { eventBus, getLogger, flagResolver } = config;
|
||||||
|
const featureToggleStore = new FakeFeatureToggleStore();
|
||||||
|
const userStore = new FakeUserStore();
|
||||||
|
const projectStore = new FakeProjectStore();
|
||||||
|
const environmentStore = new FakeEnvironmentStore();
|
||||||
|
const strategyStore = new FakeStrategiesStore();
|
||||||
|
const contextFieldStore = new FakeContextFieldStore();
|
||||||
|
const groupStore = new FakeGroupStore();
|
||||||
|
const segmentStore = new FakeSegmentStore();
|
||||||
|
const roleStore = new FakeRoleStore();
|
||||||
|
const settingStore = new FakeSettingStore();
|
||||||
|
const clientInstanceStore = new FakeClientInstanceStore();
|
||||||
|
const eventStore = new FakeEventStore();
|
||||||
|
const apiTokenStore = new FakeApiTokenStore();
|
||||||
|
const clientMetricsStoreV2 = new FakeClientMetricsStoreV2();
|
||||||
|
const instanceStatsServiceStores = {
|
||||||
|
featureToggleStore,
|
||||||
|
userStore,
|
||||||
|
projectStore,
|
||||||
|
environmentStore,
|
||||||
|
strategyStore,
|
||||||
|
contextFieldStore,
|
||||||
|
groupStore,
|
||||||
|
segmentStore,
|
||||||
|
roleStore,
|
||||||
|
settingStore,
|
||||||
|
clientInstanceStore,
|
||||||
|
eventStore,
|
||||||
|
apiTokenStore,
|
||||||
|
clientMetricsStoreV2,
|
||||||
|
};
|
||||||
|
const featureStrategiesStore = new FakeFeatureStrategiesStore();
|
||||||
|
const versionServiceStores = {
|
||||||
|
...instanceStatsServiceStores,
|
||||||
|
featureStrategiesStore,
|
||||||
|
};
|
||||||
|
const getActiveUsers = createFakeGetActiveUsers();
|
||||||
|
const getProductionChanges = createFakeGetProductionChanges();
|
||||||
|
const versionService = new VersionService(
|
||||||
|
versionServiceStores,
|
||||||
|
config,
|
||||||
|
getActiveUsers,
|
||||||
|
getProductionChanges,
|
||||||
|
);
|
||||||
|
|
||||||
|
const instanceStatsService = new InstanceStatsService(
|
||||||
|
instanceStatsServiceStores,
|
||||||
|
config,
|
||||||
|
versionService,
|
||||||
|
getActiveUsers,
|
||||||
|
getProductionChanges,
|
||||||
|
);
|
||||||
|
|
||||||
|
return instanceStatsService;
|
||||||
|
};
|
@ -104,6 +104,10 @@ import {
|
|||||||
createFakeTagTypeService,
|
createFakeTagTypeService,
|
||||||
createTagTypeService,
|
createTagTypeService,
|
||||||
} from '../features/tag-type/createTagTypeService';
|
} from '../features/tag-type/createTagTypeService';
|
||||||
|
import {
|
||||||
|
createFakeInstanceStatsService,
|
||||||
|
createInstanceStatsService,
|
||||||
|
} from '../features/instance-stats/createInstanceStatsService';
|
||||||
|
|
||||||
export const createServices = (
|
export const createServices = (
|
||||||
stores: IUnleashStores,
|
stores: IUnleashStores,
|
||||||
@ -299,13 +303,9 @@ export const createServices = (
|
|||||||
eventService,
|
eventService,
|
||||||
);
|
);
|
||||||
|
|
||||||
const instanceStatsService = new InstanceStatsService(
|
const instanceStatsService = db
|
||||||
stores,
|
? createInstanceStatsService(db, config)
|
||||||
config,
|
: createFakeInstanceStatsService(config);
|
||||||
versionService,
|
|
||||||
db ? createGetActiveUsers(db) : createFakeGetActiveUsers(),
|
|
||||||
db ? createGetProductionChanges(db) : createFakeGetProductionChanges(),
|
|
||||||
);
|
|
||||||
|
|
||||||
const maintenanceService = new MaintenanceService(config, settingService);
|
const maintenanceService = new MaintenanceService(config, settingService);
|
||||||
|
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
import dbInit, { ITestDb } from '../../helpers/database-init';
|
import dbInit, { ITestDb } from '../../helpers/database-init';
|
||||||
import { IUnleashTest, setupApp } from '../../helpers/test-helper';
|
import {
|
||||||
|
IUnleashTest,
|
||||||
|
setupAppWithCustomConfig,
|
||||||
|
} from '../../helpers/test-helper';
|
||||||
import getLogger from '../../../fixtures/no-logger';
|
import getLogger from '../../../fixtures/no-logger';
|
||||||
import { IUnleashStores } from '../../../../lib/types';
|
import { IUnleashStores } from '../../../../lib/types';
|
||||||
|
|
||||||
@ -11,7 +14,17 @@ beforeAll(async () => {
|
|||||||
db = await dbInit('instance_admin_api_serial', getLogger);
|
db = await dbInit('instance_admin_api_serial', getLogger);
|
||||||
stores = db.stores;
|
stores = db.stores;
|
||||||
await stores.settingStore.insert('instanceInfo', { id: 'test-static' });
|
await stores.settingStore.insert('instanceInfo', { id: 'test-static' });
|
||||||
app = await setupApp(stores);
|
app = await setupAppWithCustomConfig(
|
||||||
|
stores,
|
||||||
|
{
|
||||||
|
experimental: {
|
||||||
|
flags: {
|
||||||
|
strictSchemaValidation: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
db.rawDatabase,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
@ -20,7 +33,7 @@ afterAll(async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('should return instance statistics', async () => {
|
test('should return instance statistics', async () => {
|
||||||
stores.featureToggleStore.create('default', {
|
await stores.featureToggleStore.create('default', {
|
||||||
name: 'TestStats1',
|
name: 'TestStats1',
|
||||||
createdByUserId: 9999,
|
createdByUserId: 9999,
|
||||||
});
|
});
|
||||||
@ -65,11 +78,11 @@ test('should return signed instance statistics', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('should return instance statistics as CVS', async () => {
|
test('should return instance statistics as CVS', async () => {
|
||||||
stores.featureToggleStore.create('default', {
|
await stores.featureToggleStore.create('default', {
|
||||||
name: 'TestStats2',
|
name: 'TestStats2',
|
||||||
createdByUserId: 9999,
|
createdByUserId: 9999,
|
||||||
});
|
});
|
||||||
stores.featureToggleStore.create('default', {
|
await stores.featureToggleStore.create('default', {
|
||||||
name: 'TestStats3',
|
name: 'TestStats3',
|
||||||
createdByUserId: 9999,
|
createdByUserId: 9999,
|
||||||
});
|
});
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { log } from 'db-migrate-shared';
|
||||||
import { migrateDb } from '../../../migrator';
|
import { migrateDb } from '../../../migrator';
|
||||||
import { createStores } from '../../../lib/db';
|
import { createStores } from '../../../lib/db';
|
||||||
import { createDb } from '../../../lib/db/db-pool';
|
import { createDb } from '../../../lib/db/db-pool';
|
||||||
@ -97,6 +98,7 @@ export default async function init(
|
|||||||
getLogger,
|
getLogger,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
log.setLogLevel('error');
|
||||||
const db = createDb(config);
|
const db = createDb(config);
|
||||||
|
|
||||||
await db.raw(`DROP SCHEMA IF EXISTS ${config.db.schema} CASCADE`);
|
await db.raw(`DROP SCHEMA IF EXISTS ${config.db.schema} CASCADE`);
|
||||||
|
Loading…
Reference in New Issue
Block a user