Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
E
evm-store
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanli
evm-store
Commits
c739dee8
Commit
c739dee8
authored
Jul 05, 2021
by
wanli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
f778c0b8
Changes
20
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
112 additions
and
108 deletions
+112
-108
backend/controller/login_manager.py
backend/controller/login_manager.py
+1
-1
backend/controller/user_manager.py
backend/controller/user_manager.py
+6
-7
backend/fullstack/login/auth.py
backend/fullstack/login/auth.py
+2
-1
backend/model/annex.py
backend/model/annex.py
+1
-1
backend/model/app_logs.py
backend/model/app_logs.py
+1
-1
backend/model/app_users.py
backend/model/app_users.py
+1
-1
backend/model/apps.py
backend/model/apps.py
+1
-1
backend/model/build_logs.py
backend/model/build_logs.py
+1
-1
backend/model/device.py
backend/model/device.py
+0
-8
backend/model/dictionary.py
backend/model/dictionary.py
+1
-1
backend/model/download.py
backend/model/download.py
+1
-1
backend/model/login_logs.py
backend/model/login_logs.py
+1
-1
backend/model/monitor.py
backend/model/monitor.py
+7
-10
backend/model/user.py
backend/model/user.py
+1
-1
backend/start.py
backend/start.py
+2
-2
backend/view/monitor.py
backend/view/monitor.py
+68
-35
backend/view/user.py
backend/view/user.py
+2
-2
frontend/src/permission.js
frontend/src/permission.js
+4
-4
frontend/src/utils/eventBus.js
frontend/src/utils/eventBus.js
+9
-1
frontend/src/views/system/monitor.vue
frontend/src/views/system/monitor.vue
+2
-28
No files found.
backend/controller/login_manager.py
View file @
c739dee8
...
@@ -82,7 +82,7 @@ class LoginManager(object):
...
@@ -82,7 +82,7 @@ class LoginManager(object):
update_login_information
(
real_ip
,
result
.
id
)
update_login_information
(
real_ip
,
result
.
id
)
# 返回token
# 返回token
token
=
Auth
.
encode_auth_token
(
result
.
id
,
result
.
username
)
# 生成 token
token
=
Auth
.
encode_auth_token
(
result
.
id
,
result
.
username
,
str
(
result
.
uuid
)
)
# 生成 token
# setattr(result, 'token', token)
# setattr(result, 'token', token)
return
{
'token'
:
token
,
'id'
:
result
.
id
,
'username'
:
result
.
username
},
ResponseCode
.
OK
return
{
'token'
:
token
,
'id'
:
result
.
id
,
'username'
:
result
.
username
},
ResponseCode
.
OK
...
...
backend/controller/user_manager.py
View file @
c739dee8
...
@@ -5,7 +5,6 @@ import logging
...
@@ -5,7 +5,6 @@ import logging
import
copy
import
copy
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
flask
import
request
from
model
import
fullStackDB
from
model
import
fullStackDB
from
model.user
import
User
from
model.user
import
User
from
utils
import
md5_salt
from
utils
import
md5_salt
...
@@ -27,7 +26,7 @@ class UserManager(object):
...
@@ -27,7 +26,7 @@ class UserManager(object):
return
False
return
False
return
True
return
True
def
add
(
self
,
data
):
def
add
(
self
,
uuid
,
data
):
'''
'''
添加用户
添加用户
'''
'''
...
@@ -37,7 +36,7 @@ class UserManager(object):
...
@@ -37,7 +36,7 @@ class UserManager(object):
if
isExists
:
if
isExists
:
return
False
,
"user already exists"
return
False
,
"user already exists"
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
)
)
editor
=
User
.
get
(
uuid
=
uuid
)
if
not
editor
:
if
not
editor
:
return
False
,
"current user is not exists"
return
False
,
"current user is not exists"
...
@@ -62,7 +61,7 @@ class UserManager(object):
...
@@ -62,7 +61,7 @@ class UserManager(object):
删除用户
删除用户
'''
'''
with
db_session
:
with
db_session
:
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
)
)
editor
=
User
.
get
(
uuid
=
uuid
)
if
not
editor
:
if
not
editor
:
return
False
,
"current user is not exists"
return
False
,
"current user is not exists"
...
@@ -84,7 +83,7 @@ class UserManager(object):
...
@@ -84,7 +83,7 @@ class UserManager(object):
with
db_session
:
with
db_session
:
# 查询请求者是否存在
# 查询请求者是否存在
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
)
)
editor
=
User
.
get
(
uuid
=
uuid
)
if
not
editor
:
if
not
editor
:
return
False
,
"current user is not exists"
return
False
,
"current user is not exists"
...
@@ -101,12 +100,12 @@ class UserManager(object):
...
@@ -101,12 +100,12 @@ class UserManager(object):
else
:
else
:
return
None
,
"user does not exists"
return
None
,
"user does not exists"
def
get
(
self
):
def
get
(
self
,
user
):
'''
'''
查询单用户
查询单用户
'''
'''
result
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
)
,
is_delete
=
False
)
result
=
User
.
get
(
id
=
user
,
is_delete
=
False
)
if
result
:
if
result
:
temp
=
result
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"username"
,
"account"
,
"role"
,
"phone"
,
"email"
,
"gender"
,
"create_at"
,
"update_at"
])
temp
=
result
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"username"
,
"account"
,
"role"
,
"phone"
,
"email"
,
"gender"
,
"create_at"
,
"update_at"
])
temp
.
update
({
temp
.
update
({
...
...
backend/fullstack/login/auth.py
View file @
c739dee8
...
@@ -33,7 +33,7 @@ class Auth(object):
...
@@ -33,7 +33,7 @@ class Auth(object):
return
inner
return
inner
@
staticmethod
@
staticmethod
def
encode_auth_token
(
user_id
,
username
):
def
encode_auth_token
(
user_id
,
username
,
uuid
):
"""
"""
生成认证Token
生成认证Token
:param user_id: int
:param user_id: int
...
@@ -49,6 +49,7 @@ class Auth(object):
...
@@ -49,6 +49,7 @@ class Auth(object):
'sub'
:
user_id
,
# token所属者
'sub'
:
user_id
,
# token所属者
'data'
:
{
# payload
'data'
:
{
# payload
'id'
:
user_id
,
'id'
:
user_id
,
'uuid'
:
uuid
,
'username'
:
username
'username'
:
username
}
}
}
}
...
...
backend/model/annex.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
,
LongStr
,
Json
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
LongStr
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/app_logs.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
,
Json
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Json
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/app_users.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/apps.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
,
LongStr
,
Json
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/build_logs.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
,
LongStr
,
Json
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Json
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/device.py
View file @
c739dee8
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 18:24:18
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\
model
\
device.py
'''
#!/usr/bin/env python
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
...
...
backend/model/dictionary.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/download.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/login_logs.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
,
Json
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/model/monitor.py
View file @
c739dee8
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 18:26:25
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\
model
\
monitor.py
'''
#!/usr/bin/env python
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
...
@@ -14,9 +6,9 @@ import uuid
...
@@ -14,9 +6,9 @@ import uuid
from
app.setting
import
config
from
app.setting
import
config
from
datetime
import
datetime
from
datetime
import
datetime
from
sqlalchemy
import
create_engine
from
sqlalchemy
import
create_engine
from
sqlalchemy
import
func
,
Column
,
Integer
,
String
,
Float
,
DateTime
,
Numeric
,
Boolean
from
sqlalchemy
import
func
,
Column
,
Integer
,
String
,
DateTime
,
Boolean
from
sqlalchemy.ext.declarative
import
declarative_base
from
sqlalchemy.ext.declarative
import
declarative_base
from
sqlalchemy.orm
import
sessionmaker
,
class_mapper
,
object_mapper
from
sqlalchemy.orm
import
sessionmaker
,
class_mapper
engine
=
create_engine
(
'sqlite:///{}?check_same_thread=False'
.
format
(
config
.
get
(
"DATABASE"
)),
echo
=
False
)
engine
=
create_engine
(
'sqlite:///{}?check_same_thread=False'
.
format
(
config
.
get
(
"DATABASE"
)),
echo
=
False
)
...
@@ -137,6 +129,11 @@ class Image(Base):
...
@@ -137,6 +129,11 @@ class Image(Base):
def
to_dict
(
self
):
def
to_dict
(
self
):
return
{
c
.
name
:
getattr
(
self
,
c
.
name
)
for
c
in
self
.
__table__
.
columns
}
return
{
c
.
name
:
getattr
(
self
,
c
.
name
)
for
c
in
self
.
__table__
.
columns
}
class
User
(
Base
):
__tablename__
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"user"
id
=
Column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
uuid
=
Column
(
String
(
64
),
default
=
uuid
.
uuid1
,
index
=
True
)
class
Device
(
Base
):
class
Device
(
Base
):
__tablename__
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"device"
__tablename__
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"device"
...
...
backend/model/user.py
View file @
c739dee8
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
uuid
import
uuid
from
datetime
import
datetime
,
date
from
datetime
import
datetime
,
date
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
,
Json
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
from
app
import
config
from
app
import
config
from
.
import
fullStackDB
from
.
import
fullStackDB
...
...
backend/start.py
View file @
c739dee8
'''
'''
Author: your name
Author: your name
Date: 2021-04-14 14:12:18
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-0
1 15:37:43
LastEditTime: 2021-07-0
3 17:26:02
LastEditors: Please set LastEditors
LastEditors: Please set LastEditors
Description: In User Settings Edit
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\
start.py
FilePath:
\
evm-store
\b
ackend
\
start.py
...
@@ -12,12 +12,12 @@ import sys
...
@@ -12,12 +12,12 @@ import sys
import
os
import
os
import
signal
import
signal
import
json
import
json
from
typing
import
(
Any
,)
# import tornado.autoreload
# import tornado.autoreload
from
tornado.wsgi
import
WSGIContainer
from
tornado.wsgi
import
WSGIContainer
from
tornado.web
import
Application
,
RequestHandler
,
FallbackHandler
from
tornado.web
import
Application
,
RequestHandler
,
FallbackHandler
from
tornado.ioloop
import
IOLoop
from
tornado.ioloop
import
IOLoop
from
tornado.autoreload
import
watch
from
tornado.autoreload
import
watch
from
fullstack.log
import
logger
from
view
import
app
from
view
import
app
from
view.monitor
import
DeviceMessageHandler
,
NotifyHandler
,
WatchHandler
from
view.monitor
import
DeviceMessageHandler
,
NotifyHandler
,
WatchHandler
from
app
import
config
from
app
import
config
...
...
backend/view/monitor.py
View file @
c739dee8
'''
'''
Author: your name
Author: your name
Date: 2021-06-29 19:33:41
Date: 2021-06-29 19:33:41
LastEditTime: 2021-07-0
3 09:33:58
LastEditTime: 2021-07-0
5 09:26:59
LastEditors: Please set LastEditors
LastEditors: Please set LastEditors
Description: In User Settings Edit
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\v
iew
\
monitor.py
FilePath:
\
evm-store
\b
ackend
\v
iew
\
monitor.py
'''
'''
import
tornado.ioloop
import
tornado.ioloop
import
tornado.web
import
tornado.web
from
tornado
import
httputil
from
tornado.web
import
RequestHandler
,
StaticFileHandler
from
tornado.web
import
RequestHandler
,
StaticFileHandler
from
tornado.websocket
import
WebSocketHandler
,
WebSocketClosedError
from
tornado.websocket
import
WebSocketHandler
,
WebSocketClosedError
import
json
import
json
...
@@ -17,9 +18,11 @@ import logging
...
@@ -17,9 +18,11 @@ import logging
import
pprint
import
pprint
import
traceback
import
traceback
import
jwt
import
jwt
from
typing
import
(
Any
,)
from
threading
import
Timer
from
threading
import
Timer
from
datetime
import
datetime
,
timedelta
from
datetime
import
datetime
,
timedelta
from
app
import
config
,
signalManager
from
app
import
config
from
model.monitor
import
session
,
Device
,
User
from
controller.monitor
import
insert_data
,
get_monitor_list
,
get_watch_list
from
controller.monitor
import
insert_data
,
get_monitor_list
,
get_watch_list
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
...
@@ -78,11 +81,11 @@ def pushmessage(func):
...
@@ -78,11 +81,11 @@ def pushmessage(func):
msg
,
binary
=
ret
msg
,
binary
=
ret
try
:
try
:
if
isinstance
(
msg
,
WebsocketResponse
)
or
isinstance
(
msg
,
dict
):
if
isinstance
(
msg
,
WebsocketResponse
)
or
isinstance
(
msg
,
dict
):
self
.
write
_message
(
json
.
dumps
(
msg
),
binary
)
self
.
write
(
json
.
dumps
(
msg
),
binary
)
elif
isinstance
(
msg
,
str
)
or
isinstance
(
msg
,
str
):
elif
isinstance
(
msg
,
str
)
or
isinstance
(
msg
,
str
):
self
.
write
_message
(
msg
,
binary
)
self
.
write
(
msg
,
binary
)
else
:
else
:
self
.
write
_message
(
repr
(
msg
),
binary
)
self
.
write
(
repr
(
msg
),
binary
)
except
WebSocketClosedError
as
e
:
except
WebSocketClosedError
as
e
:
logger
.
error
(
e
)
logger
.
error
(
e
)
self
.
on_close
()
self
.
on_close
()
...
@@ -91,6 +94,7 @@ def pushmessage(func):
...
@@ -91,6 +94,7 @@ def pushmessage(func):
class
BaseWebsocket
(
WebSocketHandler
):
class
BaseWebsocket
(
WebSocketHandler
):
_clients
=
[]
_clients
=
[]
handlers
=
{}
handlers
=
{}
def
open
(
self
):
def
open
(
self
):
# 新加入一个连接后,设置一个接收消息时间戳
# 新加入一个连接后,设置一个接收消息时间戳
# 同时查询改用可以查看哪些设备
# 同时查询改用可以查看哪些设备
...
@@ -115,6 +119,7 @@ class BaseWebsocket(WebSocketHandler):
...
@@ -115,6 +119,7 @@ class BaseWebsocket(WebSocketHandler):
className
=
self
.
__class__
.
__name__
className
=
self
.
__class__
.
__name__
logger
.
warning
(
"websocket of
%
s is closed"
%
className
)
logger
.
warning
(
"websocket of
%
s is closed"
%
className
)
if
className
in
self
.
handlers
:
if
className
in
self
.
handlers
:
print
(
"122 ======>"
,
type
(
self
.
handlers
),
type
(
className
),
type
(
self
.
handlers
[
className
]))
self
.
handlers
[
className
]
.
remove
(
self
)
self
.
handlers
[
className
]
.
remove
(
self
)
def
check_origin
(
self
,
origin
):
def
check_origin
(
self
,
origin
):
...
@@ -123,66 +128,96 @@ class BaseWebsocket(WebSocketHandler):
...
@@ -123,66 +128,96 @@ class BaseWebsocket(WebSocketHandler):
@
classmethod
@
classmethod
def
broadcastMessage
(
cls
,
message
,
binary
=
False
):
def
broadcastMessage
(
cls
,
message
,
binary
=
False
):
className
=
cls
.
__name__
pprint
.
pprint
(
cls
.
handlers
)
pprint
.
pprint
(
cls
.
handlers
)
message
=
json
.
dumps
(
message
)
if
not
message
.
get
(
"imei"
):
return
False
for
item
in
cls
.
_clients
:
if
message
.
get
(
"imei"
)
in
item
.
get
(
"devices"
,
[]):
item
.
get
(
"context"
)
.
send
(
json
.
dumps
(
message
),
binary
)
# print(id(item.get("context")))
if
className
in
cls
.
handlers
:
# className = cls.__name__
for
handler
in
cls
.
handlers
[
className
]:
# message = json.dumps(message)
handler
.
send
(
message
,
binary
)
# if className in cls.handlers:
# for handler in cls.handlers[className]:
# # 判断用户能否查看该设备
# handler.send(message, binary)
class
NotifyHandler
(
BaseWebsocket
):
class
NotifyHandler
(
BaseWebsocket
):
"""
"""
建立与web前端的通信连接,发送状态信息报文
建立与web前端的通信连接,发送状态信息报文
"""
"""
_timer
=
None
_timer
=
None
def
__init__
(
self
,
application
:
tornado
.
web
.
Application
,
request
:
httputil
.
HTTPServerRequest
,
**
kwargs
:
Any
)
->
None
:
super
()
.
__init__
(
application
,
request
,
**
kwargs
)
self
.
on_heartbeat
()
def
open
(
self
):
def
open
(
self
):
super
(
NotifyHandler
,
self
)
.
open
()
super
(
NotifyHandler
,
self
)
.
open
()
def
on_message
(
self
,
message
):
def
on_message
(
self
,
message
):
className
=
self
.
__class__
.
__name__
className
=
self
.
__class__
.
__name__
# 收到心跳包消息,更新接收数据时间
message
=
json
.
loads
(
message
)
try
:
try
:
# 判断消息类型
if
message
.
get
(
"type"
):
if
message
.
get
(
"type"
):
if
message
.
get
(
"type"
)
==
"auth"
:
# 获取token值,检验正确与否,获取uuid
# 获取token值,检验正确与否,获取uuid
payload
=
jwt
.
decode
(
message
.
get
(
"token"
),
config
[
'SECRET_KEY'
],
verify
=
True
,
algorithms
=
[
'HS256'
],
options
=
{
'require'
:
[
'exp'
,
'iss'
,
'sub'
,
'aud'
,
'iat'
,
'data'
]},
audience
=
"bytecode"
)
payload
=
jwt
.
decode
(
message
.
get
(
"token"
),
config
[
'SECRET_KEY'
],
verify
=
True
,
algorithms
=
[
'HS256'
],
options
=
{
'require'
:
[
'exp'
,
'iss'
,
'sub'
,
'aud'
,
'iat'
,
'data'
]},
audience
=
"bytecode"
)
print
(
payload
)
result
=
signalManager
.
actionCheckUser
.
emit
(
message
.
get
(
"uuid"
))
# 判断消息类型
# 认证包,认证不通过,则剔除该连接
# 认证包,认证不通过,则剔除该连接
if
message
.
get
(
"type"
)
==
"auth"
:
if
not
message
.
get
(
"token"
):
self
.
write
(
json
.
dumps
({
"code"
:
400
,
"data"
:
None
,
"msg"
:
"token can not be null"
}))
return
user
=
session
.
query
(
User
)
.
filter
(
User
.
id
==
payload
.
get
(
"data"
)
.
get
(
"id"
))
.
all
()
if
not
user
:
self
.
write_message
(
json
.
dumps
({
"code"
:
400
,
"data"
:
None
,
"msg"
:
"user not exists"
}))
# self.close()
return
# 查询该用户可查看设备
# 查询该用户可查看设备
devices
=
session
.
query
(
Device
)
.
filter
(
Device
.
create_by
==
payload
.
get
(
"data"
)
.
get
(
"id"
))
.
all
()
if
len
(
devices
):
self
.
_clients
.
append
({
self
.
_clients
.
append
({
'uuid'
:
''
,
'uuid'
:
payload
.
get
(
"data"
)
.
get
(
"uuid"
)
,
'context'
:
self
,
'context'
:
self
,
'devices'
:
[]
,
'devices'
:
lambda
d
:
d
.
imei
,
'ts'
:
int
(
time
.
time
())
'ts'
:
int
(
time
.
time
())
})
})
self
.
write_message
(
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'auth passed'
}))
return
result
else
:
# 没有设备,是否断开连接
self
.
write_message
(
json
.
dumps
({
'code'
:
400
,
'data'
:
None
,
'msg'
:
'no devices'
}))
# self.close()
elif
message
.
get
(
"type"
)
==
"heartbeat"
:
# 心跳包
elif
message
.
get
(
"type"
)
==
"heartbeat"
:
# 心跳包
# 收到心跳包消息,更新接收数据时间
for
c
in
self
.
_clients
:
for
c
in
self
.
_clients
:
if
c
.
get
(
"uuid"
)
==
message
.
get
(
"uuid"
):
if
c
.
get
(
"uuid"
)
==
payload
.
get
(
"data"
)
.
get
(
"uuid"
):
c
[
"ts"
]
=
int
(
time
.
time
())
c
[
"ts"
]
=
int
(
time
.
time
())
self
.
write
(
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'update session timestamp success'
}))
self
.
write
_message
(
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'update session timestamp success'
}))
break
break
else
:
else
:
self
.
write
(
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'unkonw message packet, disconnect by server'
}))
self
.
write
_message
(
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'unkonw message packet, disconnect by server'
}))
self
.
handlers
[
className
]
.
remove
(
self
)
self
.
handlers
[
className
]
.
remove
(
self
)
except
Exception
as
e
:
except
Exception
as
e
:
self
.
handlers
[
className
]
.
remove
(
self
)
self
.
handlers
[
className
]
.
remove
(
self
)
logger
.
error
(
e
)
logger
.
error
(
e
)
print
(
"hello,world"
,
message
)
logger
.
info
(
message
)
logger
.
info
(
message
)
def
on_heartbeat
(
self
):
def
on_heartbeat
(
self
):
className
=
self
.
__class__
.
__name__
# 心跳定时器,固定间隔扫描连接列表,当连接超时,主动剔除该连接
# 心跳定时器,固定间隔扫描连接列表,当连接超时,主动剔除该连接
for
i
in
range
(
len
(
self
.
_clients
)
-
1
,
-
1
,
-
1
):
if
int
(
time
.
time
())
-
self
.
_clients
[
i
]
.
get
(
"ts"
)
>
5
:
self
.
_clients
.
remove
(
self
.
_clients
[
i
])
if
self
.
handlers
.
get
(
className
,
None
):
self
.
handlers
[
className
]
.
remove
(
self
)
self
.
_timer
=
Timer
(
5
,
self
.
on_heartbeat
)
self
.
_timer
=
Timer
(
1
,
self
.
on_heartbeat
)
self
.
_timer
.
start
()
self
.
_timer
.
start
()
class
MainHandler
(
BaseHandler
):
class
MainHandler
(
BaseHandler
):
...
@@ -231,9 +266,7 @@ class WatchHandler(BaseHandler):
...
@@ -231,9 +266,7 @@ class WatchHandler(BaseHandler):
def
post
(
self
):
def
post
(
self
):
data
=
tornado
.
escape
.
json_decode
(
self
.
request
.
body
)
data
=
tornado
.
escape
.
json_decode
(
self
.
request
.
body
)
print
(
"=====>"
,
data
,
type
(
data
))
self
.
write
(
json
.
dumps
({
'code'
:
100
,
'data'
:
data
,
'msg'
:
'success'
}))
self
.
write
(
json
.
dumps
({
'code'
:
100
,
'msg'
:
'success'
}))
class
DeviceMessageHandler
(
BaseHandler
):
class
DeviceMessageHandler
(
BaseHandler
):
def
get
(
self
):
def
get
(
self
):
...
...
backend/view/user.py
View file @
c739dee8
...
@@ -21,7 +21,7 @@ def add():
...
@@ -21,7 +21,7 @@ def add():
新增用户
新增用户
'''
'''
try
:
try
:
isSuccess
,
message
=
signalManager
.
actionAddUser
.
emit
(
request
.
schema_data
)
isSuccess
,
message
=
signalManager
.
actionAddUser
.
emit
(
request
.
current_user
.
get
(
"id"
),
request
.
schema_data
)
if
isSuccess
:
if
isSuccess
:
return
response_result
(
ResponseCode
.
OK
,
msg
=
message
)
return
response_result
(
ResponseCode
.
OK
,
msg
=
message
)
else
:
else
:
...
@@ -58,7 +58,7 @@ def get():
...
@@ -58,7 +58,7 @@ def get():
查找单个用户
查找单个用户
'''
'''
try
:
try
:
result
,
message
=
signalManager
.
actionGetUser
.
emit
()
result
,
message
=
signalManager
.
actionGetUser
.
emit
(
request
.
current_user
.
get
(
"id"
)
)
if
result
:
if
result
:
return
response_result
(
ResponseCode
.
OK
,
data
=
result
,
msg
=
message
)
return
response_result
(
ResponseCode
.
OK
,
data
=
result
,
msg
=
message
)
else
:
else
:
...
...
frontend/src/permission.js
View file @
c739dee8
import
router
from
"
.
/router
"
;
import
router
from
"
@
/router
"
;
import
store
from
"
@/store
"
;
// get token from cookie
import
store
from
"
@/store
"
;
import
NProgress
from
"
nprogress
"
;
// progress bar
import
NProgress
from
"
nprogress
"
;
import
"
nprogress/nprogress.css
"
;
// progress bar style
import
"
nprogress/nprogress.css
"
;
import
{
getPageTitle
}
from
"
@/utils/index
"
;
import
{
getPageTitle
}
from
"
@/utils/index
"
;
const
whiteList
=
[
"
/login
"
,
"
/register
"
];
const
whiteList
=
[
"
/login
"
,
"
/register
"
];
...
...
frontend/src/utils/eventBus.js
View file @
c739dee8
/*
/*
* @Author: your name
* @Author: your name
* @Date: 2021-07-01 15:02:16
* @Date: 2021-07-01 15:02:16
* @LastEditTime: 2021-07-0
1 18:20:04
* @LastEditTime: 2021-07-0
3 19:50:11
* @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
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
* @FilePath: \evm-store\frontend\src\utils\wsNotify.js
* @FilePath: \evm-store\frontend\src\utils\wsNotify.js
*/
*/
import
Vue
from
"
vue
"
;
import
Vue
from
"
vue
"
;
import
store
from
"
@/store
"
;
export
const
wsNotify
=
new
WebSocket
(
export
const
wsNotify
=
new
WebSocket
(
`ws://
${
window
.
location
.
hostname
}
:3000/ws/v1/notify`
`ws://
${
window
.
location
.
hostname
}
:3000/ws/v1/notify`
...
@@ -24,9 +25,14 @@ window.wsNotify = wsNotify;
...
@@ -24,9 +25,14 @@ window.wsNotify = wsNotify;
wsNotify
.
eventBus
=
new
Vue
();
wsNotify
.
eventBus
=
new
Vue
();
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
()
{
wsNotify
.
send
(
JSON
.
stringify
({
type
:
'
heartbeat
'
,
ts
:
Date
.
now
(),
token
:
store
.
getters
.
token
}))
},
1000
)
};
};
wsNotify
.
onmessage
=
function
(
event
)
{
wsNotify
.
onmessage
=
function
(
event
)
{
...
@@ -37,9 +43,11 @@ wsNotify.onmessage = function (event) {
...
@@ -37,9 +43,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
);
};
};
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
);
};
};
frontend/src/views/system/monitor.vue
View file @
c739dee8
...
@@ -246,33 +246,8 @@ export default {
...
@@ -246,33 +246,8 @@ export default {
};
};
},
},
methods
:
{
methods
:
{
initWebSocket
()
{
if
(
"
WebSocket
"
in
window
)
{
this
.
socket
=
new
WebSocket
(
`ws://
${
window
.
location
.
hostname
}
:3000/ws/v1/notify`
);
this
.
socket
.
onopen
=
()
=>
{
console
.
log
(
"
连接成功
"
);
this
.
sendMsg
();
};
this
.
socket
.
onmessage
=
(
evt
)
=>
{
var
message
=
evt
.
data
;
message
=
JSON
.
parse
(
message
);
console
.
log
(
message
);
this
.
handleMessage
(
message
);
};
this
.
socket
.
onclose
=
function
(
res
)
{
console
.
log
(
"
断开了连接
"
,
res
);
};
this
.
socket
.
onerror
=
function
(
err
)
{
console
.
log
(
err
);
};
}
else
{
console
.
log
(
"
浏览器不支持WebSocket
"
);
}
},
sendMsg
()
{
sendMsg
()
{
var
message
=
"
hello,world
"
;
let
message
=
JSON
.
stringify
({
type
:
"
auth
"
,
token
:
this
.
$store
.
getters
.
token
})
;
this
.
socket
.
send
(
message
);
this
.
socket
.
send
(
message
);
},
},
handleMessage
(
msg
)
{
handleMessage
(
msg
)
{
...
@@ -311,7 +286,7 @@ export default {
...
@@ -311,7 +286,7 @@ export default {
this
.
image
.
forEach
((
img
)
=>
{
this
.
image
.
forEach
((
img
)
=>
{
uris
.
push
(
img
.
uri
)
uris
.
push
(
img
.
uri
)
});
});
msg
.
image
.
forEach
((
item
)
=>
{
msg
.
image
&&
msg
.
image
.
forEach
((
item
)
=>
{
if
(
!
uris
.
includes
(
item
.
uri
))
{
if
(
!
uris
.
includes
(
item
.
uri
))
{
this
.
image
.
push
(
item
)
this
.
image
.
push
(
item
)
}
}
...
@@ -344,7 +319,6 @@ export default {
...
@@ -344,7 +319,6 @@ export default {
this
.
handleMessage
(
message
);
this
.
handleMessage
(
message
);
});
});
});
});
// this.initWebSocket();
},
},
};
};
</
script
>
</
script
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment