diff --git a/package/emortal/autocore/Makefile b/package/emortal/autocore/Makefile index 75f126a6e0..ad8f8e1c9d 100644 --- a/package/emortal/autocore/Makefile +++ b/package/emortal/autocore/Makefile @@ -1,12 +1,7 @@ +# SPDX-License-Identifier: GPL-3.0-only # # Copyright (C) 2020 Lean -# -# Copyright (C) 2021 ImmortalWrt -# -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# +# Copyright (C) 2021 ImmortalWrt.org include $(TOPDIR)/rules.mk @@ -17,56 +12,50 @@ PKG_RELEASE:=$(COMMITCOUNT) include $(INCLUDE_DIR)/package.mk define Package/autocore-arm - TITLE:=Arm auto core loadbalance script. + TITLE:=Arm auto core loadbalance script MAINTAINER:=CN_SZTL DEPENDS:=@(arm||aarch64) \ +TARGET_bcm27xx:bcm27xx-userland \ +TARGET_bcm53xx:nvram + +ethtool VARIANT:=arm endef define Package/autocore-x86 - TITLE:=x86/x64 auto core loadbalance script. + TITLE:=x86/x64 auto core loadbalance script MAINTAINER:=Lean DEPENDS:=@TARGET_x86 +bc +lm-sensors +ethtool VARIANT:=x86 endef -define Package/autocore-arm/description - A luci autoconfig hotplug script. -endef - -define Package/autocore-x86/description - A usb autoconfig hotplug script. -endef - define Build/Compile - true +endef + +define Package/autocore/install/Default + $(INSTALL_DIR) $(1)/etc + $(CP) ./files/generic/index.htm $(1)/etc/ + + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files/generic/090-cover-index_htm $(1)/etc/uci-defaults/ + + $(INSTALL_DIR) $(1)/sbin + $(INSTALL_BIN) ./files/generic/cpuinfo $(1)/sbin/ + $(INSTALL_BIN) ./files/generic/ethinfo $(1)/sbin/ endef define Package/autocore-arm/install - $(INSTALL_DIR) $(1)/etc - $(INSTALL_DATA) ./files/arm/index.htm $(1)/etc/index.htm + $(call Package/autocore/install/Default) - $(INSTALL_DIR) $(1)/etc/uci-defaults - $(INSTALL_BIN) ./files/arm/090-cover-index_htm $(1)/etc/uci-defaults/090-cover-index_htm - - $(INSTALL_DIR) $(1)/sbin - $(INSTALL_BIN) ./files/arm/sbin/cpuinfo $(1)/sbin/cpuinfo ifneq (, $(findstring $(BOARD), ipq40xx ipq806x)) - $(INSTALL_BIN) ./files/arm/sbin/tempinfo $(1)/sbin/tempinfo + $(INSTALL_BIN) ./files/arm/tempinfo $(1)/sbin/ endif endef define Package/autocore-x86/install + $(call Package/autocore/install/Default) + $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/x86/autocore $(1)/etc/init.d/autocore - - $(INSTALL_DIR) $(1)/etc - $(INSTALL_DATA) ./files/x86/index.htm $(1)/etc/index.htm - - $(INSTALL_DIR) $(1)/sbin - $(CP) ./files/x86/sbin/* $(1)/sbin + $(INSTALL_BIN) ./files/x86/autocore $(1)/etc/init.d/ endef $(eval $(call BuildPackage,autocore-arm)) diff --git a/package/emortal/autocore/files/arm/index.htm b/package/emortal/autocore/files/arm/index.htm deleted file mode 100644 index 755793ac61..0000000000 --- a/package/emortal/autocore/files/arm/index.htm +++ /dev/null @@ -1,819 +0,0 @@ -<%# - Copyright 2008 Steven Barth - Copyright 2008-2011 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<% - local fs = require "nixio.fs" - local util = require "luci.util" - local stat = require "luci.tools.status" - local ver = require "luci.version" - - local has_ipv6 = fs.access("/usr/sbin/ip6tables") - local has_dhcp = fs.access("/etc/config/dhcp") - local has_wifi = ((fs.stat("/etc/config/wireless", "size") or 0) > 0) - local has_temp = fs.access("/sbin/tempinfo") - - local sysinfo = luci.util.ubus("system", "info") or { } - local boardinfo = luci.util.ubus("system", "board") or { } - local unameinfo = nixio.uname() or { } - - local meminfo = sysinfo.memory or { - total = 0, - free = 0, - buffered = 0, - shared = 0 - } - - local mem_cached = luci.sys.exec("sed -e '/^Cached: /!d; s#Cached: *##; s# kB##g' /proc/meminfo") - - local swapinfo = sysinfo.swap or { - total = 0, - free = 0 - } - - local has_dsl = fs.access("/etc/init.d/dsl_control") - - if luci.http.formvalue("status") == "1" then - local ntm = require "luci.model.network".init() - local wan = ntm:get_wannet() - local wan6 = ntm:get_wan6net() - - local conn_count = tonumber( - fs.readfile("/proc/sys/net/netfilter/nf_conntrack_count") or "") or 0 - - local conn_max = tonumber(luci.sys.exec( - "sysctl -n -e net.nf_conntrack_max net.ipv4.netfilter.ip_conntrack_max" - ):match("%d+")) or 4096 - - local user_info = luci.sys.exec("cat /proc/net/arp | grep 'br-lan' | grep '0x2' | wc -l") - - local cpu_usage = luci.sys.exec("top -n1 | awk '/^CPU/ {printf(\"%d%\", 100 - $8)}'") or "6%" - local cpu_info = luci.sys.exec("/sbin/cpuinfo") or "ARM Processor" - - local rv = { - cpuinfo = cpu_info, - cpuusage = cpu_usage, - userinfo = user_info, - uptime = sysinfo.uptime or 0, - localtime = os.date(), - loadavg = sysinfo.load or { 0, 0, 0 }, - memory = meminfo, - memcached = mem_cached, - swap = swapinfo, - connmax = conn_max, - conncount = conn_count, - leases = stat.dhcp_leases(), - leases6 = stat.dhcp6_leases(), - wifinets = stat.wifi_networks() - } - - if wan then - rv.wan = { - ipaddr = wan:ipaddr(), - gwaddr = wan:gwaddr(), - netmask = wan:netmask(), - dns = wan:dnsaddrs(), - expires = wan:expires(), - uptime = wan:uptime(), - proto = wan:proto(), - ifname = wan:ifname(), - link = wan:adminlink() - } - end - - if wan6 then - rv.wan6 = { - ip6addr = wan6:ip6addr(), - gw6addr = wan6:gw6addr(), - dns = wan6:dns6addrs(), - ip6prefix = wan6:ip6prefix(), - uptime = wan6:uptime(), - proto = wan6:proto(), - ifname = wan6:ifname(), - link = wan6:adminlink() - } - end - - if has_dsl then - local dsl_stat = luci.sys.exec("/etc/init.d/dsl_control lucistat") - local dsl_func = loadstring(dsl_stat) - if dsl_func then - rv.dsl = dsl_func() - end - end - - luci.http.prepare_content("application/json") - luci.http.write_json(rv) - - return - elseif luci.http.formvalue("hosts") == "1" then - luci.http.prepare_content("application/json") - luci.http.write_json(luci.sys.net.host_hints()) - - return - end --%> - -<%+header%> - - - - -

