mirror of
https://github.com/Lissy93/dashy.git
synced 2024-09-11 14:17:02 +03:00
Adds an endpoint for rebuilding the app, so that it can be triggered from the UI
This commit is contained in:
parent
6337e5d7e4
commit
b0d5b63703
16
server.js
16
server.js
@ -13,10 +13,11 @@ const dns = require('dns');
|
|||||||
const os = require('os');
|
const os = require('os');
|
||||||
const bodyParser = require('body-parser');
|
const bodyParser = require('body-parser');
|
||||||
|
|
||||||
/* Include helper functions */
|
/* Include helper functions and route handlers */
|
||||||
const pingUrl = require('./services/ping'); // Used by the status check feature, to ping services
|
const pingUrl = require('./services/ping'); // Used by the status check feature, to ping services
|
||||||
const saveConfig = require('./services/save-config'); // Saves users new conf.yml to file-system
|
const saveConfig = require('./services/save-config'); // Saves users new conf.yml to file-system
|
||||||
const printMessage = require('./services/print-message'); // Function to print welcome msg on start
|
const printMessage = require('./services/print-message'); // Function to print welcome msg on start
|
||||||
|
const rebuild = require('./services/rebuild-app'); // A script to programmatically trigger a build
|
||||||
require('./src/utils/ConfigValidator'); // Include and kicks off the config file validation script
|
require('./src/utils/ConfigValidator'); // Include and kicks off the config file validation script
|
||||||
|
|
||||||
/* Checks if app is running within a container, from env var */
|
/* Checks if app is running within a container, from env var */
|
||||||
@ -39,6 +40,7 @@ const printWelcomeMessage = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Just console.warns an error */
|
||||||
const printWarning = (msg, error) => {
|
const printWarning = (msg, error) => {
|
||||||
console.warn(`\x1b[103m\x1b[34m${msg}\x1b[0m\n`, error || ''); // eslint-disable-line no-console
|
console.warn(`\x1b[103m\x1b[34m${msg}\x1b[0m\n`, error || ''); // eslint-disable-line no-console
|
||||||
};
|
};
|
||||||
@ -64,7 +66,7 @@ try {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
// POST Endpoint used to save config, by writing conf.yml to disk
|
// POST Endpoint used to save config, by writing conf.yml to disk
|
||||||
.use('/api/save', method('POST', (req, res) => {
|
.use('/config-manager/save', method('POST', (req, res) => {
|
||||||
try {
|
try {
|
||||||
saveConfig(req.body, (results) => {
|
saveConfig(req.body, (results) => {
|
||||||
res.end(results);
|
res.end(results);
|
||||||
@ -73,10 +75,18 @@ try {
|
|||||||
res.end(JSON.stringify({ success: false, message: e }));
|
res.end(JSON.stringify({ success: false, message: e }));
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
// GET endpoint to trigger a build, and respond with success status and output
|
||||||
|
.use('/config-manager/rebuild', (req, res) => {
|
||||||
|
rebuild().then((response) => {
|
||||||
|
res.end(JSON.stringify(response));
|
||||||
|
}).catch((response) => {
|
||||||
|
res.end(JSON.stringify(response));
|
||||||
|
});
|
||||||
|
})
|
||||||
// Finally, initialize the server then print welcome message
|
// Finally, initialize the server then print welcome message
|
||||||
.listen(port, () => {
|
.listen(port, () => {
|
||||||
try { printWelcomeMessage(); } catch (e) { printWarning('Dashy is Starting...'); }
|
try { printWelcomeMessage(); } catch (e) { printWarning('Dashy is Starting...'); }
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
printWarning('Sorry, an error occurred ', error);
|
printWarning('Sorry, a critical error occurred ', error);
|
||||||
}
|
}
|
||||||
|
31
services/rebuild-app.js
Normal file
31
services/rebuild-app.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* This script programmatically triggers a production build
|
||||||
|
* and responds with the status, message and full output
|
||||||
|
*/
|
||||||
|
const { exec } = require('child_process');
|
||||||
|
|
||||||
|
module.exports = () => new Promise((resolve, reject) => {
|
||||||
|
const buildProcess = exec('npm run build');
|
||||||
|
|
||||||
|
let output = '';
|
||||||
|
|
||||||
|
buildProcess.stdout.on('data', (data) => {
|
||||||
|
process.stdout.write(data);
|
||||||
|
output += data;
|
||||||
|
});
|
||||||
|
|
||||||
|
buildProcess.on('error', (error) => {
|
||||||
|
reject(Error({
|
||||||
|
success: false,
|
||||||
|
error,
|
||||||
|
output,
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
buildProcess.on('exit', (response) => {
|
||||||
|
const success = response === 0;
|
||||||
|
const message = `Build process exited with ${response}: `
|
||||||
|
+ `${success ? 'Success' : 'Possible Error'}`;
|
||||||
|
resolve({ success, message, output });
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user