Skip to content

Commit 717698c

Browse files
change jobs schema
1 parent 6e8231a commit 717698c

File tree

4 files changed

+72
-7
lines changed

4 files changed

+72
-7
lines changed

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
import { convertKeysToCamelCase } from 'src/utils/base.helper';
3232
import { RdiPipelineTimeoutException } from 'src/modules/rdi/exceptions/rdi-pipeline.timeout-error.exception';
3333
import * as https from 'https';
34+
import { convertApiDataToRdiPipeline, convertRdiPipelineToApiPayload } from 'src/modules/rdi/utils/pipeline.util';
3435

3536
export class ApiRdiClient extends RdiClient {
3637
protected readonly client: AxiosInstance;
@@ -59,8 +60,9 @@ export class ApiRdiClient extends RdiClient {
5960

6061
async getPipeline(): Promise<RdiPipeline> {
6162
try {
62-
const response = await this.client.get(RdiUrl.GetPipeline);
63-
return response.data;
63+
const { data } = await this.client.get(RdiUrl.GetPipeline);
64+
65+
return convertApiDataToRdiPipeline(data);
6466
} catch (e) {
6567
throw wrapRdiPipelineError(e);
6668
}
@@ -95,7 +97,11 @@ export class ApiRdiClient extends RdiClient {
9597

9698
async deploy(pipeline: RdiPipeline): Promise<void> {
9799
try {
98-
const response = await this.client.post(RdiUrl.Deploy, { ...pipeline });
100+
const response = await this.client.post(
101+
RdiUrl.Deploy,
102+
convertRdiPipelineToApiPayload(pipeline),
103+
);
104+
99105
const actionId = response.data.action_id;
100106

101107
return await this.pollActionStatus(actionId);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import {
22
IsObject, IsOptional,
33
} from 'class-validator';
4+
import { Expose } from 'class-transformer';
45

56
export class RdiPipeline {
7+
@Expose()
68
@IsOptional()
79
@IsObject()
810
// todo add validation
911
jobs: { [key: string]: object };
1012

13+
@Expose()
1114
@IsOptional()
1215
@IsObject()
1316
config: object;

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { RdiDryRunJobDto, RdiTemplateResponseDto, RdiTestConnectionsResponseDto
55
import { RdiDryRunJobResponseDto } from 'src/modules/rdi/dto/rdi.dry-run.job.response.dto';
66
import { RdiPipelineAnalytics } from 'src/modules/rdi/rdi-pipeline.analytics';
77
import { wrapHttpError } from 'src/common/utils';
8-
import { plainToClass } from 'class-transformer';
98

109
@Injectable()
1110
export class RdiPipelineService {
@@ -29,13 +28,13 @@ export class RdiPipelineService {
2928
try {
3029
const client = await this.rdiClientProvider.getOrCreate(rdiClientMetadata);
3130

32-
const response = await client.getPipeline();
31+
const pipeline = await client.getPipeline();
3332

34-
this.analytics.sendRdiPipelineFetched(rdiClientMetadata.id, response);
33+
this.analytics.sendRdiPipelineFetched(rdiClientMetadata.id, pipeline);
3534

3635
this.logger.log('Succeed to get RDI pipeline');
3736

38-
return plainToClass(RdiPipeline, response);
37+
return pipeline;
3938
} catch (e) {
4039
this.logger.error('Failed to get RDI pipeline', e);
4140

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import {
2+
isArray, unset, set, forEach,
3+
} from 'lodash';
4+
import { plainToClass } from 'class-transformer';
5+
import { RdiPipeline } from 'src/modules/rdi/models';
6+
7+
export const convertApiDataToRdiJobs = (jobs?: [Record<string, any>]): Record<string, any> => {
8+
const jobsMap = {};
9+
10+
if (jobs && isArray(jobs)) {
11+
jobs.forEach((job) => {
12+
if (job?.name) {
13+
jobsMap[job.name] = {
14+
...job,
15+
name: undefined, // do not show name in the config area
16+
};
17+
}
18+
});
19+
}
20+
21+
return jobsMap;
22+
};
23+
24+
export const convertApiDataToRdiPipeline = (data: { config?: Record<string, any> } = {}): RdiPipeline => {
25+
const pipeline = {
26+
...data,
27+
jobs: convertApiDataToRdiJobs(data.config.jobs),
28+
};
29+
30+
// do not show jobs in the config area
31+
unset(pipeline, 'config.jobs');
32+
33+
return plainToClass(RdiPipeline, pipeline, { excludeExtraneousValues: true });
34+
};
35+
36+
export const convertRdiJobsToApiPayload = (jobs: Record<string, any>): Record<string, any>[] => {
37+
const payload = [];
38+
39+
forEach(jobs, (job, key) => {
40+
payload.push({
41+
...job,
42+
name: key,
43+
});
44+
});
45+
46+
return payload;
47+
};
48+
49+
export const convertRdiPipelineToApiPayload = (pipeline: RdiPipeline): { config?: Record<string, any> } => {
50+
const payload = {
51+
...pipeline,
52+
jobs: undefined,
53+
};
54+
55+
set(payload, 'config.jobs', convertRdiJobsToApiPayload(pipeline.jobs));
56+
return payload;
57+
};

0 commit comments

Comments
 (0)