Files
ruantiblock_openwrt/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/info.js
T

330 lines
8.3 KiB
JavaScript
Raw Normal View History

2020-06-19 20:43:08 +03:00
'use strict';
'require fs';
2021-12-05 19:18:32 +03:00
'require poll';
2020-06-19 20:43:08 +03:00
'require ui';
2021-12-05 19:18:32 +03:00
'require view';
2020-06-19 20:43:08 +03:00
'require view.ruantiblock.tools as tools';
2021-12-05 19:18:32 +03:00
return view.extend({
secToTimeString: function(value) {
let string = '';
if(/^\d+$/.test(value)) {
value = Number(value);
let hours = 0, mins = 0, sec = 0, rest = value;
if(value >= 3600) {
hours = Math.floor(value / 3600);
rest = value % 3600;
};
if(rest >= 60) {
mins = Math.floor(rest / 60);
rest = rest % 60;
};
sec = rest;
if(hours > 0) {
string = string + hours + _('h');
};
if(mins > 0) {
string = string + ' ' + mins + _('m');
};
string = string + ' ' + sec + _('s');
};
return string;
},
makeDnsmasqTable: function(ipDataArray) {
let lines = `<tr class="tr"><td class="td center">${_('No entries available...')}</td></tr>`;
let ipTable = E('table', { 'id': 'ipTable', 'class': 'table' });
if(ipDataArray.length > 1) {
lines = [];
ipDataArray.forEach((e, i) => {
if(e) {
lines.push(
`<tr class="tr"><td class="td left" data-title="${_('IP address')}">${e[0]}</td>` +
2023-02-05 01:37:20 +03:00
`<td class="td left" data-title="${_('Timeout')}">${(e[1]) ? this.secToTimeString(e[1]) : ''}</td></tr>`
);
};
});
lines = lines.join('');
ipTable.append(
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th left', 'style': 'min-width:33%' }, _('IP address')),
(ipDataArray[0][1]) ? E('th', { 'class': 'th left' }, _('Timeout')) : ''
])
);
};
try {
ipTable.insertAdjacentHTML('beforeend', lines);
} catch(err) {
if(err.name === 'SyntaxError') {
ui.addNotification(null,
E('p', {}, _('HTML/XML error') + ': ' + err.message), 'error');
};
throw err;
};
return ipTable;
},
2021-11-04 18:57:08 +03:00
infoPoll: function() {
return fs.exec_direct(tools.execPath, [ 'html-info' ], 'json').catch(e => {
ui.addNotification(null, E('p', _('Unable to execute or read contents')
+ ': %s [ %s ]'.format(e.message, tools.execPath)
));
2021-12-05 19:18:32 +03:00
poll.stop();
2021-11-04 18:57:08 +03:00
}).then(data => {
if(!data) {
return;
};
try {
data = JSON.parse(data);
} catch(err) {};
if(data.status === 'enabled') {
let date = document.getElementById('last_blacklist_update.date');
if(data.last_blacklist_update.status) {
if(date) {
date.textContent = data.last_blacklist_update.date;
};
let ip = document.getElementById('last_blacklist_update.ip');
if(ip) {
ip.textContent = data.last_blacklist_update.ip;
};
let cidr = document.getElementById('last_blacklist_update.cidr');
if(cidr) {
cidr.textContent = data.last_blacklist_update.cidr;
};
let fqdn = document.getElementById('last_blacklist_update.fqdn');
if(fqdn) {
fqdn.textContent = data.last_blacklist_update.fqdn;
};
} else {
if(date) {
date.textContent = _('No data');
};
};
if(data.iptables) {
for(let [k, v] of Object.entries(data.iptables)) {
if(k === '_dummy') continue;
let elem = document.getElementById('iptables.' + k);
if(elem) {
elem.textContent = v;
};
};
};
if(data.ipset) {
for(let [k, v] of Object.entries(data.ipset)) {
if(k === '_dummy') continue;
let elem0 = document.getElementById('ipset.' + k + '.' + '0');
let elem1 = document.getElementById('ipset.' + k + '.' + '1');
if(elem0 && elem1) {
elem0.textContent = v[0];
elem1.textContent = v[1];
};
};
};
if(data.dnsmasq) {
let rdTableWrapper = document.getElementById('rdTableWrapper');
rdTableWrapper.innerHTML = '';
rdTableWrapper.append(this.makeDnsmasqTable(data.dnsmasq));
};
2021-11-04 18:57:08 +03:00
} else {
2021-12-05 19:18:32 +03:00
if(poll.active()) {
poll.stop();
2021-11-04 18:57:08 +03:00
};
};
});
},
load: function() {
return fs.exec_direct(tools.execPath, [ 'html-info' ], 'json').catch(e => {
ui.addNotification(null, E('p', _('Unable to execute or read contents')
+ ': %s [ %s ]'.format(e.message, tools.execPath)
));
})
},
render: function(data) {
if(!data) {
return;
};
try {
data = JSON.parse(data);
} catch(err) {};
let update_status = null,
iptables = null,
ipset = null,
dnsmasq = null;
2021-11-04 18:57:08 +03:00
if(data) {
if(data.status === 'enabled') {
update_status = E('table', { 'class': 'table' });
2021-11-04 18:57:08 +03:00
if(data.last_blacklist_update.status) {
update_status.append(
E('tr', { 'class': 'tr' }, [
E('td', { 'class': 'td left', 'style': 'min-width:33%' },
2021-11-04 18:57:08 +03:00
_('Last blacklist update') + ':'),
E('td', { 'class': 'td left',
'id' : 'last_blacklist_update.date' },
2021-11-04 18:57:08 +03:00
data.last_blacklist_update.date),
]),
E('tr', { 'class': 'tr' }, [
E('td', { 'class': 'td left' }, 'CIDR:'),
E('td', { 'class': 'td left',
'id' : 'last_blacklist_update.cidr' },
2021-11-04 18:57:08 +03:00
data.last_blacklist_update.cidr),
]),
2022-05-10 20:37:10 +03:00
E('tr', { 'class': 'tr' }, [
E('td', { 'class': 'td left' }, 'IP:'),
E('td', { 'class': 'td left',
'id' : 'last_blacklist_update.ip' },
2022-05-10 20:37:10 +03:00
data.last_blacklist_update.ip),
]),
E('tr', { 'class': 'tr' }, [
E('td', { 'class': 'td left' }, 'FQDN:'),
E('td', { 'class': 'td left',
'id' : 'last_blacklist_update.fqdn' },
2021-11-04 18:57:08 +03:00
data.last_blacklist_update.fqdn),
])
);
} else {
update_status.append(
E('tr', { 'class': 'tr' }, [
E('td', { 'class': 'td left' },
2021-11-04 18:57:08 +03:00
_('Last blacklist update')),
E('td', { 'class': 'td left' }, _('No data')),
2021-11-04 18:57:08 +03:00
])
);
};
if(data.iptables) {
let table_iptables = E('table', { 'class': 'table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th left', 'style': 'min-width:33%' },
2021-11-04 18:57:08 +03:00
_('Match-set')),
E('th', { 'class': 'th left' }, _('Bytes')),
2021-11-04 18:57:08 +03:00
]),
]);
for(let [k, v] of Object.entries(data.iptables)) {
if(k === '_dummy') continue;
2021-11-04 18:57:08 +03:00
table_iptables.append(
E('tr', { 'class': 'tr' }, [
E('td', {
2021-11-04 18:57:08 +03:00
'class' : 'td left',
'data-title': _('Match-set'),
}, k),
E('td', {
2021-11-04 18:57:08 +03:00
'class' : 'td left',
'id' : 'iptables.' + k,
'data-title': _('Bytes'),
}, v),
])
);
};
iptables = E([
E('h3', {}, _('Iptables rules')),
table_iptables,
]);
};
if(data.ipset) {
let table_ipset = E('table', { 'class': 'table' },
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th left', 'style': 'min-width:33%' },
2021-11-04 18:57:08 +03:00
_('Name')),
E('th', { 'class': 'th left' },
2021-11-04 18:57:08 +03:00
_('Size in memory')),
E('th', { 'class': 'th left' },
2021-11-04 18:57:08 +03:00
_('Number of entries')),
])
);
for(let [k, v] of Object.entries(data.ipset)) {
if(k === '_dummy') continue;
table_ipset.append(
E('tr', { 'class': 'tr' }, [
E('td', {
2021-12-05 19:18:32 +03:00
'class': 'td left',
2021-11-04 18:57:08 +03:00
'data-title': _('Name'),
}, k),
E('td', {
2021-11-04 18:57:08 +03:00
'class' : 'td left',
'id' : 'ipset.' + k + '.' + '0',
'data-title': _('Size in memory'),
}, v[0]),
E('td', {
2021-11-04 18:57:08 +03:00
'class' : 'td left',
'id' : 'ipset.' + k + '.' + '1',
'data-title': _('Number of entries'),
}, v[1]),
])
);
};
ipset = E([
E('h3', {}, _('Ipset')),
table_ipset,
]);
};
if(data.dnsmasq) {
let rdTableWrapper = E('div', {
'id' : 'rdTableWrapper',
'style': 'width:100%'
}, this.makeDnsmasqTable(data.dnsmasq));
dnsmasq = E([
E('h3', {}, _('Dnsmasq')),
rdTableWrapper,
]);
};
poll.add(L.bind(this.infoPoll, this));
2021-11-04 18:57:08 +03:00
} else {
update_status = E('em', {}, _('Status') + ' : ' + _('disabled'));
};
};
return E([
E('h2', { 'class': 'fade-in' },
_('Ruantiblock') + ' - ' + _('Statistics')
),
E('div', { 'class': 'cbi-section-descr fade-in' }),
E('div', { 'class': 'cbi-section fade-in' },
E('div', { 'class': 'cbi-section-node' }, update_status)
),
E('div', { 'class': 'cbi-section fade-in' },
E('div', { 'class': 'cbi-section-node' }, iptables)
),
E('div', { 'class': 'cbi-section fade-in' },
E('div', { 'class': 'cbi-section-node' }, ipset)
),
E('div', { 'class': 'cbi-section fade-in' },
E('div', { 'class': 'cbi-section-node' }, dnsmasq)
),
2021-11-04 18:57:08 +03:00
]);
},
handleSave : null,
handleSaveApply: null,
handleReset : null,
2020-06-19 20:43:08 +03:00
});