mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			384 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			384 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | ||
| 'require baseclass';
 | ||
| 'require fs';
 | ||
| 'require rpc';
 | ||
| 'require network';
 | ||
| 
 | ||
| var callSystemBoard = rpc.declare({
 | ||
| 	object: 'system',
 | ||
| 	method: 'board'
 | ||
| });
 | ||
| 
 | ||
| var callSystemInfo = rpc.declare({
 | ||
| 	object: 'system',
 | ||
| 	method: 'info'
 | ||
| });
 | ||
| 
 | ||
| var callOpenMPTCProuterInfo = rpc.declare({
 | ||
| 	object: 'openmptcprouter',
 | ||
| 	method: 'status'
 | ||
| });
 | ||
| 
 | ||
| 
 | ||
| return baseclass.extend({
 | ||
| 
 | ||
| 	params: [],
 | ||
| 
 | ||
| 	formatBytes: function(a,b=2){if(0===a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return parseFloat((a/Math.pow(1024,d)).toFixed(c))+" "+["Bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][d]},
 | ||
| 	load: function() {
 | ||
| 		return Promise.all([
 | ||
| 			network.getWANNetworks(),
 | ||
| 			network.getWAN6Networks(),
 | ||
| 			L.resolveDefault(callSystemBoard(), {}),
 | ||
| 			L.resolveDefault(callSystemInfo(), {}),
 | ||
| 			L.resolveDefault(callOpenMPTCProuterInfo(), {})
 | ||
| 		]);
 | ||
| 	},
 | ||
| 
 | ||
| 	renderHtml: function(data, type) {
 | ||
| 
 | ||
| 		var icon = type;
 | ||
| 		var title = 'router' == type ? _('System') : _('Internet');
 | ||
| 		var container_wapper = E('div', { 'class': type + '-status-self dashboard-bg box-s1'});
 | ||
| 		var container_box = E('div', { 'class': type + '-status-info'});
 | ||
| 		var container_item = E('div', { 'class': 'settings-info'});
 | ||
| 
 | ||
| 		if ('internet' == type) {
 | ||
| 			icon = (data.internet.v4.connected.value || data.internet.v6.connected.value) ? type : 'not-internet';
 | ||
| 		}
 | ||
| 
 | ||
| 		container_box.appendChild(E('div', { 'class': 'title'}, [
 | ||
| 			E('img', {
 | ||
| 				'src': L.resource('view/dashboard/icons/' + icon + '.svg'),
 | ||
| 				'width': 'router' == type ? 64 : 54,
 | ||
| 				'title': title,
 | ||
| 				'class': 'middle'
 | ||
| 			}),
 | ||
| 			E('h3', title)
 | ||
| 		]));
 | ||
| 
 | ||
| 		container_box.appendChild(E('hr'));
 | ||
| 
 | ||
| 		if ('internet' == type) {
 | ||
| 			
 | ||
| 			var container_internet_v4 = E('div');
 | ||
| 			var container_internet_v6 = E('div');
 | ||
| 			var container_internet_vps = E('div');
 | ||
| 
 | ||
| 			for(var idx in data['vps']) {
 | ||
| 				var classname = ver,
 | ||
| 					suppelements = '',
 | ||
| 					visible = data['vps'][idx].visible;
 | ||
| 				if ('title' === idx) {
 | ||
| 					container_internet_vps.appendChild(
 | ||
| 						E('p', { 'class': 'mt-2'}, [
 | ||
| 							E('h4', {'class': ''}, [ data['vps'].title ]),
 | ||
| 						])
 | ||
| 					);
 | ||
| 					continue;
 | ||
| 				}
 | ||
| 				if (visible) {
 | ||
| 					container_internet_vps.appendChild(
 | ||
| 						E('p', { 'class': 'mt-2'}, [
 | ||
| 							E('span', {'class': ''}, [ data['vps'][idx].title + ':' ]),
 | ||
| 							E('span', {'class': ''}, [ data['vps'][idx].value ]),
 | ||
| 							suppelements
 | ||
| 						])
 | ||
| 					);
 | ||
| 				}
 | ||
| 			}
 | ||
| 
 | ||
| 
 | ||
| 			for(var idx in data['internet']) {
 | ||
| 
 | ||
| 				for(var ver in data['internet'][idx]) {
 | ||
| 					var classname = ver,
 | ||
| 						suppelements = '',
 | ||
| 						visible = data['internet'][idx][ver].visible;
 | ||
| 
 | ||
| 					if('connected' === ver) {
 | ||
| 						classname = data['internet'][idx][ver].value ? 'label label-success' : 'label label-danger';
 | ||
| 						data['internet'][idx][ver].value = data['internet'][idx][ver].value ? _('yes') : _('no');
 | ||
| 					}
 | ||
| 
 | ||
| 					if ('v4' === idx) {
 | ||
| 
 | ||
| 						if ('title' === ver) {
 | ||
| 							container_internet_v4.appendChild(
 | ||
| 								E('p', { 'class': 'mt-2'}, [
 | ||
| 									E('h4', {'class': ''}, [ data['internet'][idx].title ]),
 | ||
| 								])
 | ||
| 							);
 | ||
| 							continue;
 | ||
| 						}
 | ||
| 
 | ||
| 						if ('addrsv4' === ver) {
 | ||
| 							var addrs = data['internet'][idx][ver].value;
 | ||
| 							if(Array.isArray(addrs) && addrs.length) {
 | ||
| 								for(var ip in addrs) {
 | ||
| 									data['internet'][idx][ver].value = addrs[ip].split('/')[0];
 | ||
| 								}
 | ||
| 							}
 | ||
| 						}
 | ||
| 
 | ||
| 						if (visible) {
 | ||
| 							container_internet_v4.appendChild(
 | ||
| 								E('p', { 'class': 'mt-2'}, [
 | ||
| 									E('span', {'class': ''}, [ data['internet'][idx][ver].title + ':' ]),
 | ||
| 									E('span', {'class': classname }, [ data['internet'][idx][ver].value ]),
 | ||
| 									suppelements
 | ||
| 								])
 | ||
| 							);
 | ||
| 						}
 | ||
| 
 | ||
| 					} else {
 | ||
| 
 | ||
| 						if ('title' === ver) {
 | ||
| 							container_internet_v6.appendChild(
 | ||
| 								E('p', { 'class': 'mt-2'}, [
 | ||
| 									E('h4', {'class': ''}, [ data['internet'][idx].title ]),
 | ||
| 								])
 | ||
| 							);
 | ||
| 							continue;
 | ||
| 						}
 | ||
| 
 | ||
| 						if (visible) {
 | ||
| 							container_internet_v6.appendChild(
 | ||
| 								E('p', {'class': 'mt-2'}, [
 | ||
| 									E('span', {'class': ''}, [data['internet'][idx][ver].title + ':']),
 | ||
| 									E('span', {'class': classname}, [data['internet'][idx][ver].value]),
 | ||
| 									suppelements
 | ||
| 								])
 | ||
| 							);
 | ||
| 						}
 | ||
| 					}
 | ||
| 				}
 | ||
| 			}
 | ||
| 
 | ||
| 			container_item.appendChild(E('p', { 'class': 'table'}, [
 | ||
| 				E('div', { 'class': 'tr' }, [
 | ||
| 					E('div', { 'class': 'td' }, [ container_internet_vps ])
 | ||
| 				]),
 | ||
| 				E('div', { 'class': 'tr' }, [
 | ||
| 					E('div', { 'class': 'td' }, [ 
 | ||
| 						container_internet_v4
 | ||
| 					]),
 | ||
| 					E('div', { 'class': 'td' }, [ 
 | ||
| 						container_internet_v6
 | ||
| 					])
 | ||
| 				])
 | ||
| 			]));
 | ||
| 		} else {
 | ||
| 			for(var idx in data) {
 | ||
| 				container_item.appendChild(
 | ||
| 					E('p', { 'class': 'mt-2'}, [
 | ||
| 						E('span', {'class': ''}, [ data[idx].title + ':' ]),
 | ||
| 						E('span', {'class': ''}, [ data[idx].value ])
 | ||
| 					])
 | ||
| 				);
 | ||
| 			}
 | ||
| 		}
 | ||
| 
 | ||
| 		container_box.appendChild(container_item);
 | ||
| 		container_box.appendChild(E('hr'));
 | ||
| 		container_wapper.appendChild(container_box);
 | ||
| 		return container_wapper;
 | ||
| 	},
 | ||
| 
 | ||
| 	renderUpdateWanData: function(data, v6) {
 | ||
| 		for (var i = 0; i < data.length; i++) {
 | ||
| 			 var ifc = data[i];
 | ||
| 
 | ||
| 			 if (v6) {
 | ||
| 				this.params.internet.v6.ipprefixv6.value =  ifc.getIP6Prefix() || '-';
 | ||
| 				this.params.internet.v6.gatewayv6.value =  ifc.getGateway6Addr() || '-';
 | ||
| 				this.params.internet.v6.protocol.value=  ifc.getI18n() || E('em', _('Not connected'));
 | ||
| 				this.params.internet.v6.addrsv6.value = ifc.getIP6Addrs() || [ '-' ];
 | ||
| 				this.params.internet.v6.dnsv6.value = ifc.getDNS6Addrs() || [ '-' ];
 | ||
| 				this.params.internet.v6.connected.value = ifc.isUp();
 | ||
| 			 } else {
 | ||
| 				var uptime = ifc.getUptime();
 | ||
| 				this.params.internet.v4.uptime.value = (uptime > 0) ? '%t'.format(uptime) : '-';
 | ||
| 				this.params.internet.v4.protocol.value=  ifc.getI18n() || E('em', _('Not connected'));
 | ||
| 				this.params.internet.v4.gatewayv4.value =  ifc.getGatewayAddr() || '0.0.0.0';
 | ||
| 				this.params.internet.v4.connected.value = ifc.isUp();
 | ||
| 				this.params.internet.v4.addrsv4.value = ifc.getIPAddrs() || [ '-'];
 | ||
| 				this.params.internet.v4.dnsv4.value = ifc.getDNSAddrs() || [ '-' ];
 | ||
| 			 }
 | ||
| 		}
 | ||
| 	},
 | ||
| 	renderUpdateOpenMPTCProuterData: function(data, v6) {
 | ||
| 		if (data.openmptcprouter != undefined) {
 | ||
| 			if (data.openmptcprouter.wan_addr != '') this.params.omrvps.internet.v4.connected.value = true;
 | ||
| 			if (data.openmptcprouter.wan_addr) this.params.omrvps.internet.v4.addrsv4.value = data.openmptcprouter.wan_addr || [ '-'];
 | ||
| 			if (data.openmptcprouter.wan_addr6) this.params.omrvps.internet.v6.addrsv6.value = data.openmptcprouter.wan_addr6 || [ '-'];
 | ||
| 			if (data.openmptcprouter.vps_kernel) this.params.omrvps.vps.version.value = data.openmptcprouter.vps_kernel + ' ' + data.openmptcprouter.vps_omr_version || [ '-'];
 | ||
| 			if (data.openmptcprouter.vps_loadavg) {
 | ||
| 				var vps_loadavg = data.openmptcprouter.vps_loadavg.split(" ");
 | ||
| 				this.params.omrvps.vps.load.value = '%s, %s, %s'.format(vps_loadavg[0],vps_loadavg[1],vps_loadavg[2]);
 | ||
| 			}
 | ||
| 			if (data.openmptcprouter.vps_uptime) this.params.omrvps.vps.uptime.value = String.format('%t', data.openmptcprouter.vps_uptime) || [ '-'];
 | ||
| 			if (data.openmptcprouter.proxy_traffic) this.params.omrvps.vps.trafficproxy.value = this.formatBytes(data.openmptcprouter.proxy_traffic) || [ '-'];
 | ||
| 			if (data.openmptcprouter.vpn_traffic) this.params.omrvps.vps.trafficvpn.value = this.formatBytes(data.openmptcprouter.vpn_traffic) || [ '-'];
 | ||
| 			if (data.openmptcprouter.total_traffic) this.params.omrvps.vps.traffictotal.value = this.formatBytes(data.openmptcprouter.total_traffic) || [ '-'];
 | ||
| 			if (data.openmptcprouter.ipv6 != 'disabled') this.params.omrvps.internet.v6.connected.value = true;
 | ||
| 		}
 | ||
| 	},
 | ||
| 
 | ||
| 	renderInternetBox: function(data) {
 | ||
| 
 | ||
| 		this.params.omrvps = {
 | ||
| 			vps: {
 | ||
| 				title: _('Server'),
 | ||
| 
 | ||
| 				version: {
 | ||
| 					title: _('Version'),
 | ||
| 					visible: true,
 | ||
| 					value: [ '-' ]
 | ||
| 				},
 | ||
| 
 | ||
| 				load: {
 | ||
| 					title: _('Load'),
 | ||
| 					visible: true,
 | ||
| 					value: [ '-' ]
 | ||
| 				},
 | ||
| 
 | ||
| 				uptime: {
 | ||
| 					title: _('Uptime'),
 | ||
| 					visible: true,
 | ||
| 					value: [ '-' ]
 | ||
| 				},
 | ||
| 
 | ||
| 				trafficproxy: {
 | ||
| 					title: _('Proxy traffic'),
 | ||
| 					visible: true,
 | ||
| 					value: [ '-' ]
 | ||
| 				},
 | ||
| 
 | ||
| 				trafficvpn: {
 | ||
| 					title: _('VPN traffic'),
 | ||
| 					visible: true,
 | ||
| 					value: [ '-' ]
 | ||
| 				},
 | ||
| 
 | ||
| 				traffictotal: {
 | ||
| 					title: _('Total traffic'),
 | ||
| 					visible: true,
 | ||
| 					value: [ '-' ]
 | ||
| 				}
 | ||
| 			},
 | ||
| 
 | ||
| 			internet: {
 | ||
| 
 | ||
| 				v4: {
 | ||
| 					title: _('IPv4 Internet'),
 | ||
| 
 | ||
| 					connected: {
 | ||
| 						title: _('Connected'),
 | ||
| 						visible: true,
 | ||
| 						value: false
 | ||
| 					},
 | ||
| 
 | ||
| 					addrsv4: {
 | ||
| 						title: _('IPv4'),
 | ||
| 						visible: true,
 | ||
| 						value: [ '-' ]
 | ||
| 					}
 | ||
| 				},
 | ||
| 
 | ||
| 				v6: {
 | ||
| 					title: _('IPv6 Internet'),
 | ||
| 
 | ||
| 					connected: {
 | ||
| 						title: _('Connected'),
 | ||
| 						visible: true,
 | ||
| 						value: false
 | ||
| 					},
 | ||
| 
 | ||
| 					ipprefixv6 : {
 | ||
| 						title: _('IPv6 prefix'),
 | ||
| 						visible: false,
 | ||
| 						value: ' - '
 | ||
| 					},
 | ||
| 
 | ||
| 					addrsv6: {
 | ||
| 						title: _('IPv6'),
 | ||
| 						visible: true,
 | ||
| 						value: [ '-' ]
 | ||
| 					}
 | ||
| 
 | ||
| 				}
 | ||
| 			}
 | ||
| 		};
 | ||
| 
 | ||
| 		//this.renderUpdateWanData(data[0], false);
 | ||
| 		//this.renderUpdateWanData(data[1], true);
 | ||
| 		this.renderUpdateOpenMPTCProuterData(data[4], true);
 | ||
| 
 | ||
| 		return this.renderHtml(this.params.omrvps, 'internet');
 | ||
| 	},
 | ||
| 
 | ||
| 	renderRouterBox: function(data) {
 | ||
| 
 | ||
| 		var boardinfo   = data[2],
 | ||
| 			systeminfo  = data[3];
 | ||
| 
 | ||
| 		var datestr = null;
 | ||
| 
 | ||
| 		if (systeminfo.localtime) {
 | ||
| 			var date = new Date(systeminfo.localtime * 1000);
 | ||
| 
 | ||
| 			datestr = '%04d-%02d-%02d %02d:%02d:%02d'.format(
 | ||
| 				date.getUTCFullYear(),
 | ||
| 				date.getUTCMonth() + 1,
 | ||
| 				date.getUTCDate(),
 | ||
| 				date.getUTCHours(),
 | ||
| 				date.getUTCMinutes(),
 | ||
| 				date.getUTCSeconds()
 | ||
| 			);
 | ||
| 		}
 | ||
| 
 | ||
| 		this.params.router = {
 | ||
| 			uptime: {
 | ||
| 				title: _('Uptime'),
 | ||
| 				value: systeminfo.uptime ? '%t'.format(systeminfo.uptime) : null,
 | ||
| 			},
 | ||
| 
 | ||
| 			localtime: {
 | ||
| 				title: _('Local Time'),
 | ||
| 				value: datestr
 | ||
| 			},
 | ||
| 
 | ||
| 			load: {
 | ||
| 				title: _('Load Average'),
 | ||
| 				value: Array.isArray(systeminfo.load) ? '%.2f, %.2f, %.2f'.format(systeminfo.load[0] / 65535.0,systeminfo.load[1] / 65535.0,systeminfo.load[2] / 65535.0) : null
 | ||
| 			},
 | ||
| 
 | ||
| 			kernel: {
 | ||
| 				title: _('Kernel Version'),
 | ||
| 				value: boardinfo.kernel
 | ||
| 			},
 | ||
| 
 | ||
| 			model: {
 | ||
| 				title: _('Model'),
 | ||
| 				value: boardinfo.model
 | ||
| 			},
 | ||
| 
 | ||
| 			system: {
 | ||
| 				title: _('Architecture'),
 | ||
| 				value: boardinfo.system
 | ||
| 			},
 | ||
| 
 | ||
| 			release: {
 | ||
| 				title: _('Firmware Version'),
 | ||
| 				value: (typeof boardinfo.release !== "undefined") ? ((typeof boardinfo.release.description !== "undefined") ? boardinfo.release.description : null) : null
 | ||
| 			}
 | ||
| 		};
 | ||
| 
 | ||
| 		return this.renderHtml(this.params.router, 'router');
 | ||
| 	},
 | ||
| 
 | ||
| 	render: function(data) {
 | ||
| 		return [this.renderInternetBox(data), this.renderRouterBox(data)];
 | ||
| 	}
 | ||
| });
 |