Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: Instance stats service composition root (#6029)
- Loading branch information
Showing
5 changed files
with
216 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
188 changes: 188 additions & 0 deletions
188
src/lib/features/instance-stats/createInstanceStatsService.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters