From cd1e95514e90f4f291cac2ed0d6fc61c9a88efb1 Mon Sep 17 00:00:00 2001 From: Tianling Shen Date: Sat, 19 Mar 2022 12:59:51 +0800 Subject: [PATCH] eeautocore: ethinfo: rewritten in lua Signed-off-by: Tianling Shen --- package/emortal/autocore/Makefile | 5 +- .../emortal/autocore/files/generic/ethinfo | 52 ++++++++++++------- .../emortal/autocore/files/generic/index.htm | 2 +- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/package/emortal/autocore/Makefile b/package/emortal/autocore/Makefile index de35530e81..552b50196e 100644 --- a/package/emortal/autocore/Makefile +++ b/package/emortal/autocore/Makefile @@ -20,15 +20,14 @@ define Package/autocore-arm MAINTAINER:=CN_SZTL DEPENDS:=@(arm||aarch64) \ +TARGET_bcm27xx:bcm27xx-userland \ - +TARGET_bcm53xx:nvram \ - +ethtool + +TARGET_bcm53xx:nvram VARIANT:=arm endef define Package/autocore-x86 TITLE:=x86/x64 auto core loadbalance script MAINTAINER:=Lean - DEPENDS:=@TARGET_x86 +lm-sensors +ethtool + DEPENDS:=@TARGET_x86 +lm-sensors VARIANT:=x86 endef diff --git a/package/emortal/autocore/files/generic/ethinfo b/package/emortal/autocore/files/generic/ethinfo index c43ff800de..db457e80bf 100755 --- a/package/emortal/autocore/files/generic/ethinfo +++ b/package/emortal/autocore/files/generic/ethinfo @@ -1,25 +1,39 @@ -#!/bin/sh +#!/usr/bin/lua +-- Copyright (C) 2022 Tianling Shen -for i in $(ip address | grep -E 'eth[0-9]+' | awk -F ': ' '{print $2}' | xargs) -do - device_info="$(ethtool "$i" 2>"/dev/null")" || continue +local util = require "luci.util" +local jsonc = require "luci.jsonc" - 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=" - " +local eth_info = {} +local ifname, stat +for ifname, stat in pairs(util.ubus("network.device", "status")) do + if ifname:match("^(eth[0-9]+)$") == ifname then + local status, speed, duplex - if echo -e "$device_info" | grep -Eq 'Duplex.*Full'; then - link_mode=1 - else - link_mode=0 - fi + status = stat.carrier and 1 or 0 - json_body="${json_body:+$json_body,}{\"name\": \"$i\", \"status\": $link_stat, \"speed\": \"$link_speed\", \"duplex\": $link_mode}" -done + if stat.speed:sub(1, 1) == "-" then + speed = " - " + else + speed = stat.speed:sub(1, -2) .. "Mb/s" + end -echo "[$json_body]" + if stat.carrier and stat.speed:sub(-1) == "F" then + duplex = 1 + else + duplex = 0 + end + + eth_info[#eth_info+1] = { name = ifname, status = status, + speed = speed, duplex = duplex } + end +end + +table.sort(eth_info, + function(a, b) + return tonumber(a.name:match("eth([0-9]+)$")) < + tonumber(b.name:match("eth([0-9]+)$")) + end) + +print(jsonc.stringify(eth_info)) diff --git a/package/emortal/autocore/files/generic/index.htm b/package/emortal/autocore/files/generic/index.htm index 800eea1d97..cc155ce920 100644 --- a/package/emortal/autocore/files/generic/index.htm +++ b/package/emortal/autocore/files/generic/index.htm @@ -62,7 +62,7 @@ local eth_info = "" if not has_switch then - eth_info = luci.sys.exec("ethinfo") + eth_info = luci.sys.exec("/sbin/ethinfo") end local rv = {