From 928f38f5f70b45cd954b2d1f015a6a3bc20aa5d6 Mon Sep 17 00:00:00 2001 From: lmq8267 <119713693+lmq8267@users.noreply.github.com> Date: Thu, 18 Jan 2024 14:54:05 +0800 Subject: [PATCH] Create caddy.lua --- luci-app-caddy/luasrc/controller/caddy.lua | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 luci-app-caddy/luasrc/controller/caddy.lua diff --git a/luci-app-caddy/luasrc/controller/caddy.lua b/luci-app-caddy/luasrc/controller/caddy.lua new file mode 100644 index 0000000..1f85eb6 --- /dev/null +++ b/luci-app-caddy/luasrc/controller/caddy.lua @@ -0,0 +1,74 @@ +module("luci.controller.caddy", package.seeall) + +function index() + entry({"admin", "nas"}, firstchild(), _("NAS") , 45).dependent = false + if not nixio.fs.access("/etc/config/caddy") then + return + end + + local page = entry({"admin", "nas", "caddy"}, alias("admin", "nas", "caddy", "basic"), _("Caddy"), 20) + page.dependent = true + page.acl_depends = { "luci-app-caddy" } + + entry({"admin", "nas"}, firstchild(), "NAS", 44).dependent = false + entry({"admin", "nas", "caddy", "basic"}, cbi("caddy/caddy"), _("基本设置"), 1).leaf = true + entry({"admin", "nas", "caddy", "log"}, cbi("caddy/caddy_log"), _("日志"), 2).leaf = true + entry({"admin", "nas", "caddy", "caddy_status"}, call("caddy_status")).leaf = true + entry({"admin", "nas", "caddy", "get_log"}, call("get_log")).leaf = true + entry({"admin", "nas", "caddy", "clear_log"}, call("clear_log")).leaf = true +end + +function caddy_status() + local e={} + local sys = require "luci.sys" + local uci = require "luci.model.uci".cursor() + local port = tonumber(uci:get_first("caddy", "caddy", "port")) + e.port = (port or 12311) + e.running=luci.sys.call("pidof caddy >/dev/null")==0 + + local command1 = io.popen("[ -f /tmp/caddy_time ] && start_time=$(cat /tmp/caddy_time) && time=$(($(date +%s)-start_time)) && day=$((time/86400)) && [ $day -eq 0 ] && day='' || day=${day}天 && time=$(date -u -d @${time} +'%H小时%M分%S秒') && echo $day $time") + e.caddysta = command1:read("*all") + command1:close() + if e.caddysta == "" then + e.caddysta = "unknown" + end + + local command2 = io.popen('test ! -z "`pidof caddy`" && (top -b -n1 | grep -E "$(pidof caddy)" 2>/dev/null | grep -v grep | awk \'{for (i=1;i<=NF;i++) {if ($i ~ /caddy/) break; else cpu=i}} END {print $cpu}\')') + e.caddycpu = command2:read("*all") + command2:close() + if e.caddycpu == "" then + e.caddycpu = "unknown" + end + + local command3 = io.popen("test ! -z `pidof caddy` && (cat /proc/$(pidof caddy | awk '{print $NF}')/status | grep -w VmRSS | awk '{printf \"%.2f MB\", $2/1024}')") + e.caddyram = command3:read("*all") + command3:close() + if e.caddyram == "" then + e.caddyram = "unknown" + end + + local command4 = io.popen("([ -s /tmp/caddy.tag ] && cat /tmp/caddy.tag ) || (echo `$(uci -q get caddy.@caddy[0].bin_dir) -v |awk '{print $1}' | sed 's/[^0-9.]*//g'` > /tmp/caddy.tag && cat /tmp/caddy.tag)") + e.caddytag = command4:read("*all") + command4:close() + if e.caddytag == "" then + e.caddytag = "unknown" + end + + local command5 = io.popen("([ -s /tmp/caddynew.tag ] && cat /tmp/caddynew.tag ) || ( curl -L -k -s --connect-timeout 3 --user-agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' https://api.github.com/repos/caddyserver/caddy/releases/latest | grep tag_name | sed 's/[^0-9.]*//g' >/tmp/caddynew.tag && cat /tmp/caddynew.tag )") + e.caddynewtag = command5:read("*all") + command5:close() + if e.caddynewtag == "" then + e.caddynewtag = "unknown" + end + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end + +function get_log() + luci.http.write(luci.sys.exec("test ! -z `pidof caddy` && cat $(uci -q get caddy.@caddy[0].log_dir)")) +end + +function clear_log() + luci.sys.call("cat /dev/null > $(uci -q get caddy.@caddy[0].log_dir)") +end +