mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 20:22:51 +08:00
143 lines
4.7 KiB
JavaScript
143 lines
4.7 KiB
JavaScript
'use strict';
|
|
'require view';
|
|
'require fs';
|
|
'require ui';
|
|
'require rpc';
|
|
'require poll';
|
|
|
|
var callServiceList = rpc.declare({
|
|
object: 'service',
|
|
method: 'list',
|
|
params: ['name'],
|
|
expect: { '': {} }
|
|
});
|
|
|
|
return view.extend({
|
|
load: function () {
|
|
return fs.read('/etc/fusiontunx/app.yaml').then(function (content) {
|
|
var port = '8080';
|
|
if (content) {
|
|
var match = content.match(/port:\s*["']?(\d+)["']?/);
|
|
if (match) port = match[1];
|
|
}
|
|
return port;
|
|
}).catch(function () { return '8080'; });
|
|
},
|
|
|
|
render: function (port) {
|
|
var statusEl = E('span', { 'class': 'label' }, _('Checking...'));
|
|
|
|
var btnStart = E('button', {
|
|
'class': 'cbi-button cbi-button-apply',
|
|
'disabled': true
|
|
}, _('Start'));
|
|
|
|
var btnRestart = E('button', {
|
|
'class': 'cbi-button cbi-button-save',
|
|
'disabled': true
|
|
}, _('Restart'));
|
|
|
|
var btnStop = E('button', {
|
|
'class': 'cbi-button cbi-button-reset',
|
|
'disabled': true
|
|
}, _('Stop'));
|
|
|
|
var btnOpen = E('button', {
|
|
'class': 'cbi-button cbi-button-action',
|
|
'disabled': true,
|
|
'click': function () {
|
|
var url = 'http://' + window.location.hostname + ':' + port;
|
|
window.open(url, '_blank');
|
|
}
|
|
}, _('Open Dashboard'));
|
|
|
|
|
|
|
|
var handleAction = function (action) {
|
|
return fs.exec('/etc/init.d/fusiontunx', [action]).then(function (res) {
|
|
if (res.code !== 0) {
|
|
ui.addNotification(null, E('p', _('Command failed: %s').format(res.stderr || res.stdout)), 'error');
|
|
throw new Error(res.stderr || res.stdout);
|
|
} else {
|
|
window.location.reload();
|
|
}
|
|
});
|
|
};
|
|
|
|
var handleStart = function () {
|
|
return fs.exec('/etc/init.d/fusiontunx', ['enable']).then(function () {
|
|
return handleAction('start');
|
|
});
|
|
};
|
|
|
|
var handleStop = function () {
|
|
return handleAction('stop').then(function () {
|
|
return fs.exec('/etc/init.d/fusiontunx', ['disable']);
|
|
});
|
|
};
|
|
|
|
btnStart.onclick = ui.createHandlerFn(this, handleStart);
|
|
btnRestart.onclick = ui.createHandlerFn(this, function () { return handleAction('restart'); });
|
|
btnStop.onclick = ui.createHandlerFn(this, handleStop);
|
|
|
|
var updateStatus = function () {
|
|
return callServiceList('fusiontunx').then(function (res) {
|
|
var running = false;
|
|
try {
|
|
var instances = res.fusiontunx.instances;
|
|
for (var i in instances) {
|
|
if (instances[i].running) {
|
|
running = true;
|
|
break;
|
|
}
|
|
}
|
|
} catch (e) { }
|
|
|
|
if (running) {
|
|
statusEl.textContent = _('Running');
|
|
statusEl.className = 'label success';
|
|
|
|
btnStart.setAttribute('disabled', 'disabled');
|
|
btnRestart.removeAttribute('disabled');
|
|
btnStop.removeAttribute('disabled');
|
|
btnOpen.removeAttribute('disabled');
|
|
} else {
|
|
statusEl.textContent = _('Stopped');
|
|
statusEl.className = 'label important';
|
|
|
|
btnStart.removeAttribute('disabled');
|
|
btnRestart.setAttribute('disabled', 'disabled');
|
|
btnStop.setAttribute('disabled', 'disabled');
|
|
btnOpen.setAttribute('disabled', 'disabled');
|
|
}
|
|
}).catch(function () {
|
|
statusEl.textContent = _('Error');
|
|
statusEl.className = 'label warning';
|
|
});
|
|
};
|
|
|
|
updateStatus();
|
|
|
|
poll.add(updateStatus, 3);
|
|
|
|
return E('div', { 'class': 'cbi-map' }, [
|
|
E('h2', _('FusionTunX Control')),
|
|
E('div', { 'class': 'cbi-section' }, [
|
|
E('div', { 'class': 'cbi-value' }, [
|
|
E('label', { 'class': 'cbi-value-title' }, _('Service Status')),
|
|
E('div', { 'class': 'cbi-value-field' }, statusEl)
|
|
]),
|
|
|
|
E('div', { 'class': 'cbi-section-descr' }, _('Control the FusionTunX backend service.')),
|
|
|
|
E('div', { 'class': 'cbi-page-actions' }, [
|
|
btnStart, btnRestart, btnStop, btnOpen
|
|
])
|
|
])
|
|
]);
|
|
},
|
|
handleSave: null,
|
|
handleSaveApply: null,
|
|
handleReset: null
|
|
});
|