[WIP][ADD]Handling of server commands

This commit is contained in:
Fabien BOURGEOIS 2019-05-14 11:12:07 +02:00
parent f229f3c476
commit e4a58bd800
2 changed files with 113 additions and 14 deletions

View File

@ -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 <div>
<h2>🚩 Actions</h2>
<div class="row">
<div class="col">
<button type="button" class="button clear"> Odoo : démarrer</button>
<button type="button" class="button clear" onClick={odooStart}>
Odoo : démarrer
</button>
</div>
<div class="col">
<button type="button" class="button clear"> Odoo : arrêter</button>
<button type="button" class="button clear" onClick={odooStop}>
Odoo : arrêter
</button>
</div>
<div class="col">
<button type="button" class="button clear">🔄 Odoo : redémarrer</button>
<button type="button" class="button clear" onClick={odooRestart}>
🔄 Odoo : redémarrer
</button>
</div>
</div>
<div class="row">
<div class="col">
<button type="button" class="button clear"> Frontal : démarrer</button>
<button type="button" class="button clear" onClick={webStart}>
Frontal : démarrer
</button>
</div>
<div class="col">
<button type="button" class="button clear"> Frontal : arrêter</button>
<button type="button" class="button clear" onClick={webStop}>
Frontal : arrêter
</button>
</div>
<div class="col">
<button type="button" class="button clear">🔄 Frontal : redémarrer</button>
<button type="button" class="button clear" onClick={webRestart}>
🔄 Frontal : redémarrer
</button>
</div>
</div>
<div class="row">
<div class="col">
<button type="button" class="button clear"> Moteur de base de données : démarrer</button>
<button type="button" class="button clear" onClick={dbStart}>
Moteur de base de données : démarrer
</button>
</div>
<div class="col">
<button type="button" class="button clear"> Moteur de base de données : arrêter</button>
<button type="button" class="button clear" onClick={dbStop}>
Moteur de base de données : arrêter
</button>
</div>
<div class="col">
<button type="button" class="button clear">🔄 Moteur de base de données : redémarrer</button>
<button type="button" class="button clear" onClick={dbRestart}>
🔄 Moteur de base de données : redémarrer
</button>
</div>
</div>
</div>

View File

@ -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}`);