Skip to content

Commit dc63728

Browse files
#RI-5750 - update rdi with new api
1 parent 630ed86 commit dc63728

File tree

7 files changed

+75
-31
lines changed

7 files changed

+75
-31
lines changed

redisinsight/api/src/modules/rdi/client/api.rdi.client.ts

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ import {
1414
import {
1515
RdiDryRunJobDto,
1616
RdiDryRunJobResponseDto,
17+
RdiTemplateResponseDto,
1718
RdiTestConnectionsResponseDto,
1819
} from 'src/modules/rdi/dto';
1920
import {
20-
RdiPipelineDeployFailedException,
2121
RdiPipelineInternalServerErrorException,
2222
wrapRdiPipelineError,
2323
} from 'src/modules/rdi/exceptions';
@@ -29,8 +29,7 @@ import {
2929
} from 'src/modules/rdi/models';
3030
import { convertKeysToCamelCase } from 'src/utils/base.helper';
3131
import { RdiPipelineTimeoutException } from 'src/modules/rdi/exceptions/rdi-pipeline.timeout-error.exception';
32-
33-
const RDI_DEPLOY_FAILED_STATUS = 'failed';
32+
import * as https from 'https';
3433

3534
export class ApiRdiClient extends RdiClient {
3635
protected readonly client: AxiosInstance;
@@ -42,6 +41,9 @@ export class ApiRdiClient extends RdiClient {
4241
this.client = axios.create({
4342
baseURL: rdi.url,
4443
timeout: RDI_TIMEOUT,
44+
httpsAgent: new https.Agent({
45+
rejectUnauthorized: false,
46+
}),
4547
});
4648
}
4749

@@ -72,25 +74,32 @@ export class ApiRdiClient extends RdiClient {
7274
}
7375
}
7476

75-
async getTemplate(options: object): Promise<object> {
77+
async getConfigTemplate(pipelineType: string, dbType: string): Promise<RdiTemplateResponseDto> {
7678
try {
77-
const response = await this.client.get(RdiUrl.GetTemplate, { params: options });
79+
const response = await this.client.get(`${RdiUrl.GetConfigTemplate}/${pipelineType}/${dbType}`);
7880
return response.data;
7981
} catch (error) {
8082
throw wrapRdiPipelineError(error);
8183
}
8284
}
8385

84-
async deploy(pipeline: RdiPipeline): Promise<void> {
85-
let response;
86+
async getJobTemplate(pipelineType: string): Promise<RdiTemplateResponseDto> {
8687
try {
87-
response = await this.client.post(RdiUrl.Deploy, { ...pipeline });
88+
const response = await this.client.get(`${RdiUrl.GetJobTemplate}/${pipelineType}`);
89+
return response.data;
8890
} catch (error) {
89-
throw wrapRdiPipelineError(error, error.response.data.message);
91+
throw wrapRdiPipelineError(error);
9092
}
93+
}
9194

92-
if (response.data?.status === RDI_DEPLOY_FAILED_STATUS) {
93-
throw new RdiPipelineDeployFailedException(undefined, { error: response.data?.error });
95+
async deploy(pipeline: RdiPipeline): Promise<void> {
96+
try {
97+
const response = await this.client.post(RdiUrl.Deploy, { ...pipeline });
98+
const actionId = response.data.action_id;
99+
100+
return this.pollActionStatus(actionId);
101+
} catch (error) {
102+
throw wrapRdiPipelineError(error, error.response.data.message);
94103
}
95104
}
96105

@@ -147,7 +156,7 @@ export class ApiRdiClient extends RdiClient {
147156

148157
async getJobFunctions(): Promise<object> {
149158
try {
150-
const response = await this.client.post(RdiUrl.JobFunctions);
159+
const response = await this.client.get(RdiUrl.JobFunctions);
151160
return response.data;
152161
} catch (e) {
153162
throw wrapRdiPipelineError(e);
@@ -178,10 +187,10 @@ export class ApiRdiClient extends RdiClient {
178187
}
179188
}
180189

181-
private async pollActionStatus(actionId: string, abortSignal: AbortSignal): Promise<any> {
190+
private async pollActionStatus(actionId: string, abortSignal?: AbortSignal): Promise<any> {
182191
const startTime = Date.now();
183192
while (true) {
184-
if (abortSignal.aborted) {
193+
if (abortSignal?.aborted) {
185194
throw new RdiPipelineInternalServerErrorException();
186195
}
187196
if (Date.now() - startTime > MAX_POLLING_TIME) {

redisinsight/api/src/modules/rdi/client/rdi.client.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
RdiClientMetadata, RdiPipeline, RdiStatisticsResult,
55
} from 'src/modules/rdi/models';
66
import {
7-
RdiDryRunJobDto, RdiDryRunJobResponseDto, RdiTestConnectionsResponseDto,
7+
RdiDryRunJobDto, RdiDryRunJobResponseDto, RdiTemplateResponseDto, RdiTestConnectionsResponseDto,
88
} from 'src/modules/rdi/dto';
99
import { IDLE_TRESHOLD } from 'src/modules/rdi/constants';
1010

@@ -28,8 +28,9 @@ export abstract class RdiClient {
2828

2929
abstract getPipeline(): Promise<RdiPipeline>;
3030

31-
// TODO validate options and response
32-
abstract getTemplate(options: object): Promise<unknown>;
31+
abstract getConfigTemplate(pipelineType: string, dbType: string): Promise<RdiTemplateResponseDto>;
32+
33+
abstract getJobTemplate(pipelineType: string): Promise<RdiTemplateResponseDto>;
3334

3435
abstract getStrategies(): Promise<object>;
3536

redisinsight/api/src/modules/rdi/constants/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ export enum RdiUrl {
22
GetSchema = 'api/v1/schemas',
33
GetPipeline = 'api/v1/pipelines',
44
GetStrategies = 'api/v1/pipelines/strategies',
5-
GetTemplate = 'deployments/templates',
5+
GetConfigTemplate = 'api/v1/pipelines/config/templates',
6+
GetJobTemplate = 'api/v1/pipelines/jobs/templates',
67
DryRunJob = 'api/v1/pipelines/jobs/dry-run',
78
JobFunctions = '/api/v1/pipelines/jobs/functions',
89
Deploy = 'api/v1/pipelines',

redisinsight/api/src/modules/rdi/dto/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from './update.rdi.dto';
33
export * from './rdi.dry-run.job.dto';
44
export * from './rdi.dry-run.job.response.dto';
55
export * from './rdi-test-connections.response.dto';
6+
export * from './rdi-template.response.dto';
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { Expose } from 'class-transformer';
3+
4+
export class RdiTemplateResponseDto {
5+
@ApiProperty({
6+
description: 'Template for rdi file',
7+
type: String,
8+
})
9+
@Expose()
10+
template: string;
11+
}

redisinsight/api/src/modules/rdi/rdi-pipeline.controller.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import {
22
Body,
33
ClassSerializerInterceptor, Controller, Get, Post, UseInterceptors, UsePipes, ValidationPipe,
4-
Query, Req,
4+
Req, Param,
55
} from '@nestjs/common';
66
import { Rdi, RdiPipeline, RdiClientMetadata } from 'src/modules/rdi/models';
77
import { ApiTags } from '@nestjs/swagger';
88
import { Request } from 'express';
99
import { ApiEndpoint } from 'src/decorators/api-endpoint.decorator';
1010
import { RdiPipelineService } from 'src/modules/rdi/rdi-pipeline.service';
1111
import { RequestRdiClientMetadata } from 'src/modules/rdi/decorators';
12-
import { RdiDryRunJobDto, RdiTestConnectionsResponseDto } from 'src/modules/rdi/dto';
12+
import { RdiDryRunJobDto, RdiTemplateResponseDto, RdiTestConnectionsResponseDto } from 'src/modules/rdi/dto';
1313
import { RdiDryRunJobResponseDto } from 'src/modules/rdi/dto/rdi.dry-run.job.response.dto';
1414

1515
@ApiTags('RDI')
@@ -91,16 +91,29 @@ export class RdiPipelineController {
9191
return this.rdiPipelineService.getStrategies(rdiClientMetadata);
9292
}
9393

94-
@Get('/template')
94+
@Get('/job/template/:pipelineType')
9595
@ApiEndpoint({
96-
description: 'Get pipeline template for selected pipeline type',
97-
responses: [{ status: 200, type: Rdi }],
96+
description: 'Get job template for selected pipeline type',
97+
responses: [{ status: 200, type: RdiTemplateResponseDto }],
9898
})
99-
async getTemplate(
99+
async getJobTemplate(
100100
@RequestRdiClientMetadata() rdiClientMetadata: RdiClientMetadata,
101-
@Query() options: object,
102-
): Promise<unknown> {
103-
return this.rdiPipelineService.getTemplate(rdiClientMetadata, options);
101+
@Param('pipelineType') pipelineType: string,
102+
): Promise<RdiTemplateResponseDto> {
103+
return this.rdiPipelineService.getJobTemplate(rdiClientMetadata, pipelineType);
104+
}
105+
106+
@Get('/config/template/:pipelineType/:dbType')
107+
@ApiEndpoint({
108+
description: 'Get config template for selected pipeline and db types',
109+
responses: [{ status: 200, type: RdiTemplateResponseDto }],
110+
})
111+
async getConfigTemplate(
112+
@RequestRdiClientMetadata() rdiClientMetadata: RdiClientMetadata,
113+
@Param('pipelineType') pipelineType: string,
114+
@Param('dbType') dbType: string,
115+
): Promise<RdiTemplateResponseDto> {
116+
return this.rdiPipelineService.getConfigTemplate(rdiClientMetadata, pipelineType, dbType);
104117
}
105118

106119
@Get('/status')

redisinsight/api/src/modules/rdi/rdi-pipeline.service.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
22
import { Request } from 'express';
33
import { RdiClientMetadata, RdiPipeline } from 'src/modules/rdi/models';
44
import { RdiClientProvider } from 'src/modules/rdi/providers/rdi.client.provider';
5-
import { RdiDryRunJobDto, RdiTestConnectionsResponseDto } from 'src/modules/rdi/dto';
5+
import { RdiDryRunJobDto, RdiTemplateResponseDto, RdiTestConnectionsResponseDto } from 'src/modules/rdi/dto';
66
import { RdiDryRunJobResponseDto } from 'src/modules/rdi/dto/rdi.dry-run.job.response.dto';
77
import { RdiPipelineAnalytics } from 'src/modules/rdi/rdi-pipeline.analytics';
88
import { wrapHttpError } from 'src/common/utils';
@@ -85,12 +85,20 @@ export class RdiPipelineService {
8585
return await client.getStrategies();
8686
}
8787

88-
async getTemplate(rdiClientMetadata: RdiClientMetadata, options: object): Promise<unknown> {
89-
this.logger.log('Getting RDI pipeline template');
88+
async getConfigTemplate(rdiClientMetadata: RdiClientMetadata, pipelineType: string, dbType: string): Promise<RdiTemplateResponseDto> {
89+
this.logger.log('Getting RDI config template');
9090

9191
const client = await this.rdiClientProvider.getOrCreate(rdiClientMetadata);
9292

93-
return await client.getTemplate(options);
93+
return await client.getConfigTemplate(pipelineType, dbType);
94+
}
95+
96+
async getJobTemplate(rdiClientMetadata: RdiClientMetadata, pipelineType: string): Promise<RdiTemplateResponseDto> {
97+
this.logger.log('Getting RDI job template');
98+
99+
const client = await this.rdiClientProvider.getOrCreate(rdiClientMetadata);
100+
101+
return await client.getJobTemplate(pipelineType);
94102
}
95103

96104
async getPipelineStatus(rdiClientMetadata: RdiClientMetadata): Promise<unknown> {

0 commit comments

Comments
 (0)