🚀 Sync 2026-04-23 08:34:28

This commit is contained in:
github-actions[bot] 2026-04-23 08:34:28 +08:00
parent b86d032e91
commit d0ae20b31e
11 changed files with 150 additions and 25 deletions

View File

@ -2,10 +2,8 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-pingcontrol
LUCI_DEPENDS:=+pingcontrol
PKG_VERSION:=1
PKG_RELEASE:=2
PKG_RELEASE:=3
LUCI_TITLE:=LuCI network interface control

View File

@ -43,6 +43,9 @@ return view.extend({
o = s.taboption('general',form.DynamicList, 'testip', _('IP address or hostname of test servers'));
o.datatype = 'or(hostname,ipaddr("nomask"))';
o = s.taboption('general',form.Flag, 'ping_silent', _('Silent mode'), _('Do not log success ping'));
o = s.taboption('general',form.Value, 'check_period', _('Period of check, sec'));
o.rmempty = false;
o.datatype = 'and(uinteger,min(20))';

View File

@ -10,6 +10,12 @@ msgstr "Интерфейс для ping-запросов"
msgid "IP address or hostname of test servers"
msgstr "IP-адрес или имя хоста тестовых серверов"
msgid "Silent mode"
msgstr "Тихий режим"
msgid "Do not log success ping"
msgstr "Не журналировать успешные попытки"
msgid "Failed attempts before iface up/down"
msgstr "Количество неудачных попыток до переподключения интерфейса"

View File

@ -1,7 +1,6 @@
{
"admin/services/pingcontrol": {
"title": "Pingcontrol",
"order": 30,
"action": {
"type": "view",
"path": "pingcontrol/pingcontrol"

View File

@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=Bootstrap Teleofis Theme
LUCI_DEPENDS:=
LUCI_DEPENDS:= +luci-lua-runtime
PKG_LICENSE:=Apache-2.0

View File

@ -14,6 +14,109 @@
* Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
* ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
:root {
--background-color-delta-l-sign: -1;
--background-color-h: 0;
--background-color-s: 0%;
--background-color-l: 100%;
--background-color-high-hsl:
var(--background-color-h),
var(--background-color-s),
var(--background-color-l);
--background-color-high: hsl(var(--background-color-high-hsl));
--background-color-medium-hsl:
var(--background-color-h),
var(--background-color-s),
calc(var(--background-color-l) + var(--background-color-delta-l-sign) * calc(6 / 255 * 100%));
--background-color-medium: hsl(var(--background-color-medium-hsl));
--background-color-low-hsl:
var(--background-color-h),
var(--background-color-s),
calc(var(--background-color-l) + var(--background-color-delta-l-sign) * calc(10 / 255 * 100%));
--background-color-low: hsl(var(--background-color-low-hsl));
--text-color-delta-l-sign: 1;
--text-color-h: 0;
--text-color-s: 0%;
--text-color-l: 0%;
--text-color-highest-hsl:
var(--text-color-h),
var(--text-color-s),
var(--text-color-l);
--text-color-highest: hsl(var(--text-color-highest-hsl));
--text-color-high-hsl:
var(--text-color-h),
var(--text-color-s),
calc(var(--text-color-l) + var(--text-color-delta-l-sign) * calc(64 / 255 * 100%));
--text-color-high: hsl(var(--text-color-high-hsl));
--text-color-medium-hsl:
var(--text-color-h),
var(--text-color-s),
calc(var(--text-color-l) + var(--text-color-delta-l-sign) * calc(128 / 255 * 100%));
--text-color-medium: hsl(var(--text-color-medium-hsl));
--text-color-low-hsl:
var(--text-color-h),
var(--text-color-s),
calc(var(--text-color-l) + var(--text-color-delta-l-sign) * calc(191 / 255 * 100%));
--text-color-low: hsl(var(--text-color-low-hsl));
--border-color-delta-l-sign: -1;
--border-color-h: var(--background-color-h);
--border-color-s: var(--background-color-s);
--border-color-l: var(--background-color-l);
--border-color-high-hsl:
var(--border-color-h),
var(--border-color-s),
calc(var(--border-color-l) + var(--border-color-delta-l-sign) * calc(51 / 255 * 100%));
--border-color-high: hsl(var(--border-color-high-hsl));
--border-color-medium-hsl:
var(--border-color-h),
var(--border-color-s),
calc(var(--border-color-l) + var(--border-color-delta-l-sign) * calc(34 / 255 * 100%));
--border-color-medium: hsl(var(--border-color-medium-hsl));
--border-color-low-hsl:
var(--border-color-h),
var(--border-color-s),
calc(var(--border-color-l) + var(--border-color-delta-l-sign) * calc(17 / 255 * 100%));
--border-color-low: hsl(var(--border-color-low-hsl));
--primary-color-high: #1976d2;
--primary-color-medium: #1564c0;
--primary-color-low: #b00000;
--on-primary-color: var(--background-color-high);
--error-color-high-rgb: 246, 43, 18;
--error-color-high: rgb(var(--error-color-high-rgb));
--error-color-medium: #e8210d;
--error-color-low: #d00000;
--on-error-color: var(--background-color-high);
--success-color-high-rgb: 0, 172, 89;
--success-color-high: rgb(var(--success-color-high-rgb));
--success-color-medium: #009a4c;
--success-color-low: #007936;
--on-success-color: var(--background-color-high);
--warn-color-high: #efbd0b;
--warn-color-medium: #f0c629;
--warn-color-low: #f2d24f;
--on-warn-color: var(--text-color-highest);
--disabled-opacity: .7;
color-scheme: light;
}
* {
margin: 0;
padding: 0;
@ -1657,14 +1760,15 @@ input[type="text"] + .cbi-button-remove {
transition: opacity .25s ease-in;
}
.cbi-progressbar {
border: 1px solid #ccc;
border: 1px solid var(--border-color-high);
border-radius: 3px;
position: relative;
min-width: 170px;
height: 20px;
margin: 4px 0;
background: #f9f9f9;
height: 8px;
margin: 1.4em 0 4px 0;
background: #fcfcfc;
}
.cbi-progressbar > div {
@ -1672,16 +1776,13 @@ input[type="text"] + .cbi-button-remove {
height: 100%;
transition: width .25s ease-in;
width: 0%;
border-radius: 2px;
}
.cbi-progressbar::after {
.cbi-progressbar::before {
position: absolute;
bottom: 0;
top: 0;
right: 0;
top: -1.4em;
left: 0;
text-align: center;
text-shadow: 0 0 2px #fff;
content: attr(title);
white-space: pre;
overflow: hidden;
@ -2316,7 +2417,7 @@ html body.apply-overlay-active {
bottom: 0;
width: 32px;
content: " ";
background: url(../resources/icons/loading.gif) no-repeat center;
background: url(../resources/icons/loading.svg) no-repeat center;
background-size: 16px;
}

View File

@ -8,7 +8,7 @@
<% local ver = require "luci.version" %>
<footer>
<div style="height:40px;font-size:95%;color:#999;font-family: Arial,sans-serif;">&#169;&nbsp;TELEOFIS&nbsp;2004-2025&nbsp;</div>
<div style="height:40px;font-size:95%;color:#999;font-family: Arial,sans-serif;">&#169;&nbsp;TELEOFIS&nbsp;2004-2022&nbsp;</div>
<ul class="breadcrumb pull-right" id="modemenu" style="display:none"></ul>
</footer>
</div>

View File

@ -1,9 +1,9 @@
:
include $(TOPDIR)/rules.mk
PKG_NAME:=pingcontrol
PKG_VERSION:=1
PKG_RELEASE:=2
PKG_RELEASE:=3
PKG_BUILD_DIR:=$(BUILD_DIR)/pingcontrol
include $(INCLUDE_DIR)/package.mk

View File

@ -10,6 +10,7 @@ SW_BEFORE_MODRES=$(uci -q get pingcontrol.$1.sw_before_modres)
SW_BEFORE_SYSRES=$(uci -q get pingcontrol.$1.sw_before_sysres)
PING_OK=$(uci -q get pingcontrol.$1.ping_ok)
SILENT=$(uci -q get pingcontrol.$1.ping_silent)
PING_LOST=$(uci -q get pingcontrol.$1.ping_lost)
PING_RESTORED=$(uci -q get pingcontrol.$1.ping_restored)
BEFORE_IFACE_DOWN=$(uci -q get pingcontrol.$1.before_iface_down)
@ -34,8 +35,15 @@ done
while true; do
for IP in $TESTIP
do
/bin/ping -w5 -c1 -s8 -I $IFNAME $IP &> /dev/null
if [[ "$?" -eq "0" ]]; then
[ -n $IFNAME ] && {
/bin/ping -w5 -c1 -s8 -I $IFNAME $IP &> /dev/null
STATUS=$?
} || {
/bin/ping -w5 -c1 -s8 $IP &> /dev/null
STATUS=$?
}
if [[ "${STATUS}" -eq "0" ]]; then
let host_up_count++
else
logger -t pingcontrol "$INSTANCE: Ping to host $IP lost"
@ -50,7 +58,9 @@ while true; do
done
if [[ "$host_up_count" -gt "0" ]]; then
logger -t pingcontrol "$INSTANCE: Ping OK, reset counters"
[ "${SILENT}" != "1" ] && {
logger -t pingcontrol "$INSTANCE: Ping OK, reset counters"
}
if [[ "$lost_flag" -eq "1" ]]; then
if [[ -n "$PING_RESTORED" ]]; then
logger -t pingcontrol "$INSTANCE: Execute $PING_RESTORED"
@ -58,8 +68,10 @@ while true; do
fi
else
if [[ -n "$PING_OK" ]]; then
logger -t pingcontrol "$INSTANCE: Execute $PING_OK"
eval $PING_OK
[ "${SILENT}" != "1" ] && {
logger -t pingcontrol "$INSTANCE: Execute $PING_OK"
}
eval $PING_OK
fi
fi
host_up_count=0
@ -99,4 +111,4 @@ while true; do
fi
sleep $CHECK_PERIOD
done
done

View File

@ -3,5 +3,6 @@ config pingcontrol 'pingcontrol'
option check_period '30'
option iface 'internet'
option testip '8.8.8.8'
option ping_silent '1'
option sw_before_modres '3'
option sw_before_sysres '0'

View File

@ -42,3 +42,8 @@ service_triggers() {
procd_add_reload_trigger 'pingcontrol'
procd_add_validation validate_pingcontrol_section
}
reload_service() {
stop
start
}