[WIP][ADD]Handling of server commands
This commit is contained in:
parent
f229f3c476
commit
e4a58bd800
64
index.jsx
64
index.jsx
@ -15,10 +15,10 @@ const initialState = {
|
|||||||
address: '', port: '', username: '', key: '', database: '',
|
address: '', port: '', username: '', key: '', database: '',
|
||||||
databases: [], modules: '', serverlog: '', connected: false
|
databases: [], modules: '', serverlog: '', connected: false
|
||||||
};
|
};
|
||||||
|
const [isConnected, setIsConnected] = createSignal(false);
|
||||||
|
|
||||||
const OdooDockerSshAdminConfig = () => {
|
const OdooDockerSshAdminConfig = () => {
|
||||||
const [state, setState] = createLocalState(initialState);
|
const [state, setState] = createLocalState(initialState);
|
||||||
const [isConnected, setIsConnected] = createSignal(false);
|
|
||||||
const [passphrase, setPassphrase] = createSignal('');
|
const [passphrase, setPassphrase] = createSignal('');
|
||||||
const valueSet = ({target}) => setState(target.name, target.value);
|
const valueSet = ({target}) => setState(target.name, target.value);
|
||||||
|
|
||||||
@ -163,39 +163,83 @@ const OdooDockerSshAdminDatabases = () => {
|
|||||||
const OdooDockerSshAdminActions = () => {
|
const OdooDockerSshAdminActions = () => {
|
||||||
const [state, setState] = createLocalState(initialState);
|
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>
|
return <div>
|
||||||
<h2>🚩 Actions</h2>
|
<h2>🚩 Actions</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<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>
|
||||||
<div class="col">
|
<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>
|
||||||
<div class="col">
|
<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>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<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>
|
||||||
<div class="col">
|
<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>
|
||||||
<div class="col">
|
<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>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<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>
|
||||||
<div class="col">
|
<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>
|
||||||
<div class="col">
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
63
server.js
63
server.js
@ -21,7 +21,6 @@ const sendJSON = (res, httpCode, message) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const connect = (req, res) => {
|
const connect = (req, res) => {
|
||||||
console.log(req.body);
|
|
||||||
if (!req.body.address.length || !req.body.username.length ||
|
if (!req.body.address.length || !req.body.username.length ||
|
||||||
!req.body.port.length || !req.body.key.length) {
|
!req.body.port.length || !req.body.key.length) {
|
||||||
res.end(sendJSON(res, 500, 'Erreur : un champ requis manque.'));
|
res.end(sendJSON(res, 500, 'Erreur : un champ requis manque.'));
|
||||||
@ -30,7 +29,7 @@ const connect = (req, res) => {
|
|||||||
try {
|
try {
|
||||||
sshConn.on('ready', () => {
|
sshConn.on('ready', () => {
|
||||||
console.log('Client :: ready');
|
console.log('Client :: ready');
|
||||||
res.end(sendJSON(res, 200, 'OK, connected!'));
|
res.end(sendJSON(res, 200, 'OK, connecté !'));
|
||||||
}).connect({
|
}).connect({
|
||||||
host: req.body.address,
|
host: req.body.address,
|
||||||
port: req.body.port,
|
port: req.body.port,
|
||||||
@ -50,14 +49,70 @@ const connect = (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const disconnect = (req, res) => {
|
const disconnect = (req, res) => {
|
||||||
sshConn.end();
|
if (sshConn) sshConn.end();
|
||||||
res.end(sendJSON(res, 200, 'OK, disconnected!'));
|
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 })
|
polka({ server })
|
||||||
.use(json(), files)
|
.use(json(), files)
|
||||||
.post('/connect', connect)
|
.post('/connect', connect)
|
||||||
.get('/disconnect', disconnect)
|
.get('/disconnect', disconnect)
|
||||||
|
.get('/cmd/:cmd', serverCommand)
|
||||||
.listen(PORT, err => {
|
.listen(PORT, err => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log(`> Running on localhost:${PORT}`);
|
console.log(`> Running on localhost:${PORT}`);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user