Skip to content

Commit 07e2fb0

Browse files
authored
RI-7094: Recalculate provider on db connect (#4542)
* Enhance the db connect logic to update the provider if it is not available in the predefined Hosting Provider list
1 parent 47d631d commit 07e2fb0

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

redisinsight/api/src/modules/database/database-connection.service.spec.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,18 @@ import { DatabaseConnectionService } from 'src/modules/database/database-connect
2525
import { RECOMMENDATION_NAMES } from 'src/constants';
2626
import { DatabaseClientFactory } from 'src/modules/database/providers/database.client.factory';
2727
import { FeatureService } from 'src/modules/feature/feature.service';
28+
import { getHostingProvider } from 'src/utils/hosting-provider-helper';
29+
import { HostingProvider } from 'src/modules/database/entities/database.entity';
30+
31+
jest.mock('src/utils/hosting-provider-helper');
2832

2933
describe('DatabaseConnectionService', () => {
3034
let service: DatabaseConnectionService;
3135
let analytics: MockType<DatabaseAnalytics>;
3236
let recommendationService: MockType<DatabaseRecommendationService>;
3337
let databaseInfoProvider: MockType<DatabaseInfoProvider>;
3438
let featureService: MockType<FeatureService>;
39+
let repository: MockType<DatabaseRepository>;
3540

3641
beforeEach(async () => {
3742
jest.clearAllMocks();
@@ -76,6 +81,7 @@ describe('DatabaseConnectionService', () => {
7681
recommendationService = module.get(DatabaseRecommendationService);
7782
databaseInfoProvider = module.get(DatabaseInfoProvider);
7883
featureService = module.get(FeatureService);
84+
repository = module.get(DatabaseRepository);
7985

8086
featureService.getByName.mockResolvedValue({
8187
flag: false,
@@ -107,6 +113,33 @@ describe('DatabaseConnectionService', () => {
107113
);
108114
});
109115

116+
it('should recalculate provider if not available in the list of providers', async () => {
117+
const testHost = 'localhost';
118+
repository.get.mockResolvedValue({
119+
host: testHost,
120+
provider: 'not-in-providers-enum',
121+
});
122+
123+
(getHostingProvider as jest.Mock).mockResolvedValue(
124+
HostingProvider.REDIS_STACK,
125+
);
126+
127+
await service.connect(mockCommonClientMetadata);
128+
129+
expect(getHostingProvider).toHaveBeenCalledWith(
130+
expect.any(Object),
131+
testHost,
132+
);
133+
134+
expect(repository.update).toHaveBeenCalledWith(
135+
mockCommonClientMetadata.sessionMetadata,
136+
mockCommonClientMetadata.databaseId,
137+
expect.objectContaining({
138+
provider: HostingProvider.REDIS_STACK,
139+
}),
140+
);
141+
});
142+
110143
it('should call check try rdi recommendation', async () => {
111144
featureService.getByName.mockResolvedValueOnce({
112145
flag: true,

redisinsight/api/src/modules/database/database-connection.service.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
22
import { RECOMMENDATION_NAMES } from 'src/constants';
33
import { DatabaseRepository } from 'src/modules/database/repositories/database.repository';
44
import { DatabaseAnalytics } from 'src/modules/database/database.analytics';
5+
import { HostingProvider } from 'src/modules/database/entities/database.entity';
56
import { DatabaseInfoProvider } from 'src/modules/database/providers/database-info.provider';
67
import { DatabaseRecommendationService } from 'src/modules/database-recommendation/database-recommendation.service';
78
import { Database } from 'src/modules/database/models/database';
@@ -13,6 +14,7 @@ import {
1314
} from 'src/modules/redis/client';
1415
import { FeatureService } from 'src/modules/feature/feature.service';
1516
import { KnownFeatures } from 'src/modules/feature/constants';
17+
import { getHostingProvider } from 'src/utils/hosting-provider-helper';
1618

1719
@Injectable()
1820
export class DatabaseConnectionService {
@@ -28,7 +30,8 @@ export class DatabaseConnectionService {
2830
) {}
2931

3032
/**
31-
* Connects to database and updates modules list and last connected time
33+
* Connects to database and updates modules list, last connected time
34+
* and provider if not available in the list of providers
3235
* @param clientMetadata
3336
*/
3437
async connect(clientMetadata: ClientMetadata): Promise<void> {
@@ -45,6 +48,15 @@ export class DatabaseConnectionService {
4548
version: await this.databaseInfoProvider.determineDatabaseServer(client),
4649
};
4750

51+
const { host, provider } = await this.repository.get(
52+
clientMetadata.sessionMetadata,
53+
clientMetadata.databaseId,
54+
);
55+
56+
if (!HostingProvider[provider]) {
57+
toUpdate.provider = await getHostingProvider(client, host);
58+
}
59+
4860
const connectionType = client?.getConnectionType();
4961
// Update cluster nodes db record
5062
if (connectionType === RedisClientConnectionType.CLUSTER) {

0 commit comments

Comments
 (0)