Skip to content
Snippets Groups Projects
Commit 20d0f74e authored by Josefine Wegert's avatar Josefine Wegert
Browse files

code refactoring, frontend and backend with plugins work, but not both together

parent df43aef3
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@
/tmp
/explorviz-ui-backend
/explorviz-ui-frontend
/explorviz-backend-plugin-example
explorviz-builds.zip
# dependencies
......
......@@ -12,11 +12,16 @@
var exphbs = require('express-handlebars');
//initializer
var nanit = require('nanit');
var initGitRepos = require('./initializers/gitRepos.js');
//load names of available download files
const downloadFiles = require('./downloadFiles.json');
const downloadNames = Object.keys(downloadFiles);
//load functions for frontend and backend build
let backendFunctions = require('./backendFunctions.js');
let frontendFunctions = require('./frontendFunctions.js');
let zipFunctions = require('./zipFunctions.js');
var app = express();
app.use(bodyParser.urlencoded({
......@@ -28,25 +33,20 @@
app.engine('.hbs', exphbs({extname: '.hbs'}));
app.set('view engine', '.hbs');
//initialize the git repos
//TODO error handling is not working properly, error returned is not in let error, but in req + req and res are undefined!
//TODO add spinner for telling user to wait until initialization is done
// nanit.initialize(downloadFiles, function(req,res,err){
// // console.log('err in nanit.initialize:', err);
// // console.log('req in nanit.initialize:', req);
// // console.log('res in nanit.initialize:', res);
// let response =
// 'There was an error during cloning the git repositories. ' +
// 'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
// 'and add the following information: ' + req;
// if(err){
// console.log('nanit.initialize error');
// res.send(response);
// return;
//TODO clone the git repos: function initialize here (for better understanding) or in gitRepos.js defined?
//Clone the git repos initially for performance.
// function initialize(downloadFiles){
// return initGitRepos.initBackend(downloadFiles).then(function(downloadFiles){
// return initGitRepos.initBackendPlugins(downloadFiles).then(function(downloadFiles){
// return initGitRepos.initFrontend(downloadFiles)
// })
// })
// };
// });
//initGitRepos.initialize(downloadFiles);
//routes
app.get('/', function(req, res){
......@@ -71,9 +71,6 @@
const promiseArray = []
const checkedFiles = req.query.checkedFiles.split(',');
// create a file to stream archive data to.
const zip = new JSZip();
zip.file("README.txt", "text for README");
backendChecked = checkedFiles.find(function(file){
......@@ -83,117 +80,27 @@
if (backendChecked){
const fileName = backendChecked;
const downloadURL = downloadFiles[backendChecked];
function backendClean(){
console.log('in backendClean');
return new Promise((resolve,reject)=>{
exec('cd explorviz-ui-backend/plugins/net/explorviz/ && rm -rf plugins/*', (error, stdout,stderr)=>{
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve();
})
})
}
function backendPull(){
console.log('in backendPull');
return new Promise((resolve, reject)=> {
exec('cd ' + fileName + ' git pull ', (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
}
function backendInstallAddons(){
console.log('in backendInstallAddons');
return new Promise((resolve, reject)=>{
checkedPlugins = checkedFiles.filter(function(file){
return /\bexplorviz-backend-plugin-\w*/.exec(file);
});
if(checkedPlugins.length !== 0 ){
checkedPlugins.forEach((pluginName) => {
exec('git clone ' + downloadFiles[pluginName] + ' && cd '+ pluginName + ' && cp -R ' + ' . '+' ../explorviz-ui-backend/plugins/net/explorviz/plugins/ ', (error, stdout, stderr) => { //'cd explorviz-ui-backend/plugins/net/explorviz/plugins/ ' +
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
} else {
resolve();
}
})
}
function backendBuild(){
console.log('in backendBuild');
return new Promise((resolve,reject)=>{
exec('cd '+ fileName + ' && mvn compile war:war ', (error,stdout,stderr)=> {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve({zipFileName:'backend.war', path:'explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war'});
})
})
}
function backendAll(){
return backendClean().then(function(){
return backendPull().then(function(){
return backendInstallAddons().then(function(){
return backendBuild()
return backendFunctions.backendClean(fileName).then(function(){
return backendFunctions.backendPull(fileName).then(function(){
return backendFunctions.backendInstallAddons(checkedFiles,downloadFiles).then(function(){
return backendFunctions.backendBuild(fileName)
})
})
}).catch(function(error){
let response =
'There was an error during your backend build. ' +
'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
'and add the following information: ' + error;
res.send(response);
})
}
promiseArray.push(backendAll());
console.log('promiseArray:', promiseArray);
finalizeZip();
console.log('promiseArray in backendChecked:', promiseArray);
finalizeZip(promiseArray);
}
......@@ -205,123 +112,45 @@
const fileName = frontendChecked;
const downloadURL = downloadFiles[frontendChecked];
function frontendPull(){
return new Promise((resolve, reject) => {
console.log('in frontendPull()');
//' git fetch origin && git reset --hard origin/master '
exec('cd ' + fileName + ' git checkout package.json && npm prune ' +' && git pull ', (error, stdout, stderr) => {
if (error) {
reject(error)
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
}
function frontendInstallAddons(){
console.log('in frontendInstallAddons()');
return new Promise((resolve, reject) => {
checkedPlugins = checkedFiles.filter(function(file){
return /\bexplorviz-frontend-plugin-\w*/.exec(file);
});
if(checkedPlugins.length !== 0 ){
checkedPlugins.forEach((pluginName) => {
exec('cd ' + ' explorviz-ui-frontend ' + ' ember install ' + downloadFiles[pluginName], (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
} else {
resolve();
}
function frontendAll() {
return frontendFunctions.frontendClean(fileName).then(function(){
return frontendFunctions.frontendPull(fileName).then(function(){
return frontendFunctions.frontendInstallAddons(checkedFiles, downloadFiles).then(function(){
return frontendFunctions.frontendBuild(fileName)
})
}
function frontendBuild(){
return new Promise((resolve,reject)=> {
console.log('in frontendBuild()');
exec('cd ' + fileName +' && ember build --environment=production', (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve({zipFileName:'frontend', path:'./explorviz-ui-frontend/dist/'});
});
})
console.log('resolve build:', resolve);
}
function frontendAll() {
}).catch(function(error){
let response =
'There was an error during your frontend build. ' +
'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
'and add the following information: ' + error;
res.send(response);
return frontendPull().then(function(){
return frontendInstallAddons().then(function(){
return frontendBuild()
})
})
}
//frontend was selected and the next step (streaming to zip) has to wait until the frontend is built
promiseArray.push(frontendAll());
finalizeZip();
finalizeZip(promiseArray);
};
//TODO put all zip-things in zipFunctions.js;
//problem: createZip has to know the res from /download-route and if just the other functions will be exported, the zip has to be passed to createZip with resolve()
// create a file to stream archive data to.
const zip = new JSZip();
zip.file("README.txt", "text for README");
function finalizeZip(){
return streamFilesToZip().then(function(){
return createZip()
}).catch(function(error) {let response =
'There was an error during your build. ' +
'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
'and add the following information: ' + error;
res.send(response);
})
}
function streamFilesToZip(){
function streamFilesToZip(promiseArray){
console.log('in streamFilesToZip');
return new Promise((resolve,reject)=> {
console.log('promiseArray:', promiseArray);
console.log('promiseArray in streamFilesToZip before Promise.all:', promiseArray);
Promise.all(promiseArray).then(files => {
console.log('in Promise.all');
console.log('in Promise.all, files:', files);
let finishedArray=[];
files.forEach(file => {
if (file.zipFileName === 'backend.war'){
console.log('in backend.war');
fs.readFileAsync = function(filePath){
return new Promise(function (resolve, reject) {
......@@ -336,13 +165,14 @@ function streamFilesToZip(){
});
}
function addBackendToZip(data){
return new Promise(function(resolve,reject){
zip.file(file.zipFileName, data);
resolve();
})
}
console.log('in backend.war');
backendContent = fs.readFileAsync(file.path);
backendContent.then(function(data){
......@@ -353,6 +183,7 @@ function streamFilesToZip(){
})
if(finishedArray.length === files.length){
console.log('before resolve() in backend.war');
resolve();
}
......@@ -375,7 +206,6 @@ function streamFilesToZip(){
resolve();
}
})
console.log('frontendStream:', frontendStream);
}
......@@ -389,6 +219,19 @@ function streamFilesToZip(){
})
};
function finalizeZip(promiseArray){
return streamFilesToZip(promiseArray).then(function(){
return createZip()
}).catch(function(error) {let response =
'There was an error during your build. ' +
'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
'and add the following information: ' + error;
res.send(response);
})
}
function createZip(){
console.log('in createZip');
......@@ -406,9 +249,6 @@ function createZip(){
}
});
......
var express = require('express');
var exec = require('child_process').exec;
function backendClean(fileName){
console.log('in backendClean');
return new Promise((resolve,reject)=>{
exec('cd explorviz-ui-backend/plugins/net/explorviz/ && rm -rf plugins/*', (error, stdout,stderr)=>{
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve(fileName);
})
})
}
function backendPull(fileName){
console.log('in backendPull');
return new Promise((resolve, reject)=> {
exec('cd ' + fileName + ' git pull ', (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
}
function backendInstallAddons(checkedFiles,downloadFiles){
console.log('in backendInstallAddons');
return new Promise((resolve, reject)=>{
checkedPlugins = checkedFiles.filter(function(file){
return /\bexplorviz-backend-plugin-\w*/.exec(file);
});
if(checkedPlugins.length !== 0 ){
checkedPlugins.forEach((pluginName) => {
//TODO want to copy everything in backend-plugin except .git, workaround: ./demo/
exec('cd '+ pluginName + ' git pull ' + ' && cp -R ' + ' ./demo/ '+' ../explorviz-ui-backend/plugins/net/explorviz/plugins/ ', (error, stdout, stderr) => { //'cd explorviz-ui-backend/plugins/net/explorviz/plugins/ ' +
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
} else {
resolve();
}
})
}
function backendBuild(fileName){
console.log('in backendBuild');
return new Promise((resolve,reject)=>{
exec('cd '+ fileName + ' && mvn compile war:war ', (error,stdout,stderr)=> {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve({zipFileName:'backend.war', path:'explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war'});
})
})
}
module.exports = {
backendClean,
backendPull,
backendInstallAddons,
backendBuild
}
\ No newline at end of file
let express = require('express');
let exec = require('child_process').exec;
function frontendClean(fileName){
return new Promise((resolve, reject) => {
console.log('in frontendClean()');
//' git fetch origin && git reset --hard origin/master '
exec('cd ' + fileName + ' git checkout package.json && npm prune ', (error, stdout, stderr) => {
if (error) {
reject(error)
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
}
function frontendPull(fileName){
return new Promise((resolve, reject) => {
console.log('in frontendPull()');
//' git fetch origin && git reset --hard origin/master '
exec('cd ' + fileName + ' git checkout package.json && npm prune ' +' && git pull ', (error, stdout, stderr) => {
if (error) {
reject(error)
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
}
function frontendInstallAddons(checkedFiles, downloadFiles){
console.log('in frontendInstallAddons()');
return new Promise((resolve, reject) => {
checkedPlugins = checkedFiles.filter(function(file){
return /\bexplorviz-frontend-plugin-\w*/.exec(file);
});
if(checkedPlugins.length !== 0 ){
checkedPlugins.forEach((pluginName) => {
exec('cd ' + ' explorviz-ui-frontend ' + ' ember install ' + downloadFiles[pluginName], (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve();
});
})
} else {
resolve();
}
})
}
function frontendBuild(fileName){
return new Promise((resolve,reject)=> {
console.log('in frontendBuild()');
exec('cd ' + fileName +' && ember build --environment=production', (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve({zipFileName:'frontend', path:'./explorviz-ui-frontend/dist/'});
});
})
console.log('resolve build:', resolve);
}
module.exports = {
frontendClean,
frontendPull,
frontendInstallAddons,
frontendBuild
}
var express = require('express');
var exec = require('child_process').exec;
//Clone the git repos initially for performance.
//TODO error handling is not working properly, error returned is not in var error, but in req
function initGitRepos(downloadFiles, next){
function initialize(downloadFiles){
return initBackend(downloadFiles).then(function(downloadFiles){
return initBackendPlugins(downloadFiles).then(function(downloadFiles){
return initFrontend(downloadFiles)
})
})
};
function initBackend(downloadFiles){
const backendName= 'explorviz-ui-backend';
const downloadBackend= downloadFiles[backendName];
exec('git clone ' + downloadBackend, (error, stdout, stderr) => {
const downloadBackendURL = downloadFiles[backendName];
return new Promise((resolve,reject)=>{
exec('git clone ' + downloadBackendURL + ' '+ backendName, (error, stdout, stderr) => {
if (error) {
console.log('initGitRepos: backendFailed ->', error);
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
});
resolve(downloadFiles);
});
}
function initBackendPlugins(downloadFiles){
downloadNames = Object.keys(downloadFiles);
const backendPlugins = downloadNames.filter(function(file){
return /\bexplorviz-backend-plugin-\w*/.exec(file);
});
return new Promise((resolve, reject) => {
if(backendPlugins.length !== 0 ){
backendPlugins.forEach((pluginName) => {
exec('git clone ' + downloadFiles[pluginName], (error, stdout, stderr) => {
if (error) {
console.log('initGitRepos: backendFailed');
return next(error);
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
resolve(downloadFiles);
});
})
} else {
resolve(downloadFiles);
}
})
}
function initFrontend(downloadFiles){
return new Promise((resolve,reject)=>{
const frontendName ='explorviz-ui-frontend';
const downloadFrontend= downloadFiles[frontendName];
exec('git clone ' + downloadFrontend + ' ' + frontendName + ' && cd '+ frontendName + ' && npm install', (error, stdout, stderr) => {
const downloadFrontendURL = downloadFiles[frontendName];
exec('git clone ' + downloadFrontendURL + ' ' + frontendName + ' && cd '+ frontendName + ' && npm install', (error, stdout, stderr) => {
if (error) {
console.log('initGitRepos: frontendFailed');
return next(error);
console.log('initGitRepos: frontendFailed ->', error);
reject(error);
return;
}
console.log(stdout);
console.log(stderr);
});
resolve();
})
next();
};
module.exports = initGitRepos;
\ No newline at end of file
// module.exports = {
// initBackend,
// initBackendPlugins,
// initFrontend
// }
module.exports = {
initialize
}
\ No newline at end of file
......@@ -16,7 +16,6 @@
"fs": "0.0.1-security",
"fs-readdir": "0.0.3",
"jszip": "^3.1.3",
"nanit": "^0.3.1",
"node-zip": "^1.1.1",
"path": "^0.12.7"
},
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment