2019-08-14 02:37:39 +00:00
|
|
|
'''
|
|
|
|
/* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
2019-11-11 23:45:21 +00:00
|
|
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2019-08-14 02:37:39 +00:00
|
|
|
*/
|
|
|
|
'''
|
|
|
|
|
|
|
|
# _*_
|
|
|
|
from django.shortcuts import render, render_to_response
|
|
|
|
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
|
|
|
|
import json
|
|
|
|
import socket
|
|
|
|
import os
|
|
|
|
|
|
|
|
# Create your views here.
|
|
|
|
|
|
|
|
|
|
|
|
avaliable_list = [
|
|
|
|
{'ID': 'timer', 'Version': '1.0'},
|
|
|
|
{'ID': 'connection', 'Version': '1.0'},
|
|
|
|
{'ID': 'event_publisher', 'Version': '3.0'},
|
|
|
|
{'ID': 'event_subscriber', 'Version': '1.0'},
|
|
|
|
{'ID': 'request_handler', 'Version': '1.0'},
|
|
|
|
{'ID': 'sensor', 'Version': '1.0'},
|
|
|
|
{'ID': 'ui_app', 'Version': '1.0'}
|
|
|
|
]
|
|
|
|
|
|
|
|
# Help
|
|
|
|
def help(req):
|
|
|
|
# return "Help" page
|
|
|
|
return render(req, "help.html")
|
|
|
|
|
|
|
|
# View
|
|
|
|
def index(req):
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
|
|
|
|
host = '127.0.0.1'
|
|
|
|
port = 8889
|
|
|
|
msg = ""
|
|
|
|
err = ""
|
|
|
|
|
|
|
|
try:
|
|
|
|
s.connect((host, port))
|
|
|
|
s.send(bytes("query:all", encoding='utf8'))
|
|
|
|
s.settimeout(10)
|
|
|
|
msg = s.recv(1024)
|
|
|
|
except socket.timeout as e:
|
|
|
|
err = "empty"
|
|
|
|
print("no client connected")
|
|
|
|
except socket.error as e:
|
|
|
|
err = "refused"
|
|
|
|
print("server not started")
|
|
|
|
|
|
|
|
s.close()
|
|
|
|
|
|
|
|
device_list = []
|
|
|
|
if msg != "":
|
|
|
|
devices = msg.decode('utf-8').split("*")
|
|
|
|
for dev in devices:
|
|
|
|
dev_info = eval(dev)
|
|
|
|
addr = dev_info['addr']
|
|
|
|
port = dev_info['port']
|
|
|
|
apps = dev_info['num']
|
|
|
|
device_list.append({'IP': addr, 'Port': port, 'apps': apps})
|
|
|
|
else:
|
|
|
|
if err == "refused":
|
|
|
|
return render(req, "empty.html")
|
|
|
|
|
|
|
|
dlist = device_list
|
|
|
|
|
|
|
|
return render(req, 'mysite.html', {'dlist': json.dumps(dlist)})
|
|
|
|
|
|
|
|
|
|
|
|
def apps(req):
|
|
|
|
open_status = ''
|
|
|
|
search_node = []
|
|
|
|
if req.method == "POST":
|
|
|
|
dev_search = req.POST['mykey']
|
|
|
|
dev_addr = req.POST['voip']
|
|
|
|
dev_port = req.POST['voport']
|
|
|
|
open_status = 'open'
|
|
|
|
for i in avaliable_list:
|
|
|
|
if i['ID'] == dev_search:
|
|
|
|
search_node = [{'ID':dev_search, 'Version': '1.0'}]
|
|
|
|
print("search_node:",search_node)
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
search_node = ["Nothing find"]
|
|
|
|
print( "final:",search_node)
|
|
|
|
else:
|
|
|
|
dev_addr = req.GET['ip']
|
|
|
|
dev_port = req.GET['port']
|
|
|
|
open_status = 'close'
|
|
|
|
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
host = '127.0.0.1'
|
|
|
|
port = 8889
|
|
|
|
msg = ""
|
|
|
|
err = ""
|
|
|
|
|
|
|
|
try:
|
|
|
|
s.connect((host, port))
|
|
|
|
s.send(bytes("query:"+dev_addr+":"+str(dev_port), encoding='utf8'))
|
|
|
|
msg = s.recv(1024)
|
|
|
|
except socket.error as e:
|
|
|
|
print("unable to connect to server")
|
|
|
|
msg = b"fail"
|
|
|
|
s.close()
|
|
|
|
|
|
|
|
app_list = []
|
|
|
|
|
|
|
|
if msg != "":
|
|
|
|
if msg.decode() == "fail":
|
|
|
|
return render(req, "empty.html")
|
|
|
|
else:
|
|
|
|
dic = eval(msg.decode(encoding='utf8'))
|
|
|
|
app_num = dic["num"]
|
|
|
|
for i in range(app_num):
|
|
|
|
app_list.append(
|
|
|
|
{'pname': dic["applet"+str(i+1)], 'status': 'Installed', 'current_version': '1.0'})
|
|
|
|
|
|
|
|
alist = app_list
|
|
|
|
device_info = []
|
|
|
|
device_info.append(
|
|
|
|
{'IP': dev_addr, 'Port': str(dev_port), 'apps': app_num})
|
|
|
|
|
|
|
|
print(device_info)
|
|
|
|
return render(req, 'application.html', {'alist': json.dumps(alist), 'dlist': json.dumps(device_info), 'llist': json.dumps(avaliable_list),
|
|
|
|
"open_status":json.dumps(open_status),"search_node": json.dumps(search_node),})
|
|
|
|
|
|
|
|
|
|
|
|
def appDownload(req):
|
|
|
|
dev_addr = req.GET['ip']
|
|
|
|
dev_port = req.GET['port']
|
|
|
|
app_name = req.GET['name']
|
|
|
|
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
|
|
|
|
host = '127.0.0.1'
|
|
|
|
port = 8889
|
|
|
|
msg = ""
|
|
|
|
|
|
|
|
app_path = os.path.abspath(os.path.join(os.getcwd(), "static", "upload"))
|
|
|
|
if app_path[-1] != '/':
|
|
|
|
app_path += '/'
|
|
|
|
|
|
|
|
try:
|
|
|
|
s.connect((host, port))
|
|
|
|
s.send(bytes("install:"+dev_addr+":"+str(dev_port)+":"+app_name +
|
|
|
|
":"+app_path + app_name + ".wasm", encoding='utf8'))
|
|
|
|
msg = s.recv(1024)
|
|
|
|
except socket.error as e:
|
|
|
|
print("unable to connect to server")
|
|
|
|
s.close()
|
|
|
|
|
|
|
|
success = "ok"
|
|
|
|
fail = "Fail!"
|
|
|
|
status = [success, fail]
|
|
|
|
print(msg)
|
|
|
|
if msg == b"fail":
|
|
|
|
return HttpResponse(json.dumps({
|
|
|
|
"status": fail
|
|
|
|
}))
|
|
|
|
elif msg == b"success":
|
|
|
|
return HttpResponse(json.dumps({
|
|
|
|
"status": success
|
|
|
|
}))
|
|
|
|
else:
|
|
|
|
return HttpResponse(json.dumps({
|
|
|
|
"status": eval(msg.decode())["error message"].split(':')[1]
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
|
|
def appDelete(req):
|
|
|
|
dev_addr = req.GET['ip']
|
|
|
|
dev_port = req.GET['port']
|
|
|
|
app_name = req.GET['name']
|
|
|
|
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
|
|
|
|
host = '127.0.0.1'
|
|
|
|
port = 8889
|
|
|
|
s.connect((host, port))
|
|
|
|
s.send(bytes("uninstall:"+dev_addr+":" +
|
|
|
|
str(dev_port)+":"+app_name, encoding='utf8'))
|
|
|
|
msg = s.recv(1024)
|
|
|
|
s.close()
|
|
|
|
r = HttpResponse("ok")
|
|
|
|
return r
|
|
|
|
|
|
|
|
static_list = [{'ID': 'timer', 'Version': '1.0'}, {'ID': 'connection', 'Version': '1.0'}, {'ID': 'event_publisher', 'Version': '3.0'}, {
|
|
|
|
'ID': 'event_subscriber', 'Version': '1.0'}, {'ID': 'reuqest_handler', 'Version': '1.0'}, {'ID': 'sensor', 'Version': '1.0'}, {'ID': 'ui_app', 'Version': '1.0'}]
|
|
|
|
|
|
|
|
def store(req):
|
|
|
|
|
|
|
|
store_path = os.path.join('static', 'upload')
|
|
|
|
status = []
|
|
|
|
|
|
|
|
print(user_file_list)
|
|
|
|
return render(req, 'appstore.html', {'staticlist': json.dumps(static_list), 'flist': json.dumps(user_file_list),'ulist':json.dumps(status)})
|
|
|
|
|
|
|
|
user_file_list = []
|
|
|
|
files_list = []
|
|
|
|
def uploadapps(req):
|
|
|
|
status = []
|
|
|
|
local_list = ['timer','connection','event_publisher','event_subscriber','reuqest_handler','sensor']
|
|
|
|
req.encoding = 'utf-8'
|
|
|
|
if req.method == 'POST':
|
|
|
|
myfile = req.FILES.get("myfile", None)
|
|
|
|
obj = req.FILES.get('myfile')
|
|
|
|
store_path = os.path.join('static', 'upload')
|
|
|
|
file_path = os.path.join('static', 'upload', obj.name)
|
|
|
|
|
|
|
|
if not os.path.exists(store_path):
|
|
|
|
os.makedirs(store_path)
|
|
|
|
|
|
|
|
file_name = obj.name.split(".")[0]
|
|
|
|
file_prefix = obj.name.split(".")[-1]
|
|
|
|
|
|
|
|
|
|
|
|
if file_prefix != "wasm":
|
|
|
|
status = ["Not a wasm file"]
|
|
|
|
elif file_name in local_list:
|
|
|
|
status = ["This App is preloaded"]
|
|
|
|
elif file_name in files_list:
|
|
|
|
status = ["This App is already uploaded"]
|
|
|
|
else:
|
|
|
|
status = []
|
|
|
|
avaliable_list.append({'ID': file_name, 'Version': '1.0'})
|
|
|
|
user_file_list.append({'ID': file_name, 'Version': '1.0'})
|
|
|
|
files_list.append(file_name)
|
|
|
|
|
|
|
|
print(user_file_list)
|
|
|
|
f = open(file_path, 'wb')
|
|
|
|
for chunk in obj.chunks():
|
|
|
|
f.write(chunk)
|
|
|
|
f.close()
|
|
|
|
return render(req, 'appstore.html', {'staticlist': json.dumps(static_list), 'flist': json.dumps(user_file_list),'ulist':json.dumps(status)})
|
|
|
|
|
|
|
|
appname_list = []
|
|
|
|
|
|
|
|
def addapps(request):
|
|
|
|
types = ''
|
|
|
|
print("enter addapps")
|
|
|
|
request.encoding = 'utf-8'
|
|
|
|
app_dic = {'ID': '', 'Version': ''}
|
|
|
|
|
|
|
|
# if request.method == 'get':
|
|
|
|
if "NAME" in request.GET:
|
|
|
|
a_name = request.GET['NAME']
|
|
|
|
if a_name != "" and a_name not in appname_list:
|
|
|
|
appname_list.append(a_name)
|
|
|
|
message = request.GET['NAME'] + request.GET['Version']
|
|
|
|
app_dic['ID'] = request.GET['NAME']
|
|
|
|
app_dic['Version'] = request.GET['Version']
|
|
|
|
avaliable_list.append(app_dic)
|
|
|
|
else:
|
|
|
|
types = "Exist"
|
|
|
|
print(avaliable_list)
|
|
|
|
return render(request, 'appstore.html', {'alist': json.dumps(avaliable_list)})
|
|
|
|
|
|
|
|
def removeapps(req):
|
|
|
|
app_name = req.GET['name']
|
|
|
|
app_version = req.GET['version']
|
|
|
|
remove_app = {'ID': app_name, 'Version': app_version}
|
|
|
|
avaliable_list.remove(remove_app)
|
|
|
|
user_file_list.remove(remove_app)
|
|
|
|
files_list.remove(app_name)
|
|
|
|
return render(req, 'appstore.html', {'alist': json.dumps(avaliable_list),'flist': json.dumps(user_file_list)})
|
|
|
|
|
|
|
|
# Test
|
|
|
|
if __name__ == "__main__":
|
|
|
|
print(device_list[0]['IP'])
|
|
|
|
print(device['IP'])
|