From 4a1ac7bbbb4bdf05912dbe0f241271e172a4e85f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 1 Sep 2023 09:23:28 +0200 Subject: [PATCH] Add multiple backup on server support --- .../luasrc/controller/openmptcprouter.lua | 13 +++++++- .../luasrc/view/openmptcprouter/backup.htm | 31 +++++++++++++++++-- .../files/etc/init.d/openmptcprouter-vps | 30 ++++++++++++++---- 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 0800e1c08..1266800d8 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -1321,7 +1321,18 @@ end function backupgr() local get_backup = luci.http.formvalue("restore") or "" if get_backup ~= "" then - luci.sys.call("/etc/init.d/openmptcprouter-vps backup_get >/dev/null 2>/dev/null") + local dobackup = 0 + ucic:foreach("openmptcprouter","server", function(s) + servername = s[".name"] + local get_selected_backup = luci.http.formvalue(servername .. "") or "" + if get_selected_backup ~= "" then + dobackup = 1 + luci.sys.call("/etc/init.d/openmptcprouter-vps backup_get " .. servername .. " " .. get_selected_backup .. ">/dev/null 2>/dev/null") + end + end) + if dobackup == 0 then + luci.sys.call("/etc/init.d/openmptcprouter-vps backup_get >/dev/null 2>/dev/null") + end end local send_backup = luci.http.formvalue("save") or "" if send_backup ~= "" then diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm index f7ebf5bb0..83016ce63 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm @@ -16,10 +16,36 @@ menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" %>

<%=servername%>

<% - if luci.model.uci.cursor():get("openmptcprouter",servername,"lastbackup") ~= nil then + if luci.model.uci.cursor():get("openmptcprouter",servername,"allbackup") ~= nil then %>
- <%:Last available backup on server:%> <%=os.date('%d-%b-%Y', luci.model.uci.cursor():get("openmptcprouter",servername,"lastbackup"))%> +
+ +
+ +
+
+
+ <% + elseif luci.model.uci.cursor():get("openmptcprouter",servername,"lastbackup") ~= nil then + %> +
+ <%:Last available backup on server:%> <%=os.date('%c', luci.model.uci.cursor():get("openmptcprouter",servername,"lastbackup"))%>
<% else %>
@@ -29,6 +55,7 @@ menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" <% end) %> +
diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 6f40c124b..e14113ce6 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1770,6 +1770,7 @@ _backup_get() { _backup_get_and_apply() { servername=$1 + backupfile=$2 token="" vps_config="" _login @@ -1780,7 +1781,12 @@ _backup_get_and_apply() { EOF return } - vps_backup=$(_get_json "backupget") + if [ -n "$backupfile" ]; then + echo "get $backupfile" + vps_backup=$(_get_json "backupget?filename=${backupfile}") + else + vps_backup=$(_get_json "backupget") + fi [ -z "$vps_backup" ] && return backup_data="$(echo "$vps_backup" | jsonfilter -q -e '@.data')" backup_sha256sum="$(echo "$vps_backup" | jsonfilter -q -e '@.sha256sum')" @@ -1791,11 +1797,16 @@ _backup_get_and_apply() { } backup_get() { - lastbackup="" - serverbackup="" - config_load openmptcprouter - config_foreach _backup_get server - [ -n "$serverbackup" ] && _backup_get_and_apply $serverbackup + backuptoapply=$2 + if [ -n "$backuptoapply" ]; then + _backup_get_and_apply $1 $2 + else + lastbackup="" + serverbackup="" + config_load openmptcprouter + config_foreach _backup_get server + [ -n "$serverbackup" ] && _backup_get_and_apply $serverbackup + fi } _backup_list() { @@ -1819,6 +1830,13 @@ _backup_list() { backup_lastmodif="$(echo "$vps_backup" | jsonfilter -q -e '@.modif')" [ -n "$backup_lastmodif" ] && { uci -q set openmptcprouter.$servername.lastbackup=$backup_lastmodif + backup_all="$(echo "$vps_backup" | jsonfilter -q -e '@.sorted[*]')" + uci -q del openmptcprouter.$servername.allbackup + echo "$vps_backup" | jsonfilter -q -e '@.sorted[*]' | while read backup; do + name=$(echo "$backup" | jsonfilter -q -e '@[0]' | tr -d '\n') + modiftime=$(echo "$backup" | jsonfilter -q -e '@[1]' | tr -d '\n') + uci -q add_list openmptcprouter.$servername.allbackup="${name}|${modiftime}" + done } }