From 89662951e63c5f533952017a5cc2956ef3a3ce30 Mon Sep 17 00:00:00 2001 From: gSpot Date: Fri, 19 Jun 2020 21:37:31 +0300 Subject: [PATCH] Initial commit --- Makefile | 17 ++++++ .../view/status/include/00_internet.js | 53 ++++++++++++++++++ po/ru/internet-detector.po | 21 +++++++ po/templates/internet-detector.pot | 11 ++++ .../acl.d/luci-app-internet-detector.json | 10 ++++ screenshots/01.jpg | Bin 0 -> 11003 bytes translations/internet-detector.ru.lmo | Bin 0 -> 140 bytes 7 files changed, 112 insertions(+) create mode 100644 Makefile create mode 100644 htdocs/luci-static/resources/view/status/include/00_internet.js create mode 100644 po/ru/internet-detector.po create mode 100644 po/templates/internet-detector.pot create mode 100644 root/usr/share/rpcd/acl.d/luci-app-internet-detector.json create mode 100644 screenshots/01.jpg create mode 100644 translations/internet-detector.ru.lmo diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8b89838 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2020 gSpot (https://github.com/gSpotx2f/luci-app-internet-detector) +# +# This is free software, licensed under the MIT License. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-internet-detector +LUCI_TITLE:=Internet detector for the LuCI status page +LUCI_DEPENDS:=+luci-mod-admin-full +LUCI_PKGARCH:=all +PKG_LICENSE:=MIT + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/htdocs/luci-static/resources/view/status/include/00_internet.js b/htdocs/luci-static/resources/view/status/include/00_internet.js new file mode 100644 index 0000000..57c03a8 --- /dev/null +++ b/htdocs/luci-static/resources/view/status/include/00_internet.js @@ -0,0 +1,53 @@ +'use strict'; +'require fs'; + +return L.Class.extend({ + title: _('Internet'), + + hosts: [ + '8.8.8.8', + '1.1.1.1', + '8.8.4.4', + ], + + checkInterval: 11, // 5 x 11 = 55 sec. + + load: async function() { + window.internetDetectorCounter = ('internetDetectorCounter' in window) ? + ++window.internetDetectorCounter : 0; + if(!('internetDetectorState' in window)) { + window.internetDetectorState = 1; + }; + + if(window.internetDetectorState === 0 && + window.internetDetectorCounter % this.checkInterval) { + return; + }; + + for(let host of this.hosts) { + await fs.exec('/bin/ping', [ '-c', '1', '-W', '1', host ]).then(res => { + window.internetDetectorState = res.code; + }).catch(e => {}); + + if(window.internetDetectorState === 0) { + break; + }; + }; + }, + + render: function() { + let internetStatus = E('span', { 'class': 'label' }); + + if(window.internetDetectorState === 0) { + internetStatus.style.background = '#46a546'; + internetStatus.textContent = _('Internet connected'); + } else { + internetStatus.textContent = _('Internet disconnected'); + }; + + return E('div', { + 'class': 'cbi-section', + 'style': 'margin-bottom:1em', + }, internetStatus); + }, +}); diff --git a/po/ru/internet-detector.po b/po/ru/internet-detector.po new file mode 100644 index 0000000..d8f98d5 --- /dev/null +++ b/po/ru/internet-detector.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"X-Generator: Poedit 2.0.6\n" + +msgid "Internet" +msgstr "Интернет" + +msgid "Internet connected" +msgstr "Интернет подключен" + +msgid "Internet disconnected" +msgstr "Интернет отключен" diff --git a/po/templates/internet-detector.pot b/po/templates/internet-detector.pot new file mode 100644 index 0000000..e8f45f0 --- /dev/null +++ b/po/templates/internet-detector.pot @@ -0,0 +1,11 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Internet" +msgstr "" + +msgid "Internet connected" +msgstr "" + +msgid "Internet disconnected" +msgstr "" diff --git a/root/usr/share/rpcd/acl.d/luci-app-internet-detector.json b/root/usr/share/rpcd/acl.d/luci-app-internet-detector.json new file mode 100644 index 0000000..c5f7a76 --- /dev/null +++ b/root/usr/share/rpcd/acl.d/luci-app-internet-detector.json @@ -0,0 +1,10 @@ +{ + "luci-app-internet-detector": { + "description": "Grant access to internet-detector procedures", + "read": { + "file": { + "/bin/ping -c 1 -W 1 [0-9.]*": [ "exec" ] + } + } + } +} diff --git a/screenshots/01.jpg b/screenshots/01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6768e2e20fef3c0feac1c34e9535a2755bf64a7 GIT binary patch literal 11003 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 WUWxqQ?N8sqv8|@+*$?2&+s@VtBh^&Hv vA-*c>SY@O7M+OKGNP5uLu(sde2asz5#ESbqUcNt5?%7QsTL6fafj9yH)NxCe literal 0 HcmV?d00001