summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--opennhrp-controller.lua90
-rw-r--r--opennhrp-model.lua92
-rw-r--r--opennhrp-status-html.lsp22
-rw-r--r--opennhrp.menu1
4 files changed, 166 insertions, 39 deletions
diff --git a/opennhrp-controller.lua b/opennhrp-controller.lua
index e592bbc..f59ac0a 100644
--- a/opennhrp-controller.lua
+++ b/opennhrp-controller.lua
@@ -19,19 +19,91 @@ mvc.on_load = function(self, parent)
end
end
-local function getstatus(self)
- local status = self.model.getstatus()
- if (#status.status.value > 0) then
- status.status.value = "Enabled"
- else
- status.status.value = "Disabled"
- end
+local function displaycmdmanagement(disablestart,disablestop,disablerestart)
+ -- Add a management buttons
+ local management = {}
+ management.start = cfe({ name="cmdmanagement",
+ label="Program control-panel",
+ value="Start",
+ type="submit",
+ })
+ management.stop = cfe({ name="cmdmanagement",
+ label="Program control-panel",
+ value="Stop",
+ type="submit",
+ })
+ management.restart = cfe({ name="cmdmanagement",
+ label="Program control-panel",
+ value="Restart",
+ type="submit",
+ })
- return status
+ -- Disable management buttons based on if the process is running or not
+ if (disablestart) then management.start.disabled = "yes" end
+ if (disablestop) then management.stop.disabled = "yes" end
+ if (disablerestart) then management.restart.disabled = "yes" end
+
+ return management
end
+
-- ################################################################################
-- PUBLIC FUNCTIONS
function status(self)
- return { status=getstatus(self) }
+ return { status=self.model.getstatus() }
end
+expert = function (self)
+ local modifications = self.clientdata.filecontent or ""
+ if ( self.clientdata.cmdsave ) then
+ modifications = self.model:update_filecontent(modifications)
+ end
+ local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller
+
+ -- Start/Stop/Restart process
+ local cmdmanagement
+ if ( self.clientdata.cmdmanagement) then
+ cmdmanagement = cfe({
+ name="cmdmanagement",
+ label="Previous action result",
+ action=cfe({
+ name="cmdmanagement",
+ value=string.lower(self.clientdata.cmdmanagement), -- This row contains start/stop/restart (one of these commands)
+ }),
+ })
+ local actionresult, cmdmanagement = self.model:startstop_service( cmdmanagement.action )
+ end
+
+ local status=self.model.getstatus()
+ local file = self.model:get_filedetails()
+
+ -- Add buttons
+ file.cmdsave = cfe ({
+ name="cmdsave",
+ label="Apply settings",
+ value="Apply",
+ type="submit",
+ })
+ if (self.clientdata.cmdsave) then
+ file.cmdsave.descr="* Changes has been saved!"
+ end
+
+
+ -- Management buttons
+ local disablestart,disablestop,disablerestart
+ -- Disable management buttons based on if the process is running or not
+ if (string.lower(status.status.value) == "enabled" ) then
+ disablestart = "yes"
+ else
+ disablestop = "yes"
+ end
+ -- Display management buttons
+ management = displaycmdmanagement(disablestart,disablestop,disablerestart)
+
+ return ( {
+ status = status,
+ file = file,
+ modifications = modifications,
+ management = management,
+ cmdmanagement = cmdmanagement,
+ url = url, } )
+end
diff --git a/opennhrp-model.lua b/opennhrp-model.lua
index f809283..ae5531e 100644
--- a/opennhrp-model.lua
+++ b/opennhrp-model.lua
@@ -11,7 +11,8 @@ local configfile = "/etc/opennhrp/opennhrp.conf"
local processname = "opennhrp"
local baseurl = "/etc/opennhrp/"
-local type_status = {
+local descr = {
+ Type = {
['incomplete']="The protocol address is being resolved",
['negative']="This protocol address is not available",
['cached']="Protocol address was resolved successfully",
@@ -19,7 +20,12 @@ local type_status = {
['dynamic']="This entry is from a node that connected to us",
['local']="Local interface address",
['static']="Static mapping from configuration file (e.g. address of core)",
- }
+ },
+ Flags= {
+-- ['up']="Connection is fully usable",
+ ['lower-up']="ipsec connections is up, but registration is not yet done",
+ },
+}
local function get_version()
local cmd_output_result, cmd_output_error
@@ -71,27 +77,46 @@ local function opennhrpctl_show()
end
if ( cnt > 0 ) and (v ~= "") then
local k = string.match(v,"^(.-):%s?.*")
- cmd_output_result_table[cnt][k]=string.match(v,"^.-:%s?(.*)")
- if (string.lower(k) == "type") then
- local tooltip = string.match(v,"^.-:%s?(.*)")
- cmd_output_result_table[cnt]["Tooltip"] = type_status[tooltip]
- local typestatus = string.lower(string.match(v,"^.-:%s?(.*)"))
- cmd_output_result_table[cnt]['type_descr']=(type_status[typestatus] or "")
+ cmd_output_result_table[cnt][k]=cfe({value=string.match(v,"^.-:%s?(.*)")})
+ local statusdescription = string.lower(string.match(v,"^.-:%s?(.*)"))
+ if (type(descr[k]) == "table") then
+ cmd_output_result_table[cnt][k]['descr']=descr[k][statusdescription]
end
end
end
- return cmd_output_result_table,opennhrpstatus,cmd_output_error
-end
-
+ local peers_list = {}
+ for k,v in pairs(cmd_output_result_table) do
+ if (v.Interface.value) and not (peers_list[v.Interface.value]) then
+ peers_list[v.Interface.value] = {}
+ end
+ table.insert(peers_list[v.Interface.value], v)
+ end
-
+ return peers_list,opennhrpstatus,cmd_output_error
+end
+function process_status_text(procname)
+ local t = procps.pidof(procname)
+ if (t) and (#t > 0) then
+ return "Enabled"
+ else
+ return "Disabled"
+ end
+end
-- ################################################################################
-- PUBLIC FUNCTIONS
+function startstop_service ( self, action )
+ local cmd = action.value
+ local cmdresult,cmdmessage,cmderror,cmdaction = daemoncontrol.daemoncontrol(processname, cmd)
+ action.descr=cmdmessage
+ action.errtxt=cmderror
+ -- Reporting back (true|false, the original acition)
+ return cmdresult,action
+end
function getstatus()
local status = {}
@@ -104,7 +129,7 @@ function getstatus()
status.status = cfe({ name="status",
label="Program status",
- value=procps.pidof(processname),
+ value=process_status_text(processname),
})
local autostart_sequense, autostart_errtxt = autostarts()
status.autostart = cfe({ name="autostart",
@@ -119,19 +144,44 @@ function getstatus()
value=opennhrpctl_status,
})
- local peers_list = {}
- for k,v in pairs(opennhrpctl_show) do
- if (v.Interface) and not (peers_list[v.Interface]) then
- peers_list[v.Interface] = {}
- end
- table.insert(peers_list[v.Interface], v)
- end
status.show = cfe({ name="show",
label="Peers",
- option=peers_list,
+ option=opennhrpctl_show,
})
return status
end
+function get_filedetails()
+ local path = configfile
+ local filedetails = fs.stat(path)
+ local file = {}
+ file["filename"] = cfe({
+ name="filename",
+ label="File name",
+ value=path,
+ })
+ file["filesize"] = cfe({
+ name="filesize",
+ label="File size",
+ value=filedetails.size or 0,
+ })
+ file["mtime"] = cfe({
+ name="mtime",
+ label="File date",
+ value=filedetails.mtime or "---",
+ })
+ file["filecontent"] = cfe({
+ type="longtext",
+ name="filecontent",
+ label="File content",
+ value=fs.read_file(path),
+ })
+ return file
+end
+function update_filecontent (self, modifications)
+ local path = configfile
+ local file_result,err = fs.write_file(path, format.dostounix(modifications))
+ return file_result
+end
diff --git a/opennhrp-status-html.lsp b/opennhrp-status-html.lsp
index 0d84bc1..765de12 100644
--- a/opennhrp-status-html.lsp
+++ b/opennhrp-status-html.lsp
@@ -49,28 +49,32 @@ for k,v in pairs(myform.option or {}) do
for k1,v1 in pairs(v) do
io.write("\n\t\t\t<TR STYLE='padding-bottom:10px;'><TD WIDTH='150px' STYLE='font-weight:bold;padding-left:20px;'><IMG SRC='/static/tango/16x16/status/")
- if (v1) and (string.lower(v1['Type']) == "incomplete") then
+ if (v1) and (string.lower(v1['Type']['value']) == "incomplete") then
io.write("network-error")
- elseif (v1) and (string.lower(v1['Type']) == "negative") then
+ elseif (v1) and (string.lower(v1['Type']['value']) == "negative") then
io.write("network-offline")
- elseif (v1) and (string.lower(v1['Flags']) == "up") then
+ elseif (v1) and (string.lower(v1['Flags']['value']) == "up") then
io.write("network-idle")
- elseif (v1) and (string.lower(v1['Flags']) == "used up") then
+ elseif (v1) and (string.lower(v1['Flags']['value']) == "used up") then
io.write("network-transmit-receive")
+ elseif (v1) and (string.lower(v1['Flags']['value']) == "used up") then
+ io.write("network-offline")
else
io.write("network-error")
end
- io.write(".png' width='16' height='16' title='" .. v1["Tooltip"] .. "'> " .. v1["Protocol-Address"] .. "</TD><TD STYLE='font-weight:bold;'></TD></TR>\n")
+ io.write(".png' width='16' height='16' title='" .. (v1['Type']['descr'] or "") .. "'> " .. v1["Protocol-Address"]['value'] .. "</TD><TD STYLE='font-weight:bold;'></TD></TR>\n")
for k2,v2 in pairs(v1) do
+
+---[[
if (k2) and not ((string.lower(k2) == "protocol-address") or
- (string.lower(k2) == "tooltip") or
(string.lower(k2) == "interface")) then
- io.write("<TR><TD STYLE='font-weight:bold;padding-left:40px;'>"..k2.."</TD><TD>"..v2)
- if (string.lower(k2) == "type") then
- io.write(" <I>(" .. (v1['type_descr'] or "") .. ")</I>")
+ io.write("<TR><TD STYLE='font-weight:bold;padding-left:40px;'>"..k2.."</TD><TD>"..v2['value'])
+ if (v2['descr']) and (#v2['descr'] > 0) then
+ io.write(" <I>(" .. (v2['descr'] or "") .. ")</I>")
end
io.write("</TD></TR>\n")
end
+--]]
end
end
diff --git a/opennhrp.menu b/opennhrp.menu
index cb5d25d..c836a24 100644
--- a/opennhrp.menu
+++ b/opennhrp.menu
@@ -1,3 +1,4 @@
#CAT GROUP/DESC TAB ACTION
Networking 45NHRP Status status
+Networking 45NHRP Expert expert