From a554668306e4e40dc151b2d52ddded2bd9b256d7 Mon Sep 17 00:00:00 2001 From: gSpot Date: Fri, 3 Dec 2021 22:16:18 +0300 Subject: [PATCH] Moving packages --- README.md | 6 +-- .../files/usr/bin/internet-detector | 45 +++++++++--------- .../19.07/internet-detector_0.3.0-1_all.ipk | Bin 4245 -> 0 bytes ...luci-app-internet-detector_0.3.0-2_all.ipk | Bin 5602 -> 0 bytes ...-i18n-internet-detector-ru_0.3.0-2_all.ipk | Bin 2981 -> 0 bytes 5 files changed, 25 insertions(+), 26 deletions(-) delete mode 100644 packages/19.07/internet-detector_0.3.0-1_all.ipk delete mode 100644 packages/19.07/luci-app-internet-detector_0.3.0-2_all.ipk delete mode 100644 packages/19.07/luci-i18n-internet-detector-ru_0.3.0-2_all.ipk diff --git a/README.md b/README.md index d1871c4..de617ce 100644 --- a/README.md +++ b/README.md @@ -7,20 +7,20 @@ Dependences: lua, luci-lib-nixio, libuci-lua **Installation notes:** - wget --no-check-certificate -O /tmp/internet-detector_0.3.0-1_all.ipk https://github.com/gSpotx2f/luci-app-internet-detector/raw/master/packages/19.07/internet-detector_0.3.0-1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector_0.3.0-1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/19.07/internet-detector_0.3.0-1_all.ipk opkg install /tmp/internet-detector_0.3.0-1_all.ipk rm /tmp/internet-detector_0.3.0-1_all.ipk /etc/init.d/internet-detector start /etc/init.d/internet-detector enable - wget --no-check-certificate -O /tmp/luci-app-internet-detector_0.3.0-2_all.ipk https://github.com/gSpotx2f/luci-app-internet-detector/raw/master/packages/19.07/luci-app-internet-detector_0.3.0-2_all.ipk + wget --no-check-certificate -O /tmp/luci-app-internet-detector_0.3.0-2_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/19.07/luci-app-internet-detector_0.3.0-2_all.ipk opkg install /tmp/luci-app-internet-detector_0.3.0-2_all.ipk rm /tmp/luci-app-internet-detector_0.3.0-2_all.ipk /etc/init.d/rpcd reload **i18n-ru:** - wget --no-check-certificate -O /tmp/luci-i18n-internet-detector-ru_0.3.0-2_all.ipk https://github.com/gSpotx2f/luci-app-internet-detector/raw/master/packages/19.07/luci-i18n-internet-detector-ru_0.3.0-2_all.ipk + wget --no-check-certificate -O /tmp/luci-i18n-internet-detector-ru_0.3.0-2_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/19.07/luci-i18n-internet-detector-ru_0.3.0-2_all.ipk opkg install /tmp/luci-i18n-internet-detector-ru_0.3.0-2_all.ipk rm /tmp/luci-i18n-internet-detector-ru_0.3.0-2_all.ipk diff --git a/internet-detector/files/usr/bin/internet-detector b/internet-detector/files/usr/bin/internet-detector index 4514434..349ca7f 100755 --- a/internet-detector/files/usr/bin/internet-detector +++ b/internet-detector/files/usr/bin/internet-detector @@ -63,21 +63,21 @@ if uci then -- Load settings from UCI - local cursor = uci.cursor() - Config.mode = cursor:get("internet-detector", "config", "mode") - Config.enableLogger = cursor:get("internet-detector", "config", "enable_logger") - Config.enableUpScript = cursor:get("internet-detector", "config", "enable_up_script") - Config.enableDownScript = cursor:get("internet-detector", "config", "enable_down_script") - Config.enableRunScript = cursor:get("internet-detector", "config", "enable_run_script") - Config.intervalUp = tonumber(cursor:get("internet-detector", "config", "interval_up")) - Config.intervalDown = tonumber(cursor:get("internet-detector", "config", "interval_down")) - Config.hosts = cursor:get("internet-detector", "config", "hosts") - Config.checkType = tonumber(cursor:get("internet-detector", "config", "check_type")) - Config.connectionAttempts = tonumber(cursor:get("internet-detector", "config", "connection_attempts")) - Config.connectionTimeout = tonumber(cursor:get("internet-detector", "config", "connection_timeout")) - Config.UIConnectionAttempts = tonumber(cursor:get("internet-detector", "config", "ui_connection_attempts")) - Config.UIConnectionTimeout = tonumber(cursor:get("internet-detector", "config", "ui_connection_timeout")) - Config.tcpPort = tonumber(cursor:get("internet-detector", "config", "tcp_port")) + local cursor = uci.cursor() + Config.mode = cursor:get(Config.appName, "config", "mode") + Config.enableLogger = cursor:get(Config.appName, "config", "enable_logger") + Config.enableUpScript = cursor:get(Config.appName, "config", "enable_up_script") + Config.enableDownScript = cursor:get(Config.appName, "config", "enable_down_script") + Config.enableRunScript = cursor:get(Config.appName, "config", "enable_run_script") + Config.intervalUp = tonumber(cursor:get(Config.appName, "config", "interval_up")) + Config.intervalDown = tonumber(cursor:get(Config.appName, "config", "interval_down")) + Config.hosts = cursor:get(Config.appName, "config", "hosts") + Config.checkType = tonumber(cursor:get(Config.appName, "config", "check_type")) + Config.connectionAttempts = tonumber(cursor:get(Config.appName, "config", "connection_attempts")) + Config.connectionTimeout = tonumber(cursor:get(Config.appName, "config", "connection_timeout")) + Config.UIConnectionAttempts = tonumber(cursor:get(Config.appName, "config", "ui_connection_attempts")) + Config.UIConnectionTimeout = tonumber(cursor:get(Config.appName, "config", "ui_connection_timeout")) + Config.tcpPort = tonumber(cursor:get(Config.appName, "config", "tcp_port")) else io.stderr:write("libuci-lua does not exists! The default settings will be used...\n") @@ -105,12 +105,12 @@ local function readValueFromFile(filePath) return retValue end -local function writeLogMessage(msg) +local function writeLogMessage(level, msg) if Config.enableLogger == "1" then local pidValue = readValueFromFile(Config.pidFile) - --local fh = io.popen(string.format('%s -t "%s[%d]" -p daemon.%s "%s"', Config.loggerCmd, Config.appName, (pidValue or ""), Config.loggerLevel, msg), 'r') + --local fh = io.popen(string.format('%s -t "%s[%d]" -p daemon.%s "%s"', Config.loggerCmd, Config.appName, (pidValue or ""), level, msg), 'r') --fh:close() - nixio.syslog(Config.loggerLevel, string.format("%s[%d]: %s", Config.appName, (pidValue or ""), msg)) + nixio.syslog(level, string.format("%s[%d]: %s", Config.appName, (pidValue or ""), msg)) end end @@ -118,7 +118,6 @@ local function runExternalScript(scriptPath, inetStat) if inetStat == nil then inetStat = "" end - if nixio.fs.access(scriptPath, "x") then local fh = io.popen(string.format('/bin/sh -c "%s %s" &', scriptPath, inetStat), "r") fh:close() @@ -196,7 +195,7 @@ local function main() interval = Config.intervalUp if last_status ~= nil and current_status ~= last_status then writeValueToFile(Config.statusFile, current_status) - writeLogMessage("internet connected") + writeLogMessage("notice", "internet connected") if Config.enableUpScript == "1" then runExternalScript(Config.upScript) end @@ -205,7 +204,7 @@ local function main() interval = Config.intervalDown if last_status ~= nil and current_status ~= last_status then writeValueToFile(Config.statusFile, current_status) - writeLogMessage("internet disconnected") + writeLogMessage("notice", "internet disconnected") if Config.enableDownScript == "1" then runExternalScript(Config.downScript) end @@ -282,7 +281,7 @@ local function stop() if not success then io.stderr:write(string.format('No such process: "%s"\n', pidValue)) end - writeLogMessage('stoped') + writeLogMessage("info", "stoped") removeProcessFiles() end end @@ -312,7 +311,7 @@ end local function run() local pidValue = nixio.getpid() writeValueToFile(Config.pidFile, pidValue) - writeLogMessage('started') + writeLogMessage("info", "started") main() end diff --git a/packages/19.07/internet-detector_0.3.0-1_all.ipk b/packages/19.07/internet-detector_0.3.0-1_all.ipk deleted file mode 100644 index 909d8062751a4d52c604df77b60caba93c331bbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4245 zcmV;G5NhuqiwFP!000001MJvmFx=h00B|Bogb>{Zi$rHFRwqgjq6Ci~(V{J~+7f+< z6fKCddR?q&NvvK%qOLBhBv?dENc8CZ{?EPl&7J4PeO^8P|J)g$IWy5*m|0Dy0{rCK*zs`Sxkw{3%%1B8-VUjYkBv1)SDVP)q zH}oHg<}dtwk@h~^+$27pp2+{}+~4j0KP3r)Qvau8xbU9?5qGpl+C%=#0f!Yx?ZBq1vZFNpq#nifvfp{QB34%db(4(%{Uq#Jf67PUZ6mD?o*l$Te7U z;6diT4i4Kyc4r8J&N<%sIf_G13NhhFyVAY`bbtJNH=r3>)u8l$U^bA zE(aam^+UMUicw~9(a|L2#5|J|`L*ro2+{z{iv4P;M~hH<#?x>uM9B{q2XWBgny7L) zf2tMeEJ_w!%S6$y%5(@#ozlLvUkb0BP&q)U?BS{oC}RLc#jL~sdLE$M4VWH- zuk|0#aUp1BwgH~*6e(tmV$i)@Yi#d-Gnpc^_xQ)?=!g%Xd(fVhJkKiRZS)D=zxv z>pei_M^|@70PG-2P?^x;w0RY}!zH_hdQx5l`eE{IbtO35V zHxcSr&Q!7T3b$K}@XQ~z2wtcKY|EAIFZ6t!t;n->tv1>pzAxI+uZax1$eYtfpY46 zZNQM#BMF$4ZK^0}n^T_H1dgXMqa{Fa)Tk+|!a;q{@i92=_{Nz^?{`Ss$caaA#RTA0 zBPDzQJZOH`f(PiJxk_dfsvWuvOI1#O3Ozk$cgBxCb49Iw)?})70D972wB53ttOf-$ z-42Fje@1#pgS1Ie24@EId4B3ZB>3AiRCh^YSjW*O%F2-{6fCb2hl!Kh6^$i$zkRad zvU^JNHb2;7xx;JXQPGUth6zm#d3J6#cbj9v(2P>}##84Ea4r_jtnr5|_uIq8!7DZ} z@bsY);Wp2*1W$(yWOp^u^Gk<5t%o|r)K2qZ;&>Oeo%-?A4i`+4BE0eR4@6a&(~;rM zLl3AN&rM&>A2(VabbpIB)v4X@V=DT{e~xt zVOYa^?Iwn?S?6ABTiP2^&JWkDLe?R|!X(Dy*eeSbhoTO{_w|@mzdOaUi3`bD(7 zx7?@}?~(e>^KbBq>3rGH!?#1Cx1&_dm-F+V$FND02z7gaz#2Mc%MMu>9OCG^aLF=Z zZ~E}YK!XZ@FF&m7k5$?HShzU;^|$`U;_XB^d6iYLs5eAh{6@+eCaSe`tGpt|XJ zmmNAchWUwATPanBub&M)ua$CRrVe-Z^?2|*woc=Bioi^G*+XfOC5>ae{t3&03AOBg z>tvW}G#&@NMLVe^@j%sD^W~fg)YzTytwAPM|K#dE^tL~ibwl2?0FHh+kf@zKf?5t! z=Oi7i266Bfd>uxN@NbiAy<;o6bho`uhm^)Hkb&Cul0FBo1%2|efhfgI^2XPL&Og!1 z!`f8aX=JLwtX8y{w~Q9P0C7GH#fuw#BVu`|ZmwUZfY4Iv6$if~R>~oM$9@})466KX`N8a_C^ZiR?_u=wJ@f(HbyoI*N zMJXXZu#Jp<3nt_Wlx#-J@V9&Ee()Ym)bYC^Mx948U^3q{mm?a6YtA=hx)LZANeK^K z`B)&m>z33%ch1Paz@m&}*z*e{lKAAeB3?=+a}7-7zzV8*%xv$}NyJ;pFY9A@?+`52`;2sr}$(FXNgKeU*qe=uz?> zi1%14J`&~2i3<;k&kGcg`O#TO`Sa7IfvLed$NS9rzl@c~_~RF77+N0J-;=ATdCaKf znFUMccNv0`+5{At3)#u}^)maahxJ^RYoS$as5LaLWMBSv03OLBhPxQNbWufsZZ{n9 zm;_r}?%Z$_+#`Ea-~jSpQk3utduKW2haI_%rLaGVBuYxR7@O`$LtLHbPXmxUw53?I zDSU)kw^H%8``SCKFO*bx_~Rj;N^|Z@Q|79Kh>RaI?@@~9k3)7Uw?K8!-8){dy}e7* zDGfPed6a8)!y=caLpoAvO02p{YYQuY8c@Jv?@|6VZi05j)$?*&3|V@RmK_t%`hvqMLLkzDyX)^9sKeQs^c1#;{zAt!fNUP>=oA*0HBUq;2 zd&u^N!%nT5EjL;+!PKl;7I_c*OuEY53@M_W3oZO1AD`M?^&+xVPnnlsqAQ0#z_(?fT{tFh z?$%RcVgcbrm~y_;o4zxuVS%;IRB9Z>$C)O+rH%tpT(Pe2@|8v{Y4~f@E-X&QypUQ% zA^-DlVmfPp)mceU_yW5^f=Fs+Rl^-DV_(a5n5cJj zgAz5qX9*%#nhnLbp1b|9wG`en&09WdB9w_)>hCz;qK~*H4!_g#vcAZ#k38f63~Ma} z#XN0)-5QqVD6GgbWfc`w{>F9Ov@a$$T0t)`!7xF{Ow+o@N)v&+YG7Sk*@;FC)Y4cs zj|qBK+(q1UxM#HLZF>6C*rRdFsV&i+-DcDA^05!b0?ngmtb*gNt#KKz#1$M^L}AIr zOx@krD}8nZ(_MDxb=ZrlKj*@foD;?Pbj;8v8B%N;DVZ$MxK7O0utSCM>W4a1<<}iD zzvo86v4PT2jMYJF_4s`8z9KE7NS}R3NTT}a3{~NX`L#OJF|?d!fSFS=JIX1;NKJ4q zI#pq|{(9kn&cL0ybfWetNS#p5<_2$0!5Jh|=9LJ>tv_`&!dWKat4aEms+*>lcI{9J z^QH`oZ;=_3U1-|2X!;}0o#AV?6U~9I-miV&HGn?h0dlS#aaANku|g_?F8=2M>Mw?P zir7&1%8i&?`njh1>x3jb_{$fOd7|)RY9x+|}op;UR3P#yKSpcVy zS@-USly5I)xnD5QeUvmg;Wjj)z|PB;b&)%&Ztd2;>< zX^9~a+lC+HIBE7hr64>)XG@}?Me@BE^AqmYco((Yp}=)(i!2$uPOvSH(fRf>NL%M17;(-!jF>Q5m z13Pt=`|Y!_$?FD`>~im?JN1VWP6WC$yni_P3?V2Iehp=}Qb*cM^KYfvgZ}95yc<&Y zN@Kgp^Qp8b)NPTrn=yTS@I5_P916STXU+al8daf=(Y}>GqR*@yrT2+>tpd|CYe1hU z;mYsp_}Z58ZS1S7=VlA^!^hrXGM~Wl?5~#PA=j{~+RzJP}AAPmh1F1@L$MKUrDHzxMy6rDQMa|9^-7RsW+O z#}ZWOdv+D_94eM=9##i>KuZOwjXUeCV>~tbWQa2T#b4hwfApCReIomV$Wv)W?_-<| zzLk}elam2Gq4SO&SIp&!UPQn+;)ysgKW5~h&@P27IO%c(xi?U3X@-HNlAxK?0sQ9J zamGTDwTV?sbq~km$h$^+)8{?sYCxz8O~}<2F881%l}#XSWfIw8JfG@Z?J#92G3X;! zbe5shrJ4G4^+na{;eN0g&aK#3@JO=lS#`lLvDNqtMdmqg@2?O)^oywsS4RZzMN=5y@u8xtGaPV zL=u~i?cjFvh6a+lMUc|s>d*OEUnTsCIpN1?JR33D?+-taX_fE*dV2b$*ajRG+%-`n z^n2l(+^3PqZ&|qU@kYBn@r;@M%*B-RGoz4v)Gk@nF^VB<0@c=pNMMfvsnK8l>o{Jb rgkS$~g+%Z_`|B=TxNzaZg$oxhT)1%I!i5X}8a)93?0Yc104M+eky~hi diff --git a/packages/19.07/luci-app-internet-detector_0.3.0-2_all.ipk b/packages/19.07/luci-app-internet-detector_0.3.0-2_all.ipk deleted file mode 100644 index 14c0d9bd4edeffd2ab1855d99fba242b0bd814a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5602 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