diff --git a/index.jsx b/index.jsx
index 34876f7..0a40715 100644
--- a/index.jsx
+++ b/index.jsx
@@ -15,10 +15,10 @@ const initialState = {
address: '', port: '', username: '', key: '', database: '',
databases: [], modules: '', serverlog: '', connected: false
};
+const [isConnected, setIsConnected] = createSignal(false);
const OdooDockerSshAdminConfig = () => {
const [state, setState] = createLocalState(initialState);
- const [isConnected, setIsConnected] = createSignal(false);
const [passphrase, setPassphrase] = createSignal('');
const valueSet = ({target}) => setState(target.name, target.value);
@@ -163,39 +163,83 @@ const OdooDockerSshAdminDatabases = () => {
const OdooDockerSshAdminActions = () => {
const [state, setState] = createLocalState(initialState);
+ const cmdFetch = (cmd) => {
+ return () => {
+ if (!isConnected()) {
+ humane.log('Non connecté : impossible de lancer une commande.');
+ } else {
+ humane.log('Commande lancée, veuillez patienter.');
+ fetch('/cmd/' + cmd)
+ .then(response => response.json())
+ .then(body => {
+ humane.log('Commande terminée.');
+ setState('serverlog', state.serverlog + body);
+ })
+ }
+ };
+ };
+
+ const webStart = cmdFetch('webstart');
+ const webStop = cmdFetch('webstop');
+ const webRestart = cmdFetch('webrestart');
+ const odooStart = cmdFetch('odoostart');
+ const odooStop = cmdFetch('odoostop');
+ const odooRestart = cmdFetch('odoorestart');
+ const dbStart = cmdFetch('dbstart');
+ const dbStop = cmdFetch('dbstop');
+ const dbRestart = cmdFetch('dbrestart');
+
return
🚩 Actions
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/server.js b/server.js
index d9ad753..1459f7d 100644
--- a/server.js
+++ b/server.js
@@ -21,7 +21,6 @@ const sendJSON = (res, httpCode, message) => {
};
const connect = (req, res) => {
- console.log(req.body);
if (!req.body.address.length || !req.body.username.length ||
!req.body.port.length || !req.body.key.length) {
res.end(sendJSON(res, 500, 'Erreur : un champ requis manque.'));
@@ -30,7 +29,7 @@ const connect = (req, res) => {
try {
sshConn.on('ready', () => {
console.log('Client :: ready');
- res.end(sendJSON(res, 200, 'OK, connected!'));
+ res.end(sendJSON(res, 200, 'OK, connecté !'));
}).connect({
host: req.body.address,
port: req.body.port,
@@ -50,14 +49,70 @@ const connect = (req, res) => {
};
const disconnect = (req, res) => {
- sshConn.end();
- res.end(sendJSON(res, 200, 'OK, disconnected!'));
+ if (sshConn) sshConn.end();
+ res.end(sendJSON(res, 200, 'OK, déconnecté !'));
+};
+
+const serverCommand = (req, res) => {
+ if (!req.params.cmd) {
+ res.end(sendJSON(res, 403, 'Pas de commande à exécuter'));
+ } else {
+ let execCmd = 'cd ~/docker/hosts/*/ && ';
+ switch (req.params.cmd) {
+ case 'webstart':
+ execCmd += 'docker-compose start nginx';
+ break;
+ case 'webstop':
+ execCmd += 'docker-compose stop nginx';
+ break;
+ case 'webrestart':
+ execCmd += 'docker-compose restart nginx';
+ break;
+ case 'odoostart':
+ execCmd += 'docker-compose start golem';
+ break;
+ case 'odoostop':
+ execCmd += 'docker-compose stop golem';
+ break;
+ case 'odoorestart':
+ execCmd += 'docker-compose restart golem';
+ break;
+ case 'dbstart':
+ execCmd += 'docker-compose start pggolem';
+ break;
+ case 'dbstop':
+ execCmd += 'docker-compose stop pggolem';
+ break;
+ case 'dbrestart':
+ execCmd += 'docker-compose restart pggolem';
+ break;
+ default:
+ execCmd = '/bin/true';
+ }
+ if (sshConn) {
+ sshConn.exec(execCmd, (err, stream) => {
+ if (err) throw err;
+ let std = '';
+ stream.on('close', function(code, signal) {
+ console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
+ res.end(sendJSON(res, 200, std));
+ }).on('data', function(data) {
+ console.log('STDOUT: ' + data);
+ std += data;
+ }).stderr.on('data', function(data) {
+ console.log('STDERR: ' + data);
+ std += data;
+ });
+ });
+ }
+ }
};
polka({ server })
.use(json(), files)
.post('/connect', connect)
.get('/disconnect', disconnect)
+ .get('/cmd/:cmd', serverCommand)
.listen(PORT, err => {
if (err) throw err;
console.log(`> Running on localhost:${PORT}`);