1
0
mirror of https://github.com/DigitalDevices/octonet.git synced 2023-10-10 13:36:52 +02:00

Webserver javascripts updates

Replaces DOM based dynamic jscript elements with XMLHttpRequests
and JSON replies.
Not yet on all pages.
This commit is contained in:
mvoelkel 2015-09-06 22:06:38 +02:00
parent f73ea934ff
commit 73bf0bd413
8 changed files with 211 additions and 151 deletions

View File

@ -17,7 +17,7 @@ local userver = "download.digital-devices.de/download/linux"
if query == "set=beta" then
local file = io.open("/config/updateserver","w")
if file then
file:write(userver.."/beta/".."\n")
file:write(userver.."/beta".."\n")
file:close()
end
elseif query == "set=std" then

View File

@ -8,12 +8,9 @@
<!-- Add page scripts here -->
<script type="text/javascript">
CheckDone = false;
DownloadDone = false;
VerifyDone = false;
UpdateError = false;
WaitCounter = 30;
UpdateInfo = "";
UpdateError = false;
isReboot = false;
function FWVersion(fwdate)
{
@ -32,56 +29,72 @@ function FWVersion(fwdate)
}
function CheckUpdateStatus()
{
script = document.getElementById("script1");
head = document.getElementsByTagName('head')[0];
head.removeChild(script);
newscript = document.createElement('script');
newscript.id = "script1";
newscript.type = "text/javascript";
newscript.src = "/update.lua?updatestatus";
head.appendChild(newscript);
var xmlhttp = new XMLHttpRequest();
if( UpdateError )
{
document.getElementById("UpdateButton").disabled = false;
document.getElementById("UpdateButton").value = "Continue";
document.getElementById("updatestatus").firstChild.nodeValue = UpdateInfo;
}
else if( VerifyDone )
{
document.getElementById("UpdateButton").disabled = false;
document.getElementById("UpdateButton").value = "Reboot";
document.getElementById("updatestatus").firstChild.nodeValue = "";
}
else if( DownloadDone )
{
document.getElementById("updatestatus").firstChild.nodeValue = "***** Verifying ******";
DownloadDone = false;
window.setTimeout(CheckUpdateStatus,250);
}
else if( CheckDone )
{
document.getElementById("updatestatus").firstChild.nodeValue = "***** Downloading ******";
CheckDone = false;
window.setTimeout(CheckUpdateStatus,250);
}
else
window.setTimeout(CheckUpdateStatus,250);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == 4 )
{
if ( xmlhttp.status == 200)
{
myFunction(xmlhttp.responseText);
}
isChecking = false;
}
}
function Request(url)
{
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function myFunction(response) {
if( isReboot ) return;
var UpdateStatus = JSON.parse(response);
if( UpdateStatus.Error )
{
document.getElementById("UpdateButton").disabled = false;
document.getElementById("UpdateButton").value = "Continue";
document.getElementById("updatestatus").firstChild.nodeValue = UpdateStatus.Status;
UpdateError = true;
}
else if( UpdateStatus.Status == "Started" )
{
window.setTimeout(RequestStatus,250);
}
else if( UpdateStatus.Status == "VerifyDone" )
{
document.getElementById("UpdateButton").disabled = false;
document.getElementById("UpdateButton").value = "Reboot";
document.getElementById("updatestatus").firstChild.nodeValue = "";
}
else if( UpdateStatus.Status == "DownloadDone" )
{
document.getElementById("updatestatus").firstChild.nodeValue = "***** Verifying ******";
window.setTimeout(RequestStatus,250);
}
else if( UpdateStatus.Status == "CheckDone" )
{
document.getElementById("updatestatus").firstChild.nodeValue = "***** Downloading ******";
window.setTimeout(RequestStatus,250);
}
else
window.setTimeout(RequestStatus,250);
}
function RequestStatus()
{
xmlhttp.open("GET", "/update.lua?updatestatus", true);
xmlhttp.send();
}
function DoUpdate()
{
CheckDone = false;
document.getElementById("updatestatus").firstChild.nodeValue = "***** Checking ******";
head = document.getElementsByTagName('head')[0];
newscript = document.createElement('script');
newscript.id = "script1";
newscript.type = "text/javascript";
newscript.src = "/update.lua?update";
head.appendChild(newscript);
window.setTimeout(CheckUpdateStatus,250);
Request("/update.lua?update");
}
function Reboot()
@ -93,12 +106,8 @@ function Reboot()
}
else
{
head = document.getElementsByTagName('head')[0];
newscript = document.createElement('script');
newscript.id = "script2";
newscript.type = "text/javascript";
newscript.src = "/reboot.lua?sjiwjsiowjs";
head.appendChild(newscript);
isReboot = true;
Request("/reboot.lua?sjiwjsiowjs");
WaitCounter = 70;
document.getElementById("updatestatus").firstChild.nodeValue = WaitCounter;
window.setTimeout(Wait,1000);

View File

@ -103,8 +103,7 @@ function OnLoad()
<script type="text/javascript">
if( Octoserve )
document.write(Octoserve.Version);
if( beta )
document.write(" BETA");
document.write(" " + suffix);
</script>
</h1>
</td></tr>

View File

@ -10,6 +10,18 @@
<!-- Add page scripts here -->
<script type="text/javascript">
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
}
function Request(url)
{
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function DisableButtons()
{
document.getElementById("RebootButton").disabled = true;
@ -20,12 +32,7 @@ function DisableButtons()
function Reboot()
{
DisableButtons();
head = document.getElementsByTagName('head')[0];
newscript = document.createElement('script');
newscript.id = "script2";
newscript.type = "text/javascript";
newscript.src = "/reboot.lua?sjiwjsiowjs";
head.appendChild(newscript);
Request("/reboot.lua?sjiwjsiowjs");
WaitCounter = 20;
document.getElementById("updatestatus").firstChild.nodeValue = WaitCounter;
window.setTimeout(Wait,1000);
@ -34,12 +41,7 @@ function Reboot()
function RestartOcto()
{
DisableButtons();
head = document.getElementsByTagName('head')[0];
newscript = document.createElement('script');
newscript.id = "script2";
newscript.type = "text/javascript";
newscript.src = "/reboot.lua?restart_octo";
head.appendChild(newscript);
Request("/reboot.lua?restart_octo");
WaitCounter = 4;
document.getElementById("updatestatus").firstChild.nodeValue = WaitCounter;
window.setTimeout(Wait,1000);
@ -48,12 +50,7 @@ function RestartOcto()
function RestartDMS()
{
DisableButtons();
head = document.getElementsByTagName('head')[0];
newscript = document.createElement('script');
newscript.id = "script2";
newscript.type = "text/javascript";
newscript.src = "/reboot.lua?restart_dms";
head.appendChild(newscript);
Request("/reboot.lua?restart_dms");
WaitCounter = 4;
document.getElementById("updatestatus").firstChild.nodeValue = WaitCounter;
window.setTimeout(Wait,1000);

View File

@ -1,15 +1,36 @@
#!/usr/bin/lua
print("HTTP/1.0 200 ")
print("Pragma: no-cache")
print("Content-Type: application/x-javascript")
print("")
local host = os.getenv("HTTP_HOST")
local proto = os.getenv("SERVER_PROTOCOL")
local query = os.getenv("QUERY_STRING")
local method = os.getenv("REQUEST_METHOD")
local clength = os.getenv("CONTENT_LENGTH")
local ctype = os.getenv("CONTENT_TYPE")
function http_print(s)
if s then
io.stdout:write(tostring(s).."\r\n")
else
io.stdout:write("\r\n")
end
end
function SendError(err,desc)
http_print(proto.." "..err)
http_print()
local file = io.open("e404.html")
if file then
local tmp = file:read("*a")
tmp = string.gsub(tmp,"404 Not Found",err .. " " .. desc)
http_print(tmp)
file:close()
end
end
Rebooting = "false"
if( query == "sjiwjsiowjs" ) then
print("Rebooting = true")
Rebooting = "true";
local uImage = io.open("/boot/uImage")
if( uImage ) then
uImage:close()
@ -24,11 +45,18 @@ if( query == "sjiwjsiowjs" ) then
os.execute("sync")
os.execute("reboot")
elseif( query == "restart_octo" ) then
print("Rebooting = true")
Rebooting = "true";
os.execute("/etc/init.d/S99octo restartoctonet")
elseif( query == "restart_dms" ) then
print("Rebooting = true")
Rebooting = "true";
os.execute("/etc/init.d/S92dms restart")
else
print("Rebooting = false")
end
JSONData = "{\"Rebooting\":"..Rebooting.."}"
http_print(proto.." 200" )
http_print("Pragma: no-cache")
http_print("Content-Type: application/json; charset=UTF-8")
http_print(string.format("Content-Length: %d",#JSONData))
http_print()
http_print(JSONData)

View File

@ -43,11 +43,16 @@ end
local fwdate = "";
if images[1] then fwdate = images[1] end
beta = "false"
suffix = ""
tmp = io.open("/config/updateserver")
if tmp then
beta = "true"
tmp:close()
local updateserver = tmp:read("*l")
if updateserver == "download.digital-devices.de/download/linux/beta" then
suffix = "BETA"
else
suffix = "("..updateserver..")"
end
tmp:close()
end
http_print(string.format("var linuxver = \"%s\";",uname))
@ -57,4 +62,4 @@ http_print(string.format("var fpgatype = \"%0X\";",registers[3] / 65536))
-- http_print(string.format("var fpgatype = \"%0X\";",registers[3] >> 16))
http_print(string.format("var fwdate = \"%s\";",fwdate))
http_print(string.format("var host = \"%s\";",host))
http_print(string.format("var beta = %s;",beta))
http_print(string.format("var suffix = \"%s\";",suffix))

View File

@ -12,8 +12,6 @@
<script type="text/javascript">
isChecking = false;
UpdateInfo = "";
CheckDone = false;
UpdateAvailable = false;
function FWVersion(fwdate)
@ -37,31 +35,37 @@ function FWVersion(fwdate)
return ("?");
}
var xmlhttp = new XMLHttpRequest();
function CheckUpdateDone()
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == 4 )
{
if ( xmlhttp.status == 200)
{
myFunction(xmlhttp.responseText);
}
isChecking = false;
}
}
function Request(url)
{
if( CheckDone )
{
script = document.getElementById("script1");
head = document.getElementsByTagName('head')[0];
head.removeChild(script);
if( UpdateInfo != "" )
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function myFunction(response) {
var UpdateStatus = JSON.parse(response);
if( UpdateStatus.Info != "" )
{
document.getElementById("UpdateButton").value = "Update";
document.getElementById("updatemsg").firstChild.nodeValue = "New firmware/system package available";
document.getElementById("updatestatus").firstChild.nodeValue = "Version: " + FWVersion(UpdateInfo);
document.getElementById("updatestatus").firstChild.nodeValue = "Version: " + FWVersion(UpdateStatus.Info);
UpdateAvailable = true;
}
else
document.getElementById("updatestatus").firstChild.nodeValue = "No update available";
isChecking = false;
document.getElementById("UpdateButton").disabled = false;
}
else
{
window.setTimeout(CheckUpdateDone,100);
}
}
function CheckUpdate()
@ -76,15 +80,7 @@ function CheckUpdate()
}
else
{
CheckDone = false;
document.getElementById("updatestatus").firstChild.nodeValue = "***** Checking ******";
head = document.getElementsByTagName('head')[0];
newscript = document.createElement('script');
newscript.id = "script1";
newscript.type = "text/javascript";
newscript.src = "/update.lua?check";
head.appendChild(newscript);
window.setTimeout(CheckUpdateDone,100);
Request("/update.lua?check");
}
}
}

View File

@ -1,6 +1,34 @@
#!/usr/bin/lua
local query = ""
local host = os.getenv("HTTP_HOST")
local proto = os.getenv("SERVER_PROTOCOL")
local query = os.getenv("QUERY_STRING")
local method = os.getenv("REQUEST_METHOD")
local clength = os.getenv("CONTENT_LENGTH")
local ctype = os.getenv("CONTENT_TYPE")
function http_print(s)
if s then
io.stdout:write(tostring(s).."\r\n")
else
io.stdout:write("\r\n")
end
end
function SendError(err,desc)
http_print(proto.." "..err)
http_print()
local file = io.open("e404.html")
if file then
local tmp = file:read("*a")
tmp = string.gsub(tmp,"404 Not Found",err .. " " .. desc)
http_print(tmp)
file:close()
end
end
if not query then query = "" end
if not proto then proto = "HTTP/1.0" end
local DoUpdate = false
local DoCheck = false
@ -11,8 +39,6 @@ if arg[1] then
else
query = arg[1]
end
else
query = os.getenv("QUERY_STRING")
end
if query == "check" then
@ -97,45 +123,45 @@ if DoUpdate then
return
end
print("HTTP/1.0 200 ")
print("Pragma: no-cache")
print("Content-Type: application/x-javascript")
print("")
JSONData = ""
if query == "check" then
if NewImage > CurImage then
print(string.format("UpdateInfo = \"%s\";",string.match(NewImage,"octonet%.(%d+)")))
else
print("UpdateInfo = \"\";")
end
print("CheckDone = true;")
JSONData = "{ \"Info\":\""
if NewImage > CurImage then
JSONData = JSONData .. string.match(NewImage,"octonet%.(%d+)")
end
JSONData = JSONData .. "\"}"
elseif query == "update" then
os.remove("/tmp/updatestatus")
print("UpdateStarted = true;")
os.execute("lua update.lua doupdate >/dev/null 2>/dev/null &")
os.remove("/tmp/updatestatus")
JSONData = "{ \"Status\":\"Started\", \"Error\":false }"
os.execute("lua update.lua doupdate >/dev/null 2>/dev/null &")
elseif query == "updatestatus" then
local tmp = io.open("/tmp/updatestatus")
local updatestatus = ""
if tmp then
updatestatus = tmp:read()
tmp:close()
end
if updatestatus == "CheckDone" then
print("CheckDone = true;")
elseif updatestatus == "DownloadDone" then
print("DownloadDone = true;")
elseif updatestatus == "VerifyDone" then
print("VerifyDone = true;")
elseif string.match(updatestatus,"(Error)") then
print(string.format("UpdateInfo = \'%s\';",updatestatus))
print("UpdateError = true;")
end
local tmp = io.open("/tmp/updatestatus")
local updatestatus = ""
if tmp then
updatestatus = tmp:read()
tmp:close()
end
UpdateError = "false"
if string.match(updatestatus,"(Error)") then
UpdateError = "true"
end
JSONData = "{ \"Status\":\""..updatestatus.."\", \"Error\":"..UpdateError.." }"
else
print(string.format("UpdateInfo = \'%s\';",query))
print("UpdateError = true;")
JSONData = "{ \"Status\":\""..query.."\", \"Error\":true }"
end
http_print(proto.." 200" )
http_print("Pragma: no-cache")
http_print("Content-Type: application/json; charset=UTF-8")
http_print(string.format("Content-Length: %d",#JSONData))
http_print()
http_print(JSONData)