Skip to content

Commit

Permalink
Algorithm Build (#12)
Browse files Browse the repository at this point in the history
* update apply

* updates

* fix

* fix http status logs

* add algorithm build API

* update algorithm build API

* update algorithm build API

* swagger-ui update

* improve validation

* apply algorithm

* fixes

* updates

* update algorithm apply

* updates

* updates

* update PR

* update PR

* updates
  • Loading branch information
nassiharel committed Apr 1, 2019
1 parent e73a0d0 commit 4d55974
Show file tree
Hide file tree
Showing 19 changed files with 2,436 additions and 820 deletions.
2 changes: 1 addition & 1 deletion core/api-server/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*

#uploads
# uploads
uploads

# IDE
Expand Down
88 changes: 41 additions & 47 deletions core/api-server/api/rest-api/app-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,58 +12,52 @@ const log = Logger.GetLogFromContanier();
const rest = new RestServer();

class AppServer {
init(options) {
return new Promise((resolve, reject) => {
rest.on('error', (data) => {
const { route, jobId, pipelineName } = data.res._internalMetadata || {};
const { status } = data;
if (status >= 500) {
log.error(`Error response, status=${status}, message=${data.error.message}`, { component, route, jobId, pipelineName, httpStatus: status });
}
else {
log.info(`status=${status}, message=${data.error.message}`, { component, route, jobId, pipelineName, httpStatus: status });
}
});
async init(options) {
rest.on('error', (data) => {
const { route, jobId, pipelineName } = data.res._internalMetadata || {};
const { status } = data;
if (status >= 500) {
log.error(`Error response, status=${status}, message=${data.error.message}`, { component, route, jobId, pipelineName, httpStatus: status });
}
else {
log.info(`status=${status}, message=${data.error.message}`, { component, route, jobId, pipelineName, httpStatus: status });
}
});

swagger.info.version = options.version;
const { prefix, port, rateLimit, poweredBy } = options.rest;
const routes = internal();
routes.push(metrics.getRouter());
const versions = fs.readdirSync(path.join(__dirname, 'routes'));
versions.forEach((v) => {
swagger.servers.push({ url: path.join('/', options.swagger.path, prefix, v) });
const routers = fs.readdirSync(path.join(__dirname, 'routes', v));
routers.forEach((f) => {
const file = path.basename(f, '.js');
routes.push({
route: path.join('/', prefix, v, file),
router: require('./' + path.join('routes', v, file))({ version: v, file }) // eslint-disable-line
});
swagger.info.version = options.version;
const { prefix, port, rateLimit, poweredBy } = options.rest;
const routes = internal();
routes.push(metrics.getRouter());
const versions = fs.readdirSync(path.join(__dirname, 'routes'));
versions.forEach((v) => {
swagger.servers.push({ url: path.join('/', options.swagger.path, prefix, v) });
const routers = fs.readdirSync(path.join(__dirname, 'routes', v));
routers.forEach((f) => {
const file = path.basename(f, '.js');
routes.push({
route: path.join('/', prefix, v, file),
router: require('./' + path.join('routes', v, file))({ version: v, file }) // eslint-disable-line
});
});
});

const { beforeRoutesMiddlewares, afterRoutesMiddlewares } = metrics.getMiddleware();
const routeLogBlacklist = ['/metrics', '/swagger'];
const { beforeRoutesMiddlewares, afterRoutesMiddlewares } = metrics.getMiddleware();
const routeLogBlacklist = ['/metrics', '/swagger'];

const opt = {
swagger,
routes,
prefix,
versions,
port: parseInt(port, 10),
rateLimit,
poweredBy,
name: options.serviceName,
beforeRoutesMiddlewares,
afterRoutesMiddlewares: [...afterRoutesMiddlewares, afterRequest(routeLogBlacklist)]
};
rest.start(opt).then((data) => {
log.info(data.message, { component });
resolve();
}).catch((error) => {
reject(error);
});
});
const opt = {
swagger,
routes,
prefix,
versions,
port: parseInt(port, 10),
rateLimit,
poweredBy,
name: options.serviceName,
beforeRoutesMiddlewares,
afterRoutesMiddlewares: [...afterRoutesMiddlewares, afterRequest(routeLogBlacklist)]
};
const data = await rest.start(opt);
log.info(data.message, { component });
}
}

Expand Down
52 changes: 52 additions & 0 deletions core/api-server/api/rest-api/routes/v1/builds.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
const express = require('express');
const builds = require('../../../../lib/service/builds');
const methods = require('../../middlewares/methods');
const logger = require('../../middlewares/logger');

const routes = (options) => {
const router = express.Router();
router.get('/', (req, res, next) => {
res.json({ message: `${options.version} ${options.file} api` });
next();
});
router.all('/status/:buildId?', methods(['GET']), logger(), (req, res, next) => {
const { buildId } = req.params;
builds.getBuild({ buildId }).then((response) => {
res.json(response);
next();
}).catch((error) => {
return next(error);
});
});
router.all('/list/:name?', methods(['GET']), logger(), (req, res, next) => {
const { name } = req.params;
const { sort, order, limit } = req.query;
builds.getBuilds({ name, sort, order, limit }).then((response) => {
res.json(response);
next();
}).catch((error) => {
return next(error);
});
});
router.all('/stop', methods(['POST']), logger(), (req, res, next) => {
const { buildId } = req.body;
builds.stopBuild({ buildId }).then(() => {
res.json({ message: 'OK' });
next();
}).catch((error) => {
return next(error);
});
});
router.all('/rerun', methods(['POST']), logger(), (req, res, next) => {
const { buildId } = req.body;
builds.rerunBuild({ buildId }).then(() => {
res.json({ message: 'OK' });
next();
}).catch((error) => {
return next(error);
});
});
return router;
};

module.exports = routes;
2 changes: 1 addition & 1 deletion core/api-server/api/rest-api/routes/v1/exec.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const routes = (options) => {
return next(error);
});
});
router.all('/pipeline/:jobId?', methods(['GET']), logger(), (req, res, next) => {
router.all('/pipelines/:jobId?', methods(['GET']), logger(), (req, res, next) => {
const { jobId } = req.params;
Execution.getPipeline({ jobId }).then((response) => {
res.json(response);
Expand Down
14 changes: 14 additions & 0 deletions core/api-server/api/rest-api/routes/v1/store.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
const express = require('express');
const multer = require('multer');
const pipelineStore = require('../../../../lib/service/pipelines');
const algorithmStore = require('../../../../lib/service/algorithms');
const logger = require('../../middlewares/logger');

const upload = multer({ dest: 'uploads/zipped/' });

const routes = (options) => {
const router = express.Router();
router.get('/', (req, res, next) => {
Expand Down Expand Up @@ -117,6 +120,17 @@ const routes = (options) => {
return next(error);
});
});
router.post('/algorithms/apply', upload.single('file'), logger(), (req, res, next) => {
const body = (req.body.payload) || null;
const file = req.file || {};
const payload = JSON.parse(body);
algorithmStore.applyAlgorithm({ payload, file: { path: file.path, name: file.originalname } }).then((response) => {
res.json(response);
next();
}).catch((error) => {
return next(error);
});
});
// algorithms

return router;
Expand Down
Loading

0 comments on commit 4d55974

Please sign in to comment.