Commit 65cb9a19 authored by wanli's avatar wanli

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

parent 45d223b9
'''
Author: your name
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
Description: In User Settings Edit
FilePath: \evm-store\backend\app\signal_manager.py
......@@ -18,6 +18,11 @@ class SignalManager(object):
actionApplicationBuild = PySignal()
actionGetConvertString = PySignal()
actionOpqcp = PySignal()
actionGetMonitor = PySignal()
actionPostMonitor = PySignal()
actionReceiveMessage = PySignal()
actionBroadcateMessage = PySignal()
actionCheckClient = PySignal()
# 登录模块
actionLogin = PySignal()
......
'''
Author: your name
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
Description: In User Settings Edit
FilePath: \evm-store\backend\controller\__init__.py
......@@ -20,6 +20,7 @@ from .download_manager import downloadManager
from .login_logs_manager import loginLogsManager
from .app_logs_manager import appLogsManager
from .build_logs_manager import buildLogsManager
from .monitor import monitorManager
logger = logging.getLogger(__name__)
......@@ -29,6 +30,11 @@ def initConnect():
signalManager.actionGetConvertString.connect(apiManager.get_escape_text)
signalManager.actionUpdatePassword.connect(apiManager.update_user_password)
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)
......
'''
Author: your name
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
Description: In User Settings Edit
FilePath: \evm-store\backend\controller\monitor.py
'''
import jwt
import json
import time
import logging
from app import config
from model.monitor import session, System, Lvgl, Evm, Image, Device, Request, User
logger = logging.getLogger(__name__)
......@@ -113,39 +116,6 @@ lvglResource = LvglResource()
evmResource = EvmResource()
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():
result = session.query(Device).all()
tmp = []
......@@ -224,3 +194,116 @@ def get_monitor_list(watch, category, start, end):
'lvgl': lvgl_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
* @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
* @Description: In User Settings Edit
* @FilePath: \evm-store\frontend\src\utils\eventBus.js
*/
import Vue from "vue";
import store from "@/store";
// import store from "@/store";
export let wsNotify = new WebSocket(
`ws://${window.location.hostname}:3000/ws/v1/notify`
......@@ -23,14 +23,14 @@ wsNotify.eventBus.$on("reconnect", () => {
);
})
let timer = null;
// let timer = null;
wsNotify.onopen = function (event) {
console.log("websocket is conneted!", event);
wsNotify.eventBus.$emit("open", event);
timer = setInterval(function() {
wsNotify.send(JSON.stringify({ type: 'heartbeat', ts: Date.now(), token: store.getters.token }))
}, 1000)
// timer = setInterval(function() {
// wsNotify.send(JSON.stringify({ type: 'heartbeat', ts: Date.now(), token: store.getters.token }))
// }, 1000)
};
wsNotify.onmessage = function (event) {
......@@ -41,11 +41,11 @@ wsNotify.onmessage = function (event) {
wsNotify.onerror = function (error) {
console.log(error);
wsNotify.eventBus.$emit("error", error);
if (timer) clearInterval(timer);
// if (timer) clearInterval(timer);
};
wsNotify.onclose = function (event) {
console.log("websocket is colosed!", event);
wsNotify.eventBus.$emit("close", event);
if (timer) clearInterval(timer);
// if (timer) clearInterval(timer);
};
......@@ -949,8 +949,6 @@ export default {
}
});
if (m) {
if (m.evm) this.evm = m.evm;
if (m.lvgl) this.lvgl = m.lvgl;
......@@ -959,32 +957,7 @@ export default {
}
},
},
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));
});
});
},
mounted() {},
destroyed() {
// 页面关闭则销毁该数据库
monitor.deleteDB();
......@@ -1009,6 +982,31 @@ export default {
.catch((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>
......
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