Skip to content

Commit

Permalink
refactor: metrics in feature oriented architecture (#5919)
Browse files Browse the repository at this point in the history
  • Loading branch information
kwasniew committed Jan 17, 2024
1 parent aee470a commit 16691d7
Show file tree
Hide file tree
Showing 45 changed files with 162 additions and 161 deletions.
4 changes: 2 additions & 2 deletions src/lib/db/index.ts
Expand Up @@ -23,7 +23,7 @@ import FeatureToggleClientStore from '../features/client-feature-toggles/client-
import EnvironmentStore from '../features/project-environments/environment-store';
import FeatureTagStore from './feature-tag-store';
import { FeatureEnvironmentStore } from './feature-environment-store';
import { ClientMetricsStoreV2 } from './client-metrics-store-v2';
import { ClientMetricsStoreV2 } from '../features/metrics/client-metrics/client-metrics-store-v2';
import UserSplashStore from './user-splash-store';
import RoleStore from './role-store';
import SegmentStore from './segment-store';
Expand All @@ -38,7 +38,7 @@ import { Db } from './db';
import { ImportTogglesStore } from '../features/export-import-toggles/import-toggles-store';
import PrivateProjectStore from '../features/private-project/privateProjectStore';
import { DependentFeaturesStore } from '../features/dependent-features/dependent-features-store';
import LastSeenStore from '../services/client-metrics/last-seen/last-seen-store';
import LastSeenStore from '../features/metrics/last-seen/last-seen-store';
import FeatureSearchStore from '../features/feature-search/feature-search-store';

export const createStores = (
Expand Down
Expand Up @@ -11,7 +11,7 @@ import {
IFeatureTypeCount,
IVariant,
} from 'lib/types/model';
import { LastSeenInput } from '../../../services/client-metrics/last-seen/last-seen-service';
import { LastSeenInput } from '../../metrics/last-seen/last-seen-service';
import {
EnvironmentFeatureNames,
FeatureToggleInsert,
Expand Down
2 changes: 1 addition & 1 deletion src/lib/features/feature-toggle/feature-toggle-store.ts
Expand Up @@ -12,7 +12,7 @@ import {
} from '../../types/model';
import { IFeatureToggleStore } from './types/feature-toggle-store-type';
import { Db } from '../../db/db';
import { LastSeenInput } from '../../services/client-metrics/last-seen/last-seen-service';
import { LastSeenInput } from '../metrics/last-seen/last-seen-service';
import { NameExistsError } from '../../error';
import { DEFAULT_ENV } from '../../../lib/util';

Expand Down
Expand Up @@ -7,7 +7,7 @@ import {
} from '../../../types/model';
import { FeatureToggleInsert } from '../feature-toggle-store';
import { Store } from '../../../types/stores/store';
import { LastSeenInput } from '../../../services/client-metrics/last-seen/last-seen-service';
import { LastSeenInput } from '../../metrics/last-seen/last-seen-service';
import { FeatureConfigurationClient } from './feature-toggle-strategies-store-type';
import { IFeatureProjectUserParams } from '../feature-toggle-controller';

Expand Down
@@ -1,15 +1,15 @@
import ClientInstanceService from '../../../lib/services/client-metrics/instance-service';
import { IClientApp } from '../../../lib/types/model';
import ClientInstanceService from '../instance/instance-service';
import { IClientApp } from '../../../types/model';
import { secondsToMilliseconds } from 'date-fns';
import { createTestConfig } from '../../config/test-config';
import { IUnleashConfig, IUnleashStores } from '../../../lib/types';
import { FakePrivateProjectChecker } from '../../../lib/features/private-project/fakePrivateProjectChecker';
import { ITestDb } from '../helpers/database-init';
import { createTestConfig } from '../../../../test/config/test-config';
import { IUnleashConfig, IUnleashStores } from '../../../types';
import { FakePrivateProjectChecker } from '../../private-project/fakePrivateProjectChecker';
import { ITestDb } from '../../../../test/e2e/helpers/database-init';

const faker = require('faker');
const dbInit = require('../helpers/database-init');
const getLogger = require('../../fixtures/no-logger');
const { APPLICATION_CREATED } = require('../../../lib/types/events');
const dbInit = require('../../../../test/e2e/helpers/database-init');
const getLogger = require('../../../../test/fixtures/no-logger');
const { APPLICATION_CREATED } = require('../../../types/events');

let stores: IUnleashStores;
let db: ITestDb;
Expand Down
@@ -1,4 +1,4 @@
import { Store } from './store';
import { Store } from '../../../types/stores/store';

export interface IClientMetricsEnvKey {
featureName: string;
Expand Down
@@ -1,11 +1,11 @@
import { addHours, set, subDays } from 'date-fns';
import dbInit, { ITestDb } from '../helpers/database-init';
import getLogger from '../../fixtures/no-logger';
import { IUnleashStores } from '../../../lib/types';
import dbInit, { ITestDb } from '../../../../test/e2e/helpers/database-init';
import getLogger from '../../../../test/fixtures/no-logger';
import { IUnleashStores } from '../../../types';
import {
IClientMetricsEnv,
IClientMetricsStoreV2,
} from '../../../lib/types/stores/client-metrics-store-v2';
} from './client-metrics-store-v2-type';

let db: ITestDb;
let stores: IUnleashStores;
Expand Down
@@ -1,6 +1,6 @@
import dbInit, { ITestDb } from '../../test/e2e/helpers/database-init';
import getLogger from '../../test/fixtures/no-logger';
import { IClientMetricsStoreV2, IUnleashStores } from '../types';
import dbInit, { ITestDb } from '../../../../test/e2e/helpers/database-init';
import getLogger from '../../../../test/fixtures/no-logger';
import { IClientMetricsStoreV2, IUnleashStores } from '../../../types';
import { endOfDay, setHours, startOfHour, subDays } from 'date-fns';

let stores: IUnleashStores;
Expand Down
@@ -1,18 +1,15 @@
import { Logger, LogProvider } from '../logger';
import { Logger, LogProvider } from '../../../logger';
import {
IClientMetricsEnv,
IClientMetricsEnvKey,
IClientMetricsEnvVariant,
IClientMetricsStoreV2,
} from '../types/stores/client-metrics-store-v2';
import NotFoundError from '../error/notfound-error';
} from './client-metrics-store-v2-type';
import NotFoundError from '../../../error/notfound-error';
import { endOfDay, startOfHour } from 'date-fns';
import {
collapseHourlyMetrics,
spreadVariants,
} from '../util/collapseHourlyMetrics';
import { Db } from './db';
import { IFlagResolver } from '../types';
import { collapseHourlyMetrics, spreadVariants } from './collapseHourlyMetrics';
import { Db } from '../../../db/db';
import { IFlagResolver } from '../../../types';

interface ClientMetricsBaseTable {
feature_name: string;
Expand Down
@@ -1,10 +1,10 @@
import dbInit, { ITestDb } from '../../helpers/database-init';
import dbInit, { ITestDb } from '../../../../test/e2e/helpers/database-init';
import {
IUnleashTest,
setupAppWithCustomConfig,
} from '../../helpers/test-helper';
import getLogger from '../../../fixtures/no-logger';
import { IClientMetricsEnv } from '../../../../lib/types/stores/client-metrics-store-v2';
} from '../../../../test/e2e/helpers/test-helper';
import getLogger from '../../../../test/fixtures/no-logger';
import { IClientMetricsEnv } from './client-metrics-store-v2-type';
import { subHours } from 'date-fns';

let app: IUnleashTest;
Expand Down
@@ -1,22 +1,22 @@
import { Request, Response } from 'express';
import Controller from '../controller';
import { IUnleashConfig } from '../../types/option';
import { IFlagResolver, IUnleashServices } from '../../types';
import { Logger } from '../../logger';
import ClientMetricsServiceV2 from '../../services/client-metrics/metrics-service-v2';
import { NONE } from '../../types/permissions';
import { createResponseSchema } from '../../openapi/util/create-response-schema';
import { OpenApiService } from '../../services/openapi-service';
import { serializeDates } from '../../types/serialize-dates';
import Controller from '../../../routes/controller';
import { IUnleashConfig } from '../../../types/option';
import { IFlagResolver, IUnleashServices } from '../../../types';
import { Logger } from '../../../logger';
import ClientMetricsServiceV2 from './metrics-service-v2';
import { NONE } from '../../../types/permissions';
import { createResponseSchema } from '../../../openapi/util/create-response-schema';
import { OpenApiService } from '../../../services/openapi-service';
import { serializeDates } from '../../../types/serialize-dates';
import {
FeatureUsageSchema,
featureUsageSchema,
} from '../../openapi/spec/feature-usage-schema';
} from '../../../openapi/spec/feature-usage-schema';
import {
featureMetricsSchema,
FeatureMetricsSchema,
} from '../../openapi/spec/feature-metrics-schema';
import { getStandardResponses } from '../../openapi';
} from '../../../openapi/spec/feature-metrics-schema';
import { getStandardResponses } from '../../../openapi';