<%:Status%>

- -
- <%:System%> - - - - - - <% if has_temp then %> - - <% end %> - - - - - - -
<%:Hostname%><%=luci.sys.hostname() or "?"%>
<%:Model%><%=pcdata(boardinfo.model or "?")%> <%=luci.sys.exec("cat /etc/bench.log") or ""%>
<%:Architecture%>-
<%:Temperature%><%=luci.sys.exec("/sbin/tempinfo") or "?"%>
<%:Firmware Version%> - <%=pcdata(ver.distname)%> <%=pcdata(ver.distversion)%> / - <%=pcdata(ver.luciname)%> (<%=pcdata(ver.luciversion)%>) -
<%:Kernel Version%><%=unameinfo.release or "?"%>
<%:Local Time%>-
<%:Uptime%>-
<%:Load Average%>-
<%:CPU usage (%)%>-
-
- -
- <%:Memory%> - - - - -
<%:Total Available%>-
<%:Buffered%>-
-
- -<% if swapinfo.total > 0 then %> -
- <%:Swap%> - - - - -
<%:Total Available%>-
<%:Free%>-
-
-<% end %> - -
- <%:Network%> - - - - <% if has_ipv6 then %> - - <% end %> - - -
<%:IPv4 WAN Status%> - - - -

?
<%:Collecting data...%>
-
<%:IPv6 WAN Status%> - - - -

