Commit 65cb9a19 authored by wanli's avatar wanli

🐞 fix(monitor.py): 修复资源监视器前端bug

parent 45d223b9
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-03 11:53:43 LastEditTime: 2021-08-07 17:42:43
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\app\signal_manager.py FilePath: \evm-store\backend\app\signal_manager.py
...@@ -18,6 +18,11 @@ class SignalManager(object): ...@@ -18,6 +18,11 @@ class SignalManager(object):
actionApplicationBuild = PySignal() actionApplicationBuild = PySignal()
actionGetConvertString = PySignal() actionGetConvertString = PySignal()
actionOpqcp = PySignal() actionOpqcp = PySignal()
actionGetMonitor = PySignal()
actionPostMonitor = PySignal()
actionReceiveMessage = PySignal()
actionBroadcateMessage = PySignal()
actionCheckClient = PySignal()
# 登录模块 # 登录模块
actionLogin = PySignal() actionLogin = PySignal()
......
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-03 11:53:04 LastEditTime: 2021-08-07 17:44:21
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\controller\__init__.py FilePath: \evm-store\backend\controller\__init__.py
...@@ -20,6 +20,7 @@ from .download_manager import downloadManager ...@@ -20,6 +20,7 @@ from .download_manager import downloadManager
from .login_logs_manager import loginLogsManager from .login_logs_manager import loginLogsManager
from .app_logs_manager import appLogsManager from .app_logs_manager import appLogsManager
from .build_logs_manager import buildLogsManager from .build_logs_manager import buildLogsManager
from .monitor import monitorManager
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -29,6 +30,11 @@ def initConnect(): ...@@ -29,6 +30,11 @@ def initConnect():
signalManager.actionGetConvertString.connect(apiManager.get_escape_text) signalManager.actionGetConvertString.connect(apiManager.get_escape_text)
signalManager.actionUpdatePassword.connect(apiManager.update_user_password) signalManager.actionUpdatePassword.connect(apiManager.update_user_password)
signalManager.actionOpqcp.connect(apiManager.opqcp) signalManager.actionOpqcp.connect(apiManager.opqcp)
signalManager.actionGetMonitor.connect(monitorManager.get)
signalManager.actionPostMonitor.connect(monitorManager.post)
signalManager.actionReceiveMessage.connect(monitorManager.receive_message)
signalManager.actionBroadcateMessage.connect(monitorManager.broadcast_message)
signalManager.actionCheckClient.connect(monitorManager.check_client)
# 登录模块 # 登录模块
signalManager.actionLogin.connect(loginManager.login) signalManager.actionLogin.connect(loginManager.login)
......
''' '''
Author: your name Author: your name
Date: 2021-06-29 19:24:32 Date: 2021-06-29 19:24:32
LastEditTime: 2021-07-23 22:26:56 LastEditTime: 2021-08-07 18:05:28
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\controller\monitor.py FilePath: \evm-store\backend\controller\monitor.py
''' '''
import jwt
import json
import time
import logging import logging
from app import config
from model.monitor import session, System, Lvgl, Evm, Image, Device, Request, User from model.monitor import session, System, Lvgl, Evm, Image, Device, Request, User
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -113,39 +116,6 @@ lvglResource = LvglResource() ...@@ -113,39 +116,6 @@ lvglResource = LvglResource()
evmResource = EvmResource() evmResource = EvmResource()
imageResource = ImageResource() imageResource = ImageResource()
def insert_data(msg):
# 先判断手表imei是否存在,不存在则先注册手表IMEI
watch_id = -1
if msg.get("imei"):
result = session.query(Device).filter_by(imei=msg.get("imei")).first()
if result:
watch_id = result.id
else:
logger.info("设备不存在")
return None
if msg.get("request"):
msg.get("request").update({ "watch": watch_id })
result = Request(**msg.get("request"))
session.add(result)
session.flush()
session.commit()
if msg.get("system"):
msg.get("system").update({ "watch": watch_id })
systemResource.post(msg.get("system"))
if msg.get("lvgl"):
msg.get("lvgl").update({ "watch": watch_id })
lvglResource.post(msg.get("lvgl"))
if msg.get("evm"):
msg.get("evm").update({ "watch": watch_id })
evmResource.post(msg.get("evm"))
if msg.get("image"):
imageResource.post_array(msg.get("image"), watch_id)
def get_watch_list(): def get_watch_list():
result = session.query(Device).all() result = session.query(Device).all()
tmp = [] tmp = []
...@@ -224,3 +194,116 @@ def get_monitor_list(watch, category, start, end): ...@@ -224,3 +194,116 @@ def get_monitor_list(watch, category, start, end):
'lvgl': lvgl_data(watch, start, end), 'lvgl': lvgl_data(watch, start, end),
'image': image_data(watch, start, end) 'image': image_data(watch, start, end)
} }
class MonitorManager(object):
def __init__(self):
pass
def get(self, data):
watch = data.get("watch")
category = data.get("category")
start = data.get("start")
end = data.get("end")
# 判断watch是否存在
w = session.query(Device).filter(Device.id==watch).first()
if not w:
return []
if category == "system":
return []
elif category == "image":
return image_data(watch, start, end)
elif category == "lvgl":
return lvgl_data(watch, start, end)
elif category == "evm":
return evm_data(watch, start, end)
else:
return {
'evm': evm_data(watch, start, end),
'lvgl': lvgl_data(watch, start, end),
'image': image_data(watch, start, end)
}
def post(self, msg):
# 先判断手表imei是否存在,不存在则先注册手表IMEI
watch_id = -1
if msg.get("imei"):
result = session.query(Device).filter_by(imei=msg.get("imei")).first()
if result:
watch_id = result.id
else:
logger.info("设备不存在")
return None
if msg.get("request"):
msg.get("request").update({ "watch": watch_id })
result = Request(**msg.get("request"))
session.add(result)
session.flush()
session.commit()
if msg.get("system"):
msg.get("system").update({ "watch": watch_id })
systemResource.post(msg.get("system"))
if msg.get("lvgl"):
msg.get("lvgl").update({ "watch": watch_id })
lvglResource.post(msg.get("lvgl"))
if msg.get("evm"):
msg.get("evm").update({ "watch": watch_id })
evmResource.post(msg.get("evm"))
if msg.get("image"):
imageResource.post_array(msg.get("image"), watch_id)
def check_client(self, instance):
index = -1
for i, c in enumerate(instance._clients):
if id(instance) == id(c.get("context")):
index = i
break
return index
def receive_message(self, instance, message):
print(instance._clients, message)
if message.get("type") and message.get("token"):
# 获取token值,检验正确与否,获取uuid
payload = jwt.decode(message.get("token"), config['SECRET_KEY'], verify=True, algorithms=['HS256'], options={ 'verify_aud': False })
# 认证包,认证不通过,则剔除该连接
if message.get("type") == "auth":
if not message.get("token"):
return json.dumps({ "code": 400, "data": None, "msg": "token can not be null" })
user = session.query(User).filter(User.id == payload.get("data").get("id")).one_or_none()
if not user:
return json.dumps({ "code": 400, "data": None, "msg": "user not exists" })
# 查询该用户可查看设备
devices = session.query(Device).filter(Device.create_by==payload.get("data").get("id")).all()
if len(devices):
instance._clients.append({
'uuid': payload.get("data").get("uuid"),
'context': instance,
'devices': list(map(lambda d:d.imei, devices)),
'ts': int(time.time())
})
return json.dumps({ 'code': 200, 'data': None, 'msg': 'auth passed' })
else: # 没有设备,是否断开连接
return json.dumps({ 'code': 400, 'data': None, 'msg': 'no devices' })
else:
return json.dumps({ 'code': 200, 'data': None, 'msg': 'unkonw message packet, disconnect by server' })
def broadcast_message(self, clients, message):
print(clients, message)
if not message.get("imei"):
return False
for item in clients:
if message.get("imei") in item.get("devices", []):
item.get("context").write_message(json.dumps(message))
monitorManager = MonitorManager()
\ No newline at end of file
This diff is collapsed.
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-07-01 15:02:16 * @Date: 2021-07-01 15:02:16
* @LastEditTime: 2021-07-28 10:42:15 * @LastEditTime: 2021-08-07 18:29:02
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \evm-store\frontend\src\utils\eventBus.js * @FilePath: \evm-store\frontend\src\utils\eventBus.js
*/ */
import Vue from "vue"; import Vue from "vue";
import store from "@/store"; // import store from "@/store";
export let wsNotify = new WebSocket( export let wsNotify = new WebSocket(
`ws://${window.location.hostname}:3000/ws/v1/notify` `ws://${window.location.hostname}:3000/ws/v1/notify`
...@@ -23,14 +23,14 @@ wsNotify.eventBus.$on("reconnect", () => { ...@@ -23,14 +23,14 @@ wsNotify.eventBus.$on("reconnect", () => {
); );
}) })
let timer = null; // let timer = null;
wsNotify.onopen = function (event) { wsNotify.onopen = function (event) {
console.log("websocket is conneted!", event); console.log("websocket is conneted!", event);
wsNotify.eventBus.$emit("open", event); wsNotify.eventBus.$emit("open", event);
timer = setInterval(function() { // timer = setInterval(function() {
wsNotify.send(JSON.stringify({ type: 'heartbeat', ts: Date.now(), token: store.getters.token })) // wsNotify.send(JSON.stringify({ type: 'heartbeat', ts: Date.now(), token: store.getters.token }))
}, 1000) // }, 1000)
}; };
wsNotify.onmessage = function (event) { wsNotify.onmessage = function (event) {
...@@ -41,11 +41,11 @@ wsNotify.onmessage = function (event) { ...@@ -41,11 +41,11 @@ wsNotify.onmessage = function (event) {
wsNotify.onerror = function (error) { wsNotify.onerror = function (error) {
console.log(error); console.log(error);
wsNotify.eventBus.$emit("error", error); wsNotify.eventBus.$emit("error", error);
if (timer) clearInterval(timer); // if (timer) clearInterval(timer);
}; };
wsNotify.onclose = function (event) { wsNotify.onclose = function (event) {
console.log("websocket is colosed!", event); console.log("websocket is colosed!", event);
wsNotify.eventBus.$emit("close", event); wsNotify.eventBus.$emit("close", event);
if (timer) clearInterval(timer); // if (timer) clearInterval(timer);
}; };
...@@ -949,8 +949,6 @@ export default { ...@@ -949,8 +949,6 @@ export default {
} }
}); });
if (m) { if (m) {
if (m.evm) this.evm = m.evm; if (m.evm) this.evm = m.evm;
if (m.lvgl) this.lvgl = m.lvgl; if (m.lvgl) this.lvgl = m.lvgl;
...@@ -959,32 +957,7 @@ export default { ...@@ -959,32 +957,7 @@ export default {
} }
}, },
}, },
mounted() { mounted() {},
this.socket = wsNotify;
wsNotify.eventBus.$on("exported", (res) => {
if (res.type === "evm") result.evmImg = res.data;
else if (res.type === "lvgl") result.lvglImg = res.data;
else if (res.type === "system") result.systemImg = res.data;
});
wsNotify.eventBus.$on("open", (message) => {
this.sendMsg();
this.$nextTick(() => {
console.log(message);
});
// 这里启动一个定时器,10秒钟后,如果没有消息进来,说明当前没有在线设备
});
wsNotify.eventBus.$on("close", (message) => {
this.$nextTick(() => {
console.log(message);
});
});
wsNotify.eventBus.$on("message", (message) => {
this.$nextTick(() => {
this.handleMessage(deepClone(message));
});
});
},
destroyed() { destroyed() {
// 页面关闭则销毁该数据库 // 页面关闭则销毁该数据库
monitor.deleteDB(); monitor.deleteDB();
...@@ -1009,6 +982,31 @@ export default { ...@@ -1009,6 +982,31 @@ export default {
.catch((err) => { .catch((err) => {
console.error(err); console.error(err);
}); });
this.socket = wsNotify;
wsNotify.eventBus.$on("exported", (res) => {
if (res.type === "evm") result.evmImg = res.data;
else if (res.type === "lvgl") result.lvglImg = res.data;
else if (res.type === "system") result.systemImg = res.data;
});
wsNotify.eventBus.$on("open", (message) => {
this.sendMsg();
this.$nextTick(() => {
console.log(message);
});
// 这里启动一个定时器,10秒钟后,如果没有消息进来,说明当前没有在线设备
});
wsNotify.eventBus.$on("close", (message) => {
this.$nextTick(() => {
console.log(message);
});
});
wsNotify.eventBus.$on("message", (message) => {
this.$nextTick(() => {
this.handleMessage(deepClone(message));
});
});
}, },
}; };
</script> </script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment