mirror of
https://gitlab.silvrtree.co.uk/martind2000/nci.git
synced 2025-02-10 17:29:16 +00:00
add remove project via api
This commit is contained in:
parent
6697bdd139
commit
e2f8ac3070
76
httpApi.js
76
httpApi.js
@ -2,7 +2,9 @@
|
||||
|
||||
var Steppy = require('twostep').Steppy,
|
||||
_ = require('underscore'),
|
||||
logger = require('./lib/logger')('http api');
|
||||
querystring = require('querystring'),
|
||||
logger = require('./lib/logger')('http api'),
|
||||
project = require('./lib/project');
|
||||
|
||||
/*
|
||||
* Pure rest api on pure nodejs follows below
|
||||
@ -11,12 +13,43 @@ var Steppy = require('twostep').Steppy,
|
||||
var router = {};
|
||||
router.routes = {};
|
||||
|
||||
_(['get', 'post', 'patch', 'del']).each(function(method) {
|
||||
router[method] = function(url, handler) {
|
||||
router.routes[method + ' ' + url] = handler;
|
||||
_(['get', 'post', 'patch', 'delete']).each(function(method) {
|
||||
router[method] = function(path, handler) {
|
||||
this.routes[method] = this.routes[method] || [];
|
||||
var keys = [],
|
||||
regExpStr = path.replace(/:(\w+)/g, function(match, name) {
|
||||
keys.push(name);
|
||||
return '(.+)';
|
||||
});
|
||||
|
||||
this.routes[method].push({
|
||||
regExp: new RegExp('^' + regExpStr + '$'),
|
||||
handler: handler,
|
||||
keys: keys
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
router.del = router['delete'];
|
||||
|
||||
router.getRoute = function(req) {
|
||||
var parts,
|
||||
route = _(this.routes[req.method.toLowerCase()]).find(function(route) {
|
||||
parts = route.regExp.exec(req.path);
|
||||
return parts;
|
||||
});
|
||||
|
||||
|
||||
if (route && route.keys.length) {
|
||||
route.params = {};
|
||||
_(route.keys).each(function(key, index) {
|
||||
route.params[key] = parts[index + 1];
|
||||
});
|
||||
}
|
||||
|
||||
return route;
|
||||
};
|
||||
|
||||
module.exports = function(app) {
|
||||
|
||||
// run building of a project
|
||||
@ -44,19 +77,43 @@ module.exports = function(app) {
|
||||
);
|
||||
});
|
||||
|
||||
// TODO: restrict access with some sort of token
|
||||
router.del('/api/projects/:name', function(req, res, next) {
|
||||
var projectName = req.params.name;
|
||||
Steppy(
|
||||
function() {
|
||||
logger.log('Cleaning up project "%s"', projectName);
|
||||
project.remove({
|
||||
baseDir: app.config.paths.projects,
|
||||
name: projectName
|
||||
}, this.slot());
|
||||
},
|
||||
function() {
|
||||
logger.log('Project "%s" cleaned up', projectName);
|
||||
res.statusCode = 204;
|
||||
res.end();
|
||||
},
|
||||
next
|
||||
);
|
||||
});
|
||||
|
||||
return function(req, res) {
|
||||
|
||||
Steppy(
|
||||
function() {
|
||||
var stepCallback = this.slot();
|
||||
|
||||
var urlParts = req.url.split('?');
|
||||
req.path = urlParts[0];
|
||||
req.query = querystring.parse(urlParts[1]);
|
||||
|
||||
req.setEncoding('utf-8');
|
||||
var bodyString = '';
|
||||
req.on('data', function(data) {
|
||||
bodyString += data;
|
||||
});
|
||||
req.on('end', function() {
|
||||
var body = JSON.parse(bodyString);
|
||||
var body = bodyString ? JSON.parse(bodyString) : null;
|
||||
stepCallback(null, body);
|
||||
});
|
||||
req.on('error', stepCallback);
|
||||
@ -64,11 +121,10 @@ module.exports = function(app) {
|
||||
function(err, body) {
|
||||
req.body = body;
|
||||
|
||||
var key = req.method.toLowerCase() + ' ' + req.url,
|
||||
handler = router.routes[key];
|
||||
|
||||
if (handler) {
|
||||
handler(req, res, this.slot());
|
||||
var route = router.getRoute(req);
|
||||
if (route) {
|
||||
req.params = route.params;
|
||||
route.handler(req, res, this.slot());
|
||||
} else {
|
||||
res.statusCode = 404;
|
||||
res.end();
|
||||
|
@ -6,7 +6,8 @@ var Steppy = require('twostep').Steppy,
|
||||
_ = require('underscore'),
|
||||
reader = require('./reader'),
|
||||
db = require('../db'),
|
||||
utils = require('./utils');
|
||||
utils = require('./utils'),
|
||||
SpawnCommand = require('./command/spawn').Command;
|
||||
|
||||
|
||||
/**
|
||||
@ -138,3 +139,32 @@ exports.getAvgProjectBuildDuration = function(projectName, callback) {
|
||||
callback
|
||||
);
|
||||
};
|
||||
|
||||
exports.remove = function(params, callback) {
|
||||
Steppy(
|
||||
function() {
|
||||
db.builds.find({
|
||||
start: {projectName: params.name, descCreateDate: ''}
|
||||
}, this.slot());
|
||||
|
||||
new SpawnCommand().run({cmd: 'rm', args: [
|
||||
'-Rf', path.join(params.baseDir, params.name)
|
||||
]}, this.slot());
|
||||
},
|
||||
function(err, builds) {
|
||||
if (builds.length) {
|
||||
db.builds.del(builds, this.slot());
|
||||
|
||||
var logLinesRemoveGroup = this.makeGroup();
|
||||
_(builds).each(function(build) {
|
||||
db.logLines.remove({
|
||||
start: {buildId: build.id}
|
||||
}, logLinesRemoveGroup.slot());
|
||||
});
|
||||
} else {
|
||||
this.pass(null, null);
|
||||
}
|
||||
},
|
||||
callback
|
||||
);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user