*/
-
-import {
- Count,
- CountSchema,
- Filter,
- repository,
- Where,
-} from '@loopback/repository';
-import {
- post,
- param,
- get,
- getFilterSchemaFor,
- getWhereSchemaFor,
- patch,
- put,
- del,
- requestBody,
- Request,
- Response,
- RestBindings,
-} from '@loopback/rest';
-import {Blueprint} from '../models';
+import { get, param, post, Request, requestBody, Response, RestBindings, del } from '@loopback/rest';
+import { Blueprint } from '../models';
import { inject } from '@loopback/core';
import { BlueprintService } from '../services';
import * as fs from 'fs';
import * as multiparty from 'multiparty';
import * as request_lib from 'request';
-import {controllerApiConfig, processorApiConfig, appConfig} from '../config/app-config';
-import {bluePrintManagementServiceGrpcClient} from '../clients/blueprint-management-service-grpc-client';
+import { appConfig, processorApiConfig } from '../config/app-config';
+import { bluePrintManagementServiceGrpcClient } from '../clients/blueprint-management-service-grpc-client';
+import { BlueprintDetail } from '../models/blueprint.detail.model';
export class BlueprintRestController {
constructor(
- @inject('services.BlueprintService')
+ @inject('services.BlueprintService')
public bpservice: BlueprintService,
- ) {}
+ ) {
+ }
- @get('/blueprints', {
+ @get('/controllerblueprint/all', {
responses: {
'200': {
description: 'Blueprint model instance',
return await this.bpservice.getAllblueprints();
}
- @post('/create-blueprint')
+ @get('/controllerblueprint/{id}', {
+ responses: {
+ '200': {
+ description: 'Blueprint model instance',
+ content: { 'application/json': { schema: { 'x-ts-type': BlueprintDetail } } },
+ },
+ },
+ })
+ async getOneBluePrint(@param.path.string('id') id: string) {
+ return await this.bpservice.getOneBluePrint(id);
+ }
+
+ @del('/controllerblueprint/{id}', {
+ responses: {
+ '200': {
+ description: 'Blueprint model instance',
+ content: { 'application/json': { schema: { 'x-ts-type': BlueprintDetail } } },
+ },
+ },
+ })
+ async deleteBluePrint(@param.path.string('id') id: string) {
+ return await this.bpservice.deleteBluePrint(id);
+ }
+
+
+ @get('/controllerblueprint/paged', {
+ responses: {
+ '200': {
+ description: 'Blueprint model instance with pagination',
+ content: { 'application/json': { schema: { 'x-ts-type': Blueprint } } },
+ },
+ },
+ })
+ async getPagedBlueprints(
+ @param.query.number('limit') limit: number,
+ @param.query.number('offset') offset: number,
+ @param.query.string('sort') sort: string,
+ @param.query.string('sortType') sortType: string) {
+ return await this.bpservice.getPagedBueprints(limit, offset, sort, sortType);
+ }
+
+ @get('/controllerblueprint/metadata/paged/{keyword}', {
+ responses: {
+ '200': {
+ description: 'Blueprint model instance with pagination',
+ content: { 'application/json': { schema: { 'x-ts-type': Blueprint } } },
+ },
+ },
+ })
+ async getMetaDataPagedBlueprints(
+ @param.path.string('keyword') keyword: string,
+ @param.query.number('limit') limit: number,
+ @param.query.number('offset') offset: number,
+ @param.query.string('sort') sort: string,
+ @param.query.string('sortType') sortType: string) {
+ return await this.bpservice.getMetaDataPagedBlueprints(limit, offset, sort, keyword, sortType);
+ }
+
+ @get('/controllerblueprint/meta-data/{keyword}', {
+ responses: {
+ '200': {
+ description: 'Blueprint model instance',
+ content: { 'application/json': { schema: { 'x-ts-type': Blueprint } } },
+ },
+ },
+ })
+ async getAllPacakgesByKeword(@param.path.string('keyword') keyword: string) {
+ return await this.bpservice.getBlueprintsByKeyword(keyword);
+ }
+
+ @get('/controllerblueprint/by-name/{name}/version/{version}', {
+ responses: {
+ '200': {
+ description: 'Blueprint model instance',
+ content: { 'application/json': { schema: { 'x-ts-type': Blueprint } } },
+ },
+ },
+ })
+ async getPacakgesByNameAndVersion(@param.path.string('name') name: string, @param.path.string('version') version: string) {
+ return await this.bpservice.getBlueprintByNameAndVersion(name, version);
+ }
+
+ @get('/controllerblueprint/searchByTags/{tags}', {
+ responses: {
+ '200': {
+ content: { 'application/json': {} },
+ },
+ },
+ })
+ async getByTags(@param.path.string('tags') tags: string) {
+ return await this.bpservice.getByTags(tags);
+ }
+
+ @post('/controllerblueprint/create-blueprint')
async upload(
@requestBody({
description: 'multipart/form-data value.',
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp=>{
- resolve(resp);
- }, err=>{
- reject(err);
- });
- }, err=>{
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ // if (appConfig.action.deployBlueprint.grpcEnabled)
+ if (appConfig.action.grpcEnabled)
+ return this.uploadFileToBlueprintProcessorGrpc(file, 'DRAFT', response);
+ else
+ return this.uploadFileToBlueprintController(file, '/blueprint-model/', response);
+ }, err => {
reject(err);
});
});
+ // return new Promise((resolve, reject) => {
+ // this.getFileFromMultiPartForm(request).then(file => {
+ // this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp => {
+ // resolve(resp);
+ // }, err => {
+ // reject(err);
+ // });
+ // }, err => {
+ // reject(err);
+ // });
+ // });
}
- @post('/publish')
+ @post('/controllerblueprint/publish')
async publish(
@requestBody({
description: 'multipart/form-data value.',
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp=>{
- resolve(resp);
- }, err=>{
- reject(err);
- });
- }, err=>{
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ // if (appConfig.action.deployBlueprint.grpcEnabled)
+ if (appConfig.action.grpcEnabled)
+ return this.uploadFileToBlueprintProcessorGrpc(file, 'PUBLISH', response);
+ else
+ return this.uploadFileToBlueprintController(file, '/blueprint-model/publish/', response);
+ }, err => {
reject(err);
});
});
+ // return new Promise((resolve, reject) => {
+ // this.getFileFromMultiPartForm(request).then(file => {
+ // this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp => {
+ // resolve(resp);
+ // }, err => {
+ // reject(err);
+ // });
+ // }, err => {
+ // reject(err);
+ // });
+ // });
}
- @post('/enrich-blueprint')
+ @post('/controllerblueprint/enrich-blueprint')
async enrich(
@requestBody({
description: 'multipart/form-data value.',
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp=>{
- resolve(resp);
- }, err=>{
- reject(err);
- });
- }, err=>{
- reject(err);
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ if (appConfig.action.grpcEnabled)
+ return this.uploadFileToBlueprintProcessorGrpc(file, 'ENRICH', response);
+ else
+ return this.uploadFileToBlueprintController(file, '/blueprint-model/enrich/', response);
+ // this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp => {
+ // resolve(resp);
+ // }, err => {
+ // reject(err);
+ // });
+ // }, err => {
+ // reject(err);
});
});
}
- @get('/download-blueprint/{name}/{version}')
+ @get('/controllerblueprint/download-blueprint/{name}/{version}')
async download(
@param.path.string('name') name: string,
- @param.path.string('version') version:string,
+ @param.path.string('version') version: string,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/"+name+"/version/"+version, response);
+
+ if (appConfig.action.grpcEnabled)
+ return this.downloadFileFromBlueprintProcessorGrpc(name, version, response);
+ else
+ return this.downloadFileFromBlueprintController('/blueprint-model/download/by-name/' + name + '/version/' + version, response);
}
- async getFileFromMultiPartForm(request: Request): Promise<multiparty.File>{
+
+ async getFileFromMultiPartForm(request: Request): Promise<multiparty.File> {
return new Promise((resolve, reject) => {
let form = new multiparty.Form();
form.parse(request, (err: any, fields: any, files: { [x: string]: any[]; }) => {
if (err) reject(err);
let file = files['file'][0]; // get the file from the returned files object
- if(!file){
+ if (!file) {
reject('File was not found in form data.');
- }else{
+ } else {
resolve(file);
}
});
- })
+ });
}
- @post('/deploy-blueprint')
+ @post('/controllerblueprint/deploy-blueprint')
async deploy(
@requestBody({
description: 'multipart/form-data value.',
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- if(appConfig.action.deployBlueprint.grpcEnabled)
- return this.uploadFileToBlueprintProcessorGrpc(file, response);
- else
- return this.uploadFileToBlueprintProcessor(file, "/execution-service/upload/", response);
- }, err=>{
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ // if (appConfig.action.deployBlueprint.grpcEnabled)
+ if (appConfig.action.grpcEnabled)
+ return this.uploadFileToBlueprintProcessorGrpc(file, 'PUBLISH', response);
+ else
+ return this.uploadFileToBlueprintProcessor(file, '/blueprint-model/publish', response);
+ }, err => {
reject(err);
});
});
}
- async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response>{
- return this.uploadFileToBlueprintService(file, controllerApiConfig.http.url + uri, controllerApiConfig.http.authToken, response);
+ async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response> {
+ return this.uploadFileToBlueprintService(file, processorApiConfig.http.url + uri, processorApiConfig.http.authToken, response);
}
- async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response>{
+ async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response> {
return this.uploadFileToBlueprintService(file, processorApiConfig.http.url + uri, processorApiConfig.http.authToken, response);
}
- async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response>{
+ async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response> {
let options = {
url: url,
headers: {
Authorization: authToken,
- 'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
+ 'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW',
},
formData: {
file: {
value: fs.createReadStream(file.path),
options: {
filename: 'cba.zip',
- contentType: 'application/zip'
- }
- }
- }
+ contentType: 'application/zip',
+ },
+ },
+ },
};
var removeTempFile = () => {
fs.unlink(file.path, (err: any) => {
if (err) {
console.error(err);
- }
+ }
});
- }
+ };
return new Promise((resolve, reject) => {
request_lib.post(options)
- .on("error", err => {
+ .on('error', err => {
reject(err);
})
.pipe(response)
- .once("finish", () => {
+ .once('finish', () => {
removeTempFile();
resolve(response);
});
- })
+ });
}
async downloadFileFromBlueprintController(uri: string, response: Response): Promise<Response> {
- return this.downloadFileFromBlueprintService(controllerApiConfig.http.url + uri, controllerApiConfig.http.authToken, response);
+ return this.downloadFileFromBlueprintService(processorApiConfig.http.url + uri, processorApiConfig.http.authToken, response);
}
async downloadFileFromBlueprintService(url: string, authToken: string, response: Response): Promise<Response> {
url: url,
headers: {
Authorization: authToken,
- }
+ },
};
return new Promise((resolve, reject) => {
request_lib.get(options)
- .on("error", err => {
+ .on('error', err => {
reject(err);
})
.pipe(response)
- .once("finish", () => {
+ .once('finish', () => {
resolve(response);
});
- })
+ });
}
- async uploadFileToBlueprintProcessorGrpc(file: multiparty.File, response: Response): Promise<Response> {
+ async uploadFileToBlueprintProcessorGrpc(file: multiparty.File, actionName: string, response: Response): Promise<Response> {
return new Promise<Response>((resolve, reject) => {
- bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path).then(output=>{
+ bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path, actionName).then(output => {
response.send(output.status.message);
resolve(response);
- }, err=>{
+ }, err => {
response.status(500).send(err);
resolve(response);
});
});
}
-}
\ No newline at end of file
+
+ async downloadFileFromBlueprintProcessorGrpc(blueprintName: string, blueprintVersion: string, response: Response): Promise<Response> {
+ return new Promise<Response>((resolve, reject) => {
+ bluePrintManagementServiceGrpcClient.downloadBlueprint(blueprintName, blueprintVersion)
+ .then(output => {
+ response.send(output.status.message);
+ resolve(response);
+ }, err => {
+ response.status(500).send(err);
+ resolve(response);
+ });
+ });
+ }
+}