interface IName {
name: string;
Expand Down
@@ -1,5 +1,5 @@
import { collapseHourlyMetrics } from './collapseHourlyMetrics';
import { IClientMetricsEnv } from '../types/stores/client-metrics-store-v2';
import { IClientMetricsEnv } from './client-metrics-store-v2-type';
import { addMinutes, startOfHour } from 'date-fns';

test('collapseHourlyMetrics', () => {
Expand Down
@@ -1,7 +1,7 @@
import {
IClientMetricsEnv,
IClientMetricsEnvVariant,
} from '../types/stores/client-metrics-store-v2';
} from './client-metrics-store-v2-type';
import { startOfHour } from 'date-fns';

const createMetricKey = (metric: IClientMetricsEnv): string => {
Expand Down
Expand Up @@ -5,7 +5,7 @@ import {
IClientMetricsEnv,
IClientMetricsEnvKey,
IClientMetricsStoreV2,
} from '../../lib/types/stores/client-metrics-store-v2';
} from './client-metrics-store-v2-type';

export default class FakeClientMetricsStoreV2
extends EventEmitter
Expand Down
@@ -1,13 +1,13 @@
import ClientMetricsServiceV2 from './metrics-service-v2';

import getLogger from '../../../test/fixtures/no-logger';
import getLogger from '../../../../test/fixtures/no-logger';

import createStores from '../../../test/fixtures/store';
import createStores from '../../../../test/fixtures/store';
import EventEmitter from 'events';
import { LastSeenService } from './last-seen/last-seen-service';
import { LastSeenService } from '../last-seen/last-seen-service';
import { IClientMetricsStoreV2, IUnleashConfig } from 'lib/types';
import { endOfDay, startOfHour, subDays, subHours } from 'date-fns';
import { IClientMetricsEnv } from '../../types/stores/client-metrics-store-v2';
import { IClientMetricsEnv } from './client-metrics-store-v2-type';

function initClientMetrics(flagEnabled = true) {
const stores = createStores();
Expand Down
@@ -1,26 +1,26 @@
import { Logger } from '../../logger';
import { IFlagResolver, IUnleashConfig } from '../../types';
import { IUnleashStores } from '../../types';
import { ToggleMetricsSummary } from '../../types/models/metrics';
import { Logger } from '../../../logger';
import { IFlagResolver, IUnleashConfig } from '../../../types';
import { IUnleashStores } from '../../../types';
import { ToggleMetricsSummary } from '../../../types/models/metrics';
import {
IClientMetricsEnv,
IClientMetricsStoreV2,
} from '../../types/stores/client-metrics-store-v2';
import { clientMetricsSchema } from './schema';
} from './client-metrics-store-v2-type';
import { clientMetricsSchema } from '../shared/schema';
import { compareAsc } from 'date-fns';
import { CLIENT_METRICS } from '../../types/events';
import ApiUser, { IApiUser } from '../../types/api-user';
import { ALL } from '../../types/models/api-token';
import { IUser } from '../../types/user';
import { collapseHourlyMetrics } from '../../util/collapseHourlyMetrics';
import { LastSeenService } from './last-seen/last-seen-service';
import { CLIENT_METRICS } from '../../../types/events';
import ApiUser, { IApiUser } from '../../../types/api-user';
import { ALL } from '../../../types/models/api-token';
import { IUser } from '../../../types/user';
import { collapseHourlyMetrics } from './collapseHourlyMetrics';
import { LastSeenService } from '../last-seen/last-seen-service';
import {
generateDayBuckets,
generateHourBuckets,
HourBucket,
} from '../../util/time-utils';
} from '../../../util/time-utils';
import { ClientMetricsSchema } from 'lib/openapi';
import { nameSchema } from '../../schema/feature-schema';
import { nameSchema } from '../../../schema/feature-schema';

export default class ClientMetricsServiceV2 {
private config: IUnleashConfig;
Expand Down
@@ -1,12 +1,12 @@
import ClientInstanceService from './instance-service';
import { IClientApp } from '../../types/model';
import FakeEventStore from '../../../test/fixtures/fake-event-store';
import { createTestConfig } from '../../../test/config/test-config';
import { FakePrivateProjectChecker } from '../../features/private-project/fakePrivateProjectChecker';
import { IUnleashConfig } from '../../types';
import FakeClientMetricsStoreV2 from '../../../test/fixtures/fake-client-metrics-store-v2';
import FakeStrategiesStore from '../../../test/fixtures/fake-strategies-store';
import FakeFeatureToggleStore from '../../features/feature-toggle/fakes/fake-feature-toggle-store';
import { IClientApp } from '../../../types/model';
import FakeEventStore from '../../../../test/fixtures/fake-event-store';
import { createTestConfig } from '../../../../test/config/test-config';
import { FakePrivateProjectChecker } from '../../private-project/fakePrivateProjectChecker';
import { IUnleashConfig } from '../../../types';
import FakeClientMetricsStoreV2 from '../client-metrics/fake-client-metrics-store-v2';
import FakeStrategiesStore from '../../../../test/fixtures/fake-strategies-store';
import FakeFeatureToggleStore from '../../feature-toggle/fakes/fake-feature-toggle-store';

let config: IUnleashConfig;
beforeAll(() => {
Expand Down
@@ -1,26 +1,26 @@
import { APPLICATION_CREATED, CLIENT_REGISTER } from '../../types/events';
import { APPLICATION_CREATED, CLIENT_REGISTER } from '../../../types/events';
import { IApplication } from './models';
import { IUnleashStores } from '../../types/stores';
import { IUnleashConfig } from '../../types/option';
import { IEventStore } from '../../types/stores/event-store';
import { IUnleashStores } from '../../../types/stores';
import { IUnleashConfig } from '../../../types/option';
import { IEventStore } from '../../../types/stores/event-store';
import {
IClientApplication,
IClientApplicationsStore,
} from '../../types/stores/client-applications-store';
import { IFeatureToggleStore } from '../../features/feature-toggle/types/feature-toggle-store-type';
import { IStrategyStore } from '../../types/stores/strategy-store';
import { IClientInstanceStore } from '../../types/stores/client-instance-store';
import { IApplicationQuery } from '../../types/query';
import { IClientApp } from '../../types/model';
import { clientRegisterSchema } from './schema';

import { IClientMetricsStoreV2 } from '../../types/stores/client-metrics-store-v2';
import { clientMetricsSchema } from './schema';
import { PartialSome } from '../../types/partial';
import { IPrivateProjectChecker } from '../../features/private-project/privateProjectCheckerType';
import { IFlagResolver, SYSTEM_USER } from '../../types';
import { ALL_PROJECTS } from '../../util';
import { Logger } from '../../logger';
} from '../../../types/stores/client-applications-store';
import { IFeatureToggleStore } from '../../feature-toggle/types/feature-toggle-store-type';
import { IStrategyStore } from '../../../types/stores/strategy-store';
import { IClientInstanceStore } from '../../../types/stores/client-instance-store';
import { IApplicationQuery } from '../../../types/query';
import { IClientApp } from '../../../types/model';
import { clientRegisterSchema } from '../shared/schema';

import { IClientMetricsStoreV2 } from '../client-metrics/client-metrics-store-v2-type';
import { clientMetricsSchema } from '../shared/schema';
import { PartialSome } from '../../../types/partial';
import { IPrivateProjectChecker } from '../../private-project/privateProjectCheckerType';
import { IFlagResolver, SYSTEM_USER } from '../../../types';
import { ALL_PROJECTS } from '../../../util';
import { Logger } from '../../../logger';

export default class ClientInstanceService {
apps = {};
Expand Down
@@ -1,17 +1,17 @@
import supertest from 'supertest';
import getApp from '../../app';
import { createTestConfig } from '../../../test/config/test-config';
import { clientMetricsSchema } from '../../services/client-metrics/schema';
import { createServices } from '../../services';
import getApp from '../../../app';
import { createTestConfig } from '../../../../test/config/test-config';
import { clientMetricsSchema } from '../shared/schema';
import { createServices } from '../../../services';
import {
IAuthType,
IUnleashOptions,
IUnleashServices,
IUnleashStores,
} from '../../types';
import dbInit, { ITestDb } from '../../../test/e2e/helpers/database-init';
} from '../../../types';
import dbInit, { ITestDb } from '../../../../test/e2e/helpers/database-init';
import { subMinutes } from 'date-fns';
import { ApiTokenType } from '../../types/models/api-token';
import { ApiTokenType } from '../../../types/models/api-token';

let db: ITestDb;

Expand Down
@@ -1,22 +1,26 @@
import { Response } from 'express';
import Controller from '../controller';
import { IFlagResolver, IUnleashConfig, IUnleashServices } from '../../types';
import ClientInstanceService from '../../services/client-metrics/instance-service';
import { Logger } from '../../logger';
import { IAuthRequest } from '../unleash-types';
import ClientMetricsServiceV2 from '../../services/client-metrics/metrics-service-v2';
import { NONE } from '../../types/permissions';
import { OpenApiService } from '../../services/openapi-service';
import { createRequestSchema } from '../../openapi/util/create-request-schema';
import Controller from '../../../routes/controller';
import {
IFlagResolver,
IUnleashConfig,
IUnleashServices,
} from '../../../types';
import ClientInstanceService from './instance-service';
import { Logger } from '../../../logger';
import { IAuthRequest } from '../../../routes/unleash-types';
import ClientMetricsServiceV2 from '../client-metrics/metrics-service-v2';
import { NONE } from '../../../types/permissions';
import { OpenApiService } from '../../../services/openapi-service';
import { createRequestSchema } from '../../../openapi/util/create-request-schema';
import {
emptyResponse,
getStandardResponses,
} from '../../openapi/util/standard-responses';
} from '../../../openapi/util/standard-responses';
import rateLimit from 'express-rate-limit';
import { minutesToMilliseconds } from 'date-fns';
import { BulkMetricsSchema } from '../../openapi/spec/bulk-metrics-schema';
import { clientMetricsEnvBulkSchema } from '../../services/client-metrics/schema';
import { IClientMetricsEnv } from '../../types/stores/client-metrics-store-v2';
import { BulkMetricsSchema } from '../../../openapi/spec/bulk-metrics-schema';
import { clientMetricsEnvBulkSchema } from '../shared/schema';
import { IClientMetricsEnv } from '../client-metrics/client-metrics-store-v2-type';

export default class ClientMetricsController extends Controller {
logger: Logger;
Expand Down
@@ -1,4 +1,4 @@
import { IClientInstance } from '../../types/stores/client-instance-store';
import { IClientInstance } from '../../../types/stores/client-instance-store';

export interface IYesNoCount {
yes: number;
Expand Down

0 comments on commit 16691d7

Please sign in to comment.