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 './project-environments/createEnvironmentService';
|
||||
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,
|
||||
createTagTypeService,
|
||||
} from '../features/tag-type/createTagTypeService';
|
||||
import {
|
||||
createFakeInstanceStatsService,
|
||||
createInstanceStatsService,
|
||||
} from '../features/instance-stats/createInstanceStatsService';
|
||||
|
||||
export const createServices = (
|
||||
stores: IUnleashStores,
|
||||
@ -299,13 +303,9 @@ export const createServices = (
|
||||
eventService,
|
||||
);
|
||||
|
||||
const instanceStatsService = new InstanceStatsService(
|
||||
stores,
|
||||
config,
|
||||
versionService,
|
||||
db ? createGetActiveUsers(db) : createFakeGetActiveUsers(),
|
||||
db ? createGetProductionChanges(db) : createFakeGetProductionChanges(),
|
||||
);
|
||||
const instanceStatsService = db
|
||||
? createInstanceStatsService(db, config)
|
||||
: createFakeInstanceStatsService(config);
|
||||
|
||||
const maintenanceService = new MaintenanceService(config, settingService);
|
||||
|
||||
|
@ -1,5 +1,8 @@
|
||||
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 { IUnleashStores } from '../../../../lib/types';
|
||||
|
||||
@ -11,7 +14,17 @@ beforeAll(async () => {
|
||||
db = await dbInit('instance_admin_api_serial', getLogger);
|
||||
stores = db.stores;
|
||||
await stores.settingStore.insert('instanceInfo', { id: 'test-static' });
|
||||
app = await setupApp(stores);
|
||||
app = await setupAppWithCustomConfig(
|
||||
stores,
|
||||
{
|
||||
experimental: {
|
||||
flags: {
|
||||
strictSchemaValidation: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
db.rawDatabase,
|
||||
);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
@ -20,7 +33,7 @@ afterAll(async () => {
|
||||
});
|
||||
|
||||
test('should return instance statistics', async () => {
|
||||
stores.featureToggleStore.create('default', {
|
||||
await stores.featureToggleStore.create('default', {
|
||||
name: 'TestStats1',
|
||||
createdByUserId: 9999,
|
||||
});
|
||||
@ -65,11 +78,11 @@ test('should return signed instance statistics', async () => {
|
||||
});
|
||||
|
||||
test('should return instance statistics as CVS', async () => {
|
||||
stores.featureToggleStore.create('default', {
|
||||
await stores.featureToggleStore.create('default', {
|
||||
name: 'TestStats2',
|
||||
createdByUserId: 9999,
|
||||
});
|
||||
stores.featureToggleStore.create('default', {
|
||||
await stores.featureToggleStore.create('default', {
|
||||
name: 'TestStats3',
|
||||
createdByUserId: 9999,
|
||||
});
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { log } from 'db-migrate-shared';
|
||||
import { migrateDb } from '../../../migrator';
|
||||
import { createStores } from '../../../lib/db';
|
||||
import { createDb } from '../../../lib/db/db-pool';
|
||||
@ -97,6 +98,7 @@ export default async function init(
|
||||
getLogger,
|
||||
});
|
||||
|
||||
log.setLogLevel('error');
|
||||
const db = createDb(config);
|
||||
|
||||
await db.raw(`DROP SCHEMA IF EXISTS ${config.db.schema} CASCADE`);
|
||||
|
Loading…
Reference in New Issue
Block a user