Skip to content

Commit c410201

Browse files
committed
#RI-4667 - Telemetry improvements
1 parent 8386874 commit c410201

File tree

6 files changed

+86
-1
lines changed

6 files changed

+86
-1
lines changed

redisinsight/api/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"start": "nest start",
2424
"start:dev": "cross-env NODE_ENV=development BUILD_TYPE=DOCKER_ON_PREMISE SERVER_STATIC_CONTENT=1 nest start --watch",
2525
"start:debug": "nest start --debug --watch",
26-
"start:stage": "cross-env NODE_ENV=staging SERVER_STATIC_CONTENT=true node dist/src/main",
26+
"start:stage": "cross-env NODE_ENV=staging BUILD_TYPE=DOCKER_ON_PREMISE SERVER_STATIC_CONTENT=true node dist/src/main",
2727
"start:prod": "cross-env NODE_ENV=production node dist/src/main",
2828
"test": "cross-env NODE_ENV=test ./node_modules/.bin/jest -w 1",
2929
"test:watch": "cross-env NODE_ENV=test jest --watch -w 1",

redisinsight/api/src/constants/telemetry-events.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ export enum TelemetryEvents {
7272
FeatureFlagConfigUpdateError = 'FEATURE_FLAG_CONFIG_UPDATE_ERROR',
7373
FeatureFlagInvalidRemoteConfig = 'FEATURE_FLAG_INVALID_REMOTE_CONFIG',
7474
FeatureFlagRecalculated = 'FEATURE_FLAG_RECALCULATED',
75+
76+
// Insights
77+
InsightsRecommendationGenerated = 'INSIGHTS_RECOMMENDATION_GENERATED',
7578
}
7679

7780
export enum CommandType {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { EventEmitter2 } from '@nestjs/event-emitter';
3+
import {
4+
mockDatabase,
5+
mockDatabaseRecommendation,
6+
mockDatabaseWithTlsAuth,
7+
} from 'src/__mocks__';
8+
import { TelemetryEvents } from 'src/constants';
9+
import { DatabaseRecommendationAnalytics } from './database-recommendation.analytics';
10+
11+
const provider = 'cloud'
12+
13+
describe('DatabaseRecommendationAnalytics', () => {
14+
let service: DatabaseRecommendationAnalytics;
15+
let sendEventSpy;
16+
let sendFailedEventSpy;
17+
18+
beforeEach(async () => {
19+
const module: TestingModule = await Test.createTestingModule({
20+
providers: [
21+
EventEmitter2,
22+
DatabaseRecommendationAnalytics,
23+
],
24+
}).compile();
25+
26+
service = await module.get(DatabaseRecommendationAnalytics);
27+
sendEventSpy = jest.spyOn(service as any, 'sendEvent');
28+
sendFailedEventSpy = jest.spyOn(service as any, 'sendFailedEvent');
29+
});
30+
31+
describe('sendInstanceAddedEvent', () => {
32+
it('should emit event with recommendationName and provider', () => {
33+
service.sendCreatedRecommendationEvent(
34+
mockDatabaseRecommendation,
35+
mockDatabaseWithTlsAuth,
36+
);
37+
38+
expect(sendEventSpy).toHaveBeenCalledWith(
39+
TelemetryEvents.InsightsRecommendationGenerated,
40+
{
41+
recommendationName: mockDatabaseRecommendation.name,
42+
databaseId: mockDatabase.id,
43+
provider: mockDatabaseWithTlsAuth.provider,
44+
},
45+
);
46+
});
47+
});
48+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { EventEmitter2 } from '@nestjs/event-emitter';
3+
import { TelemetryBaseService } from 'src/modules/analytics/telemetry.base.service';
4+
import { TelemetryEvents } from 'src/constants';
5+
import { DatabaseRecommendation } from './models';
6+
import { Database } from '../database/models/database';
7+
8+
@Injectable()
9+
export class DatabaseRecommendationAnalytics extends TelemetryBaseService {
10+
constructor(protected eventEmitter: EventEmitter2) {
11+
super(eventEmitter);
12+
}
13+
14+
sendCreatedRecommendationEvent(recommendation: DatabaseRecommendation, database: Database): void {
15+
this.sendEvent(
16+
TelemetryEvents.InsightsRecommendationGenerated,
17+
{
18+
recommendationName: recommendation.name,
19+
databaseId: database.id,
20+
provider: database.provider,
21+
},
22+
);
23+
}
24+
}

redisinsight/api/src/modules/database-recommendation/database-recommendation.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { DatabaseRecommendationGateway } from 'src/modules/database-recommendati
1010
import {
1111
DatabaseRecommendationEmitter,
1212
} from 'src/modules/database-recommendation/providers/database-recommendation.emitter';
13+
import { DatabaseRecommendationAnalytics } from 'src/modules/database-recommendation/database-recommendation.analytics';
1314

1415
@Module({})
1516
export class DatabaseRecommendationModule {
@@ -25,6 +26,7 @@ export class DatabaseRecommendationModule {
2526
RecommendationProvider,
2627
DatabaseRecommendationGateway,
2728
DatabaseRecommendationEmitter,
29+
DatabaseRecommendationAnalytics,
2830
{
2931
provide: DatabaseRecommendationRepository,
3032
useClass: databaseRecommendationRepository,

redisinsight/api/src/modules/database-recommendation/repositories/local.database.recommendation.repository.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import {
2222
import { RecommendationEvents } from 'src/modules/database-recommendation/constants';
2323
import { EventEmitter2 } from '@nestjs/event-emitter';
2424
import { ModelEncryptor } from 'src/modules/encryption/model.encryptor';
25+
import { DatabaseService } from 'src/modules/database/database.service';
26+
import { DatabaseRecommendationAnalytics } from '../database-recommendation.analytics';
2527

2628
@Injectable()
2729
export class LocalDatabaseRecommendationRepository extends DatabaseRecommendationRepository {
@@ -33,6 +35,8 @@ export class LocalDatabaseRecommendationRepository extends DatabaseRecommendatio
3335
@InjectRepository(DatabaseRecommendationEntity)
3436
private readonly repository: Repository<DatabaseRecommendationEntity>,
3537
private eventEmitter: EventEmitter2,
38+
private readonly analytics: DatabaseRecommendationAnalytics,
39+
private readonly databaseService: DatabaseService,
3640
private readonly encryptionService: EncryptionService,
3741
) {
3842
super();
@@ -56,6 +60,10 @@ export class LocalDatabaseRecommendationRepository extends DatabaseRecommendatio
5660
);
5761
this.eventEmitter.emit(RecommendationEvents.NewRecommendation, [recommendation]);
5862

63+
const database = await this.databaseService.get(entity?.databaseId)
64+
65+
this.analytics.sendCreatedRecommendationEvent(recommendation, database)
66+
5967
return recommendation;
6068
}
6169

0 commit comments

Comments
 (0)