?
<%:Collecting data...%>
-
<%:Online Users%>0
<%:Active Connections%>-
-
- -<% if has_dhcp then %> -
- <%:DHCP Leases%> - - - - - - - - - - - -
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Leasetime remaining%>

<%:Collecting data...%>
-
- -<% if has_ipv6 then %> - -<% end %> -<% end %> - -<% if has_dsl then %> -
- <%:DSL%> - - -
<%:DSL Status%> - - - -

?
<%:Collecting data...%>
-
-
-<% end %> - -<% if has_wifi then %> -
- <%:Wireless%> - - - -
<%:Collecting data...%>
-
-<% end %> - -<%+footer%> diff --git a/package/emortal/autocore/files/arm/sbin/tempinfo b/package/emortal/autocore/files/arm/tempinfo similarity index 87% rename from package/emortal/autocore/files/arm/sbin/tempinfo rename to package/emortal/autocore/files/arm/tempinfo index 29e6e62944..42825dfbaf 100755 --- a/package/emortal/autocore/files/arm/sbin/tempinfo +++ b/package/emortal/autocore/files/arm/tempinfo @@ -2,7 +2,7 @@ mt76_path="/sys/kernel/debug/ieee80211/phy0/mt76/temperature" if [ -e "${mt76_path}" ]; then - mt76_temp=" $(cat "${mt76_path}" | awk -F ': ' '{print $2}')°C" + mt76_temp=" $(awk -F ': ' '{print $2}' "${mt76_path}")°C" fi wifi_temp="$(awk '{printf("%.1f°C ", $0 / 1000)}' /sys/class/ieee80211/phy*/device/hwmon/hwmon*/temp1_input | awk '$1=$1')" diff --git a/package/emortal/autocore/files/arm/090-cover-index_htm b/package/emortal/autocore/files/generic/090-cover-index_htm similarity index 100% rename from package/emortal/autocore/files/arm/090-cover-index_htm rename to package/emortal/autocore/files/generic/090-cover-index_htm diff --git a/package/emortal/autocore/files/arm/sbin/cpuinfo b/package/emortal/autocore/files/generic/cpuinfo similarity index 71% rename from package/emortal/autocore/files/arm/sbin/cpuinfo rename to package/emortal/autocore/files/generic/cpuinfo index 630e92de53..86dd351708 100755 --- a/package/emortal/autocore/files/arm/sbin/cpuinfo +++ b/package/emortal/autocore/files/generic/cpuinfo @@ -1,21 +1,25 @@ #!/bin/sh -cpu_arch="$(cat "/proc/cpuinfo" | grep "model name" | sed -n "1p" | awk -F ': ' '{print $2}')" +cpu_arch="$(grep "model name" "/proc/cpuinfo" | head -n1 | awk -F ': ' '{print $2}')" [ -z "${cpu_arch}" ] && cpu_arch="?" -cpu_cores="$(cat "/proc/cpuinfo" | grep "processor" | wc -l)" +cpu_cores="$(grep "processor" "/proc/cpuinfo" | wc -l)" if grep -q "bcm27xx" "/etc/openwrt_release"; then cpu_freq="$(expr $(vcgencmd measure_clock arm | awk -F '=' '{print $2}') / 1000000)Mhz" elif grep -q "bcm53xx" "/etc/openwrt_release"; then cpu_freq="$(nvram get clkfreq | awk -F ',' '{print $1}')MHz" elif grep -q "mvebu" "/etc/openwrt_release"; then - cpu_freq="$(cat "/proc/cpuinfo" | grep "BogoMIPS" | sed -n "1p" | awk -F ': ' '{print $2}')MHz" + cpu_freq="$(grep "BogoMIPS" "/proc/cpuinfo" | sed -n "1p" | awk -F ': ' '{print $2}')MHz" +elif grep -q "x86" "/etc/openwrt_release"; then + cpu_freq="$(grep "MHz" "/proc/cpuinfo" | head -n1 | awk -F ': ' '{print $2}')MHz" elif [ -e "/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq" ]; then cpu_freq="$(expr $(cat "/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq") / 1000)MHz" fi if grep -q "bcm27xx" "/etc/openwrt_release"; then cpu_temp="$(vcgencmd measure_temp | awk -F '=' '{print $2}' | awk -F "'" '{print $1}')°C" +elif grep -q "x86" "/etc/openwrt_release"; then + cpu_temp="$(sensors 2>"/dev/null" | grep "Core 0" | cut -c12-)" else [ -e "/sys/class/thermal/thermal_zone0/temp" ] && \ cpu_temp="$(awk '{printf("%.1f°C", $0 / 1000)}' /sys/class/thermal/thermal_zone0/temp)" diff --git a/package/emortal/autocore/files/generic/ethinfo b/package/emortal/autocore/files/generic/ethinfo new file mode 100755 index 0000000000..69d01bb344 --- /dev/null +++ b/package/emortal/autocore/files/generic/ethinfo @@ -0,0 +1,25 @@ +#!/bin/sh + +for i in $(ip address | grep -E 'eth[0-9]+' | awk -F ': ' '{print $2}' | xargs) +do + device_info="$(ethtool "$i")" || continue + + if echo -e "$device_info" | grep -Eq 'Link detected.*yes'; then + link_stat=1 + else + link_stat=0 + fi + + link_speed="$(echo -e "$device_info" | grep 'Speed' | awk -F ': ' '{print $2}' | tr -d 'Unknown!')" + [ -n "$link_speed" ] || link_speed=" - " + + if echo -e "$device_info" | grep -Eq 'Duplex.*Full'; then + link_mode=1 + else + link_mode=0 + fi + + json_body="${json_body:+$json_body,}{\"name\": \"$i\", \"status\": $link_stat, \"speed\": \"$link_speed\", \"duplex\": $link_mode}" +done + +echo "[$json_body]" diff --git a/package/emortal/autocore/files/x86/index.htm b/package/emortal/autocore/files/generic/index.htm similarity index 96% rename from package/emortal/autocore/files/x86/index.htm rename to package/emortal/autocore/files/generic/index.htm index 7e0edfb27a..4ae15039e6 100644 --- a/package/emortal/autocore/files/x86/index.htm +++ b/package/emortal/autocore/files/generic/index.htm @@ -9,10 +9,19 @@ local util = require "luci.util" local stat = require "luci.tools.status" local ver = require "luci.version" + local uci = require("luci.model.uci").cursor() local has_ipv6 = fs.access("/usr/sbin/ip6tables") local has_dhcp = fs.access("/etc/config/dhcp") local has_wifi = ((fs.stat("/etc/config/wireless", "size") or 0) > 0) + local has_temp = fs.access("/sbin/tempinfo") + local has_switch = false + + uci:foreach("network", "switch", + function(s) + has_switch = true + return false + end) local sysinfo = luci.util.ubus("system", "info") or { } local boardinfo = luci.util.ubus("system", "board") or { } @@ -24,7 +33,7 @@ buffered = 0, shared = 0 } - + local mem_cached = luci.sys.exec("sed -e '/^Cached: /!d; s#Cached: *##; s# kB##g' /proc/meminfo") local swapinfo = sysinfo.swap or { @@ -46,19 +55,21 @@ "sysctl -n -e net.nf_conntrack_max net.ipv4.netfilter.ip_conntrack_max" ):match("%d+")) or 4096 - local cpu_info = luci.sys.exec("cpuinfo") + local user_info = luci.sys.exec("cat /proc/net/arp | grep 'br-lan' | grep '0x2' | wc -l") or "0" - local eth_info = luci.sys.exec("ethinfo") - - local user_info = luci.sys.exec("cat /proc/net/arp | grep '0x2' | wc -l") or 0 - local cpu_usage = luci.sys.exec("top -n1 | awk '/^CPU/ {printf(\"%d%\", 100 - $8)}'") or "6%" + local cpu_info = luci.sys.exec("/sbin/cpuinfo") or "?" + if not has_switch then + local eth_info = luci.sys.exec("ethinfo") + else + local eth_info = "" + end local rv = { - cpuusage = cpu_usage, cpuinfo = cpu_info, + cpuusage = cpu_usage, ethinfo = eth_info, - userinfo = user_info, + userinfo = user_info, uptime = sysinfo.uptime or 0, localtime = os.date(), loadavg = sysinfo.load or { 0, 0, 0 }, @@ -121,7 +132,7 @@ <%+header%> - +