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
f778c0b8
Commit
f778c0b8
authored
Jul 03, 2021
by
wanli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
c8ebc791
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
147 additions
and
708 deletions
+147
-708
README.md
README.md
+14
-0
backend/app/signal_manager.py
backend/app/signal_manager.py
+2
-15
backend/controller/__init__.py
backend/controller/__init__.py
+2
-9
backend/controller/annex_manager.py
backend/controller/annex_manager.py
+0
-124
backend/controller/app_logs_manager.py
backend/controller/app_logs_manager.py
+1
-6
backend/controller/apps_manager.py
backend/controller/apps_manager.py
+2
-2
backend/controller/build_logs_manager.py
backend/controller/build_logs_manager.py
+1
-7
backend/controller/device_manager.py
backend/controller/device_manager.py
+1
-6
backend/controller/dictionary_manager.py
backend/controller/dictionary_manager.py
+1
-6
backend/controller/download_manager.py
backend/controller/download_manager.py
+4
-11
backend/controller/login_logs_manager.py
backend/controller/login_logs_manager.py
+1
-6
backend/controller/login_manager.py
backend/controller/login_manager.py
+1
-7
backend/controller/netdisc_manager.py
backend/controller/netdisc_manager.py
+0
-140
backend/controller/role_manager.py
backend/controller/role_manager.py
+0
-114
backend/controller/upload_manager.py
backend/controller/upload_manager.py
+1
-13
backend/controller/user_manager.py
backend/controller/user_manager.py
+9
-7
backend/fullstack/login/auth.py
backend/fullstack/login/auth.py
+3
-6
backend/model/device.py
backend/model/device.py
+2
-2
backend/model/monitor.py
backend/model/monitor.py
+18
-6
backend/model/netdisc.py
backend/model/netdisc.py
+0
-30
backend/view/__init__.py
backend/view/__init__.py
+1
-3
backend/view/annex.py
backend/view/annex.py
+0
-101
backend/view/monitor.py
backend/view/monitor.py
+57
-2
backend/view/ws.py
backend/view/ws.py
+3
-3
frontend/src/api/index.js
frontend/src/api/index.js
+0
-31
frontend/src/utils/eventBus.js
frontend/src/utils/eventBus.js
+1
-1
frontend/src/views/system/chart.vue
frontend/src/views/system/chart.vue
+13
-6
frontend/src/views/system/components/EvmChart.vue
frontend/src/views/system/components/EvmChart.vue
+5
-39
frontend/src/views/system/history.vue
frontend/src/views/system/history.vue
+2
-2
frontend/vue.config.js
frontend/vue.config.js
+2
-3
No files found.
README.md
View file @
f778c0b8
<!--
*
@Author: your name
*
@Date: 2021-04-14 14:12:18
*
@LastEditTime: 2021-07-03 11:33:36
*
@LastEditors: Please set LastEditors
*
@Description: In User Settings Edit
*
@FilePath:
\e
vm-store
\R
EADME.md
-->
# evm-store
# evm-store
EVM应用商店
EVM应用商店
...
@@ -25,3 +33,9 @@ pip3 install -r requirements.txt
...
@@ -25,3 +33,9 @@ pip3 install -r requirements.txt
```
```
pip freeze > requirements.txt
pip freeze > requirements.txt
```
```
# 应用商店
# 运营平台用户前端
> https://appstore.huawei.com/
backend/app/signal_manager.py
View file @
f778c0b8
'''
'''
Author: your name
Author: your name
Date: 2021-04-14 14:12:18
Date: 2021-04-14 14:12:18
LastEditTime: 2021-0
6-22 12:40:5
3
LastEditTime: 2021-0
7-03 11:53:4
3
LastEditors: Please set LastEditors
LastEditors: Please set LastEditors
Description: In User Settings Edit
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\a
pp
\
signal_manager.py
FilePath:
\
evm-store
\b
ackend
\a
pp
\
signal_manager.py
...
@@ -39,19 +39,13 @@ class SignalManager(object):
...
@@ -39,19 +39,13 @@ class SignalManager(object):
actionDeleteBuildLog
=
PySignal
()
actionDeleteBuildLog
=
PySignal
()
# 用户模块
# 用户模块
actionCheckUser
=
PySignal
()
actionAddUser
=
PySignal
()
actionAddUser
=
PySignal
()
actionDeleteUser
=
PySignal
()
actionDeleteUser
=
PySignal
()
actionGetUser
=
PySignal
()
actionGetUser
=
PySignal
()
actionGetUserList
=
PySignal
()
actionGetUserList
=
PySignal
()
actionUpdateUser
=
PySignal
()
actionUpdateUser
=
PySignal
()
# 文件附件模块
actionAddAnnex
=
PySignal
()
actionDeleteAnnex
=
PySignal
()
actionGetAnnex
=
PySignal
()
actionGetAnnexList
=
PySignal
()
actionUpdateAnnex
=
PySignal
()
# 系统框架模块
# 系统框架模块
actionAddDevice
=
PySignal
()
actionAddDevice
=
PySignal
()
actionDeleteDevice
=
PySignal
()
actionDeleteDevice
=
PySignal
()
...
@@ -80,13 +74,6 @@ class SignalManager(object):
...
@@ -80,13 +74,6 @@ class SignalManager(object):
actionGetLoginLogsList
=
PySignal
()
actionGetLoginLogsList
=
PySignal
()
actionUpdateLoginLogs
=
PySignal
()
actionUpdateLoginLogs
=
PySignal
()
# 系统菜单
actionAddMenu
=
PySignal
()
actionDeleteMenu
=
PySignal
()
actionGetMenu
=
PySignal
()
actionGetMenuList
=
PySignal
()
actionUpdateMenu
=
PySignal
()
def
__init__
(
self
):
def
__init__
(
self
):
super
(
SignalManager
,
self
)
.
__init__
()
super
(
SignalManager
,
self
)
.
__init__
()
...
...
backend/controller/__init__.py
View file @
f778c0b8
'''
'''
Author: your name
Author: your name
Date: 2021-04-14 14:12:18
Date: 2021-04-14 14:12:18
LastEditTime: 2021-0
6-29 19:55:00
LastEditTime: 2021-0
7-03 11:53:04
LastEditors: Please set LastEditors
LastEditors: Please set LastEditors
Description: In User Settings Edit
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\
controller
\
__init__.py
FilePath:
\
evm-store
\b
ackend
\
controller
\
__init__.py
...
@@ -14,7 +14,6 @@ from app import signalManager
...
@@ -14,7 +14,6 @@ from app import signalManager
from
.api_manager
import
apiManager
from
.api_manager
import
apiManager
from
.user_manager
import
userManager
from
.user_manager
import
userManager
from
.login_manager
import
loginManager
from
.login_manager
import
loginManager
from
.annex_manager
import
annexManager
from
.apps_manager
import
appsManager
from
.apps_manager
import
appsManager
from
.device_manager
import
deviceManager
from
.device_manager
import
deviceManager
from
.download_manager
import
downloadManager
from
.download_manager
import
downloadManager
...
@@ -65,19 +64,13 @@ def initConnect():
...
@@ -65,19 +64,13 @@ def initConnect():
signalManager
.
actionUpdateLoginLogs
.
connect
(
loginLogsManager
.
update
)
signalManager
.
actionUpdateLoginLogs
.
connect
(
loginLogsManager
.
update
)
# 用户模块
# 用户模块
signalManager
.
actionCheckUser
.
connect
(
userManager
.
check
)
signalManager
.
actionAddUser
.
connect
(
userManager
.
add
)
signalManager
.
actionAddUser
.
connect
(
userManager
.
add
)
signalManager
.
actionDeleteUser
.
connect
(
userManager
.
delete
)
signalManager
.
actionDeleteUser
.
connect
(
userManager
.
delete
)
signalManager
.
actionGetUser
.
connect
(
userManager
.
get
)
signalManager
.
actionGetUser
.
connect
(
userManager
.
get
)
signalManager
.
actionGetUserList
.
connect
(
userManager
.
getList
)
signalManager
.
actionGetUserList
.
connect
(
userManager
.
getList
)
signalManager
.
actionUpdateUser
.
connect
(
userManager
.
update
)
signalManager
.
actionUpdateUser
.
connect
(
userManager
.
update
)
# 文件附件模块
signalManager
.
actionAddAnnex
.
connect
(
annexManager
.
add
)
signalManager
.
actionDeleteAnnex
.
connect
(
annexManager
.
delete
)
signalManager
.
actionGetAnnex
.
connect
(
annexManager
.
get
)
signalManager
.
actionGetAnnexList
.
connect
(
annexManager
.
getList
)
signalManager
.
actionUpdateAnnex
.
connect
(
annexManager
.
update
)
# 应用下载统计模块
# 应用下载统计模块
signalManager
.
actionAddDownload
.
connect
(
downloadManager
.
add
)
signalManager
.
actionAddDownload
.
connect
(
downloadManager
.
add
)
signalManager
.
actionDeleteDownload
.
connect
(
downloadManager
.
delete
)
signalManager
.
actionDeleteDownload
.
connect
(
downloadManager
.
delete
)
...
...
backend/controller/annex_manager.py
deleted
100644 → 0
View file @
c8ebc791
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import
copy
import
time
import
types
import
json
import
logging
import
traceback
from
datetime
import
datetime
from
pony.orm
import
*
from
flask
import
request
from
model
import
fullStackDB
from
model.annex
import
Annex
from
model.user
import
User
from
utils
import
sql_filter
logger
=
logging
.
getLogger
(
"AnnexManager"
)
class
AnnexManager
(
object
):
def
__init__
(
self
):
super
(
AnnexManager
,
self
)
.
__init__
()
def
add
(
self
,
data
):
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
if
data
.
get
(
"flow"
):
flow
=
Flow
.
get
(
uuid
=
data
.
get
(
"flow"
))
if
not
flow
:
return
False
,
"flow does not exists."
data
.
update
({
"flow"
:
flow
})
elif
data
.
get
(
"project"
):
project
=
Project
.
get
(
uuid
=
data
.
get
(
"project"
))
if
not
project
:
return
False
,
"project does not exists."
data
.
update
({
"project"
:
project
})
data
.
update
({
'title'
:
data
.
get
(
"title"
),
'path'
:
data
.
get
(
"path"
),
'size'
:
data
.
get
(
"size"
),
'create_by'
:
editor
,
'create_at'
:
datetime
.
now
(),
'update_by'
:
editor
,
'update_at'
:
datetime
.
now
(),
})
result
=
fullStackDB
.
add
(
Annex
,
**
data
)
return
result
,
"add annex {}."
.
format
(
"success"
if
result
else
"fail"
)
def
delete
(
self
,
uuid
):
result
=
False
with
db_session
:
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
result
=
Annex
.
get
(
uuid
=
uuid
)
if
result
:
if
result
.
project
:
count
=
Annex
.
select
(
project
=
result
.
project
,
remarks
=
result
.
remarks
,
is_delete
=
False
)
.
count
()
if
count
==
1
:
project
=
Project
.
get
(
id
=
result
.
project
.
id
)
if
project
:
condition
=
dict
()
if
result
.
remarks
==
"bidding"
:
# 中标通知书
condition
.
update
({
"is_bidding"
:
False
})
elif
result
.
remarks
==
"acceptance"
:
# 验收表
condition
.
update
({
"is_acceptance"
:
False
})
elif
result
.
remarks
==
"evaluation"
:
# 评价表
condition
.
update
({
"is_evaluation"
:
False
})
elif
result
.
remarks
==
"contract"
:
# 合同
condition
.
update
({
"is_contract"
:
False
})
project
.
extend1
.
get
(
"uploads"
)
.
update
({
result
.
remarks
:
False
})
project
.
set
(
extend1
=
project
.
extend1
,
**
condition
)
result
.
set
(
is_delete
=
True
,
delete_at
=
datetime
.
now
(),
delete_by
=
editor
)
commit
()
result
=
True
return
result
,
"delete annex {}."
.
format
(
"success"
if
result
else
"fail"
)
def
get
(
self
,
data
):
result
=
Annex
.
get
(
**
data
)
if
result
:
result
=
result
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"title"
,
"create_at"
,
"update_at"
,
"delete_at"
])
return
result
,
"get annex {}."
.
format
(
"success"
if
result
else
"fail"
)
def
getList
(
self
,
data
):
if
not
data
or
len
(
data
)
<=
0
:
return
False
,
0
,
"parameters can not be null."
result
=
Annex
.
select
()
.
where
(
is_delete
=
False
,
**
data
)
if
len
(
result
):
temp
=
[]
for
item
in
result
:
# t = item.to_dict(with_collections=True, only=["uuid", "title", "project", "path", "remarks"])
# temp.append(t)
temp
.
append
({
"uuid"
:
item
.
uuid
,
"name"
:
item
.
title
,
"project"
:
item
.
project
.
id
,
"url"
:
item
.
path
,
"type"
:
item
.
remarks
})
result
=
temp
return
result
,
len
(
result
),
"get annex {}."
.
format
(
"success"
if
result
else
"no data"
)
def
update
(
self
,
uuid
,
data
):
# 当参数为空时,直接返回错误
if
len
(
data
)
<=
0
or
(
len
(
data
.
keys
())
==
1
and
"id"
in
data
):
return
False
,
"parameters can not be null."
# 查询请求者是否存在
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
result
=
fullStackDB
.
update
(
Annex
,
{
'uuid'
:
uuid
},
update_at
=
datetime
.
now
(),
update_by
=
editor
,
**
data
)
return
result
,
"update annex {}."
.
format
(
"success"
if
result
else
"fail"
)
annexManager
=
AnnexManager
()
backend/controller/app_logs_manager.py
View file @
f778c0b8
...
@@ -2,19 +2,14 @@
...
@@ -2,19 +2,14 @@
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
copy
import
copy
import
time
import
types
import
json
import
logging
import
logging
import
traceback
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
model
import
fullStackDB
from
model
import
fullStackDB
from
model.app_logs
import
AppLogs
from
model.app_logs
import
AppLogs
from
model.user
import
User
from
model.user
import
User
from
utils
import
sql_filter
logger
=
logging
.
getLogger
(
"AppLogsManager"
)
logger
=
logging
.
getLogger
(
__name__
)
class
AppLogsManager
(
object
):
class
AppLogsManager
(
object
):
def
__init__
(
self
):
def
__init__
(
self
):
...
...
backend/controller/apps_manager.py
View file @
f778c0b8
...
@@ -17,10 +17,10 @@ from model.apps import Apps
...
@@ -17,10 +17,10 @@ from model.apps import Apps
from
model.user
import
User
from
model.user
import
User
from
model.app_logs
import
AppLogs
from
model.app_logs
import
AppLogs
from
model.build_logs
import
BuildLogs
from
model.build_logs
import
BuildLogs
from
utils
import
sql_filter
,
ThreadMaker
from
utils
import
ThreadMaker
from
utils.epk
import
EpkApp
from
utils.epk
import
EpkApp
logger
=
logging
.
getLogger
(
"AppsManager"
)
logger
=
logging
.
getLogger
(
__name__
)
@
ThreadMaker
@
ThreadMaker
def
build_application
(
user
,
uuid
):
def
build_application
(
user
,
uuid
):
...
...
backend/controller/build_logs_manager.py
View file @
f778c0b8
...
@@ -4,13 +4,8 @@
...
@@ -4,13 +4,8 @@
import
os
import
os
import
re
import
re
import
copy
import
copy
import
time
import
types
import
json
import
shutil
import
shutil
import
logging
import
logging
import
traceback
from
urllib.parse
import
urlparse
,
urljoin
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
app.setting
import
config
from
app.setting
import
config
...
@@ -20,10 +15,9 @@ from model.annex import Annex
...
@@ -20,10 +15,9 @@ from model.annex import Annex
from
model.app_logs
import
AppLogs
from
model.app_logs
import
AppLogs
from
model.build_logs
import
BuildLogs
from
model.build_logs
import
BuildLogs
from
model.user
import
User
from
model.user
import
User
from
utils
import
sql_filter
from
utils.epk
import
EpkApp
from
utils.epk
import
EpkApp
logger
=
logging
.
getLogger
(
"BuildLogsManager"
)
logger
=
logging
.
getLogger
(
__name__
)
class
BuildLogsManager
(
object
):
class
BuildLogsManager
(
object
):
def
__init__
(
self
):
def
__init__
(
self
):
...
...
backend/controller/device_manager.py
View file @
f778c0b8
...
@@ -2,19 +2,14 @@
...
@@ -2,19 +2,14 @@
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
copy
import
copy
import
time
import
types
import
json
import
logging
import
logging
import
traceback
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
model
import
fullStackDB
from
model
import
fullStackDB
from
model.device
import
Device
from
model.device
import
Device
from
model.user
import
User
from
model.user
import
User
from
utils
import
sql_filter
logger
=
logging
.
getLogger
(
"DeviceManager"
)
logger
=
logging
.
getLogger
(
__name__
)
class
DeviceManager
(
object
):
class
DeviceManager
(
object
):
def
__init__
(
self
):
def
__init__
(
self
):
...
...
backend/controller/dictionary_manager.py
View file @
f778c0b8
...
@@ -2,20 +2,15 @@
...
@@ -2,20 +2,15 @@
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
copy
import
copy
import
time
import
types
import
json
import
logging
import
logging
import
traceback
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
select
,
desc
from
pony.orm
import
select
,
desc
from
flask
import
request
from
flask
import
request
from
model
import
fullStackDB
from
model
import
fullStackDB
from
model.dictionary
import
Dict
from
model.dictionary
import
Dict
from
model.user
import
User
from
model.user
import
User
from
utils
import
sql_filter
logger
=
logging
.
getLogger
(
"DictManager"
)
logger
=
logging
.
getLogger
(
__name__
)
class
DictManager
(
object
):
class
DictManager
(
object
):
def
__init__
(
self
):
def
__init__
(
self
):
...
...
backend/controller/download_manager.py
View file @
f778c0b8
...
@@ -2,30 +2,23 @@
...
@@ -2,30 +2,23 @@
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
os
import
os
import
re
import
copy
import
copy
import
time
import
types
import
json
import
json
import
logging
import
logging
import
traceback
import
shutil
from
collections
import
OrderedDict
import
urllib
import
urllib
from
urllib
import
parse
,
request
from
urllib
import
parse
,
request
from
urllib.parse
import
urlparse
,
urljoin
,
urlencode
from
urllib.parse
import
urlparse
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
flask
import
request
as
flask_request
from
flask
import
request
as
flask_request
from
app.setting
import
config
,
conf
from
app.setting
import
config
from
model
import
fullStackDB
from
model.download
import
AppDownload
from
model.download
import
AppDownload
from
model.device
import
Device
from
model.device
import
Device
from
model.apps
import
Apps
from
model.apps
import
Apps
from
model.user
import
User
from
model.user
import
User
from
utils
import
sql_filter
,
ThreadMaker
from
utils
import
ThreadMaker
logger
=
logging
.
getLogger
(
"DownloadManager"
)
logger
=
logging
.
getLogger
(
__name__
)
@
ThreadMaker
@
ThreadMaker
def
update_download_information
(
ip
,
id
):
def
update_download_information
(
ip
,
id
):
...
...
backend/controller/login_logs_manager.py
View file @
f778c0b8
...
@@ -2,19 +2,14 @@
...
@@ -2,19 +2,14 @@
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
copy
import
copy
import
time
import
types
import
json
import
logging
import
logging
import
traceback
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
model
import
fullStackDB
from
model
import
fullStackDB
from
model.login_logs
import
LoginLogs
from
model.login_logs
import
LoginLogs
from
model.user
import
User
from
model.user
import
User
from
utils
import
sql_filter
logger
=
logging
.
getLogger
(
"LoginLogsManager"
)
logger
=
logging
.
getLogger
(
__name__
)
class
LoginLogsManager
(
object
):
class
LoginLogsManager
(
object
):
def
__init__
(
self
):
def
__init__
(
self
):
...
...
backend/controller/login_manager.py
View file @
f778c0b8
#!/usr/bin/env python
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
copy
import
time
import
types
import
json
import
json
import
logging
import
logging
import
traceback
import
urllib
import
urllib
from
urllib
import
parse
,
request
from
urllib
import
parse
,
request
from
urllib.parse
import
urlparse
,
urljoin
,
urlencode
from
datetime
import
datetime
from
datetime
import
datetime
from
threading
import
Thread
from
threading
import
Thread
from
werkzeug.security
import
check_password_hash
from
werkzeug.security
import
check_password_hash
from
flask
import
request
as
flask_request
from
flask
import
request
as
flask_request
from
pony.orm
import
*
from
pony.orm
import
*
from
model
import
fullStackDB
from
model.user
import
User
from
model.user
import
User
from
model.login_logs
import
LoginLogs
from
model.login_logs
import
LoginLogs
from
fullstack.login
import
Auth
from
fullstack.login
import
Auth
from
fullstack.response
import
ResponseCode
from
fullstack.response
import
ResponseCode
from
utils
import
md5_salt
,
ThreadMaker
from
utils
import
md5_salt
,
ThreadMaker
logger
=
logging
.
getLogger
(
"LoginManager"
)
logger
=
logging
.
getLogger
(
__name__
)
@
ThreadMaker
@
ThreadMaker
def
update_login_information
(
ip
,
user_id
):
def
update_login_information
(
ip
,
user_id
):
...
...
backend/controller/netdisc_manager.py
deleted
100644 → 0
View file @
c8ebc791
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import
os
import
copy
import
time
import
types
import
json
import
logging
import
traceback
from
datetime
import
datetime
from
pony.orm
import
*
from
flask
import
request
from
model
import
fullStackDB
from
model.netdisc
import
Netdisc
from
model.user
import
User
from
app.setting
import
config
logger
=
logging
.
getLogger
(
"NetDiscManager"
)
class
NetDiscManager
(
object
):
def
__init__
(
self
):
super
(
NetDiscManager
,
self
)
.
__init__
()
def
add
(
self
,
data
):
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
data
.
update
({
'create_by'
:
editor
,
'create_at'
:
datetime
.
now
(),
'update_by'
:
editor
,
'update_at'
:
datetime
.
now
(),
})
result
=
fullStackDB
.
add
(
Netdisc
,
**
data
)
return
result
,
"add netdisc {}."
.
format
(
"success"
if
result
else
"fail"
)
def
delete
(
self
,
data
):
# 通过uuid查询出所有的文件列表,然后全部删除
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
count
=
0
result
=
[]
with
db_session
:
for
uuid
in
data
.
get
(
"uuids"
):
nd
=
Netdisc
.
get
(
uuid
=
uuid
)
if
nd
:
# nd.is_delete = True
# nd.delete_at = datetime.now()
# nd.delete_by = editor
nd
.
set
(
is_delete
=
True
,
delete_at
=
datetime
.
now
(),
delete_by
=
editor
)
count
=
count
+
1
result
.
append
([
nd
.
is_dir
,
nd
.
real_path
])
commit
()
return
result
,
"delete {} netdisc {}."
.
format
(
count
,
"success"
if
result
else
"fail"
)
def
get
(
self
,
data
):
result
=
Netdisc
.
get
(
**
data
)
if
result
:
result
=
result
.
to_dict
(
only
=
[
"uuid"
,
"name"
,
"real_path"
])
return
result
,
"get netdisc {}."
.
format
(
"success"
if
result
else
"no data"
)
def
getList
(
self
,
data
):
data
.
update
({
"is_delete"
:
False
})
count
=
0
result
=
[]
with
db_session
:
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
if
editor
.
role
.
name
!=
"超级管理员"
:
data
.
update
({
"create_by"
:
editor
})
result
=
Netdisc
.
select
()
.
where
(
**
data
)
.
order_by
(
Netdisc
.
name
)
count
=
len
(
result
)
files
=
[]
folders
=
[]
for
item
in
result
:
t
=
item
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"name"
,
"size"
,
"is_dir"
,
"parent_dir"
,
"file_type"
,
"create_at"
,
"update_at"
])
if
item
.
is_dir
:
t
.
update
({
"is_dir"
:
1
if
item
.
is_dir
else
0
,
"real_path"
:
os
.
path
.
relpath
(
item
.
real_path
,
config
.
get
(
"UPLOAD_PATH"
))
.
replace
(
'
\\
'
,
'/'
),
"create_by"
:
item
.
create_by
.
to_dict
(
only
=
[
"uuid"
,
"username"
]),
"update_by"
:
item
.
update_by
.
to_dict
(
only
=
[
"uuid"
,
"username"
]),
"create_at"
:
item
.
create_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
),
"update_at"
:
item
.
update_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
})
folders
.
append
(
t
)
else
:
t
.
update
({
"is_dir"
:
1
if
item
.
is_dir
else
0
,
"real_path"
:
os
.
path
.
relpath
(
item
.
real_path
,
config
.
get
(
"UPLOAD_PATH"
))
.
replace
(
'
\\
'
,
'/'
),
"create_by"
:
item
.
create_by
.
to_dict
(
only
=
[
"uuid"
,
"username"
]),
"update_by"
:
item
.
update_by
.
to_dict
(
only
=
[
"uuid"
,
"username"
]),
"create_at"
:
item
.
create_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
),
"update_at"
:
item
.
update_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
})
files
.
append
(
t
)
result
=
folders
+
files
return
result
,
count
,
"get netdisc {}."
.
format
(
"success"
if
result
else
"no data"
)
def
update
(
self
,
uuid
,
data
):
# 当参数为空时,直接返回错误
if
len
(
data
)
<=
0
or
(
len
(
data
.
keys
())
==
1
and
"id"
in
data
):
return
False
,
"parameters can not be null."
result
=
None
with
db_session
:
# 查询请求者是否存在
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
result
=
Netdisc
.
get
(
uuid
=
uuid
)
if
result
:
_real
=
result
.
real_path
result
.
set
(
update_at
=
datetime
.
now
(),
update_by
=
editor
,
**
data
)
commit
()
_ext
=
os
.
path
.
splitext
(
result
.
real_path
)[
-
1
]
_dir
=
os
.
path
.
dirname
(
result
.
real_path
)
filename
=
data
.
get
(
"name"
)
+
_ext
data
.
update
({
"real_path"
:
os
.
path
.
normpath
(
os
.
sep
.
join
([
_dir
,
filename
]))
})
result
=
{
"src"
:
_real
,
"dst"
:
data
.
get
(
"real_path"
)
}
return
result
,
"update netdisc {}."
.
format
(
"success"
if
result
else
"fail"
)
netDiscManager
=
NetDiscManager
()
backend/controller/role_manager.py
deleted
100644 → 0
View file @
c8ebc791
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import
copy
import
time
import
types
import
json
import
logging
import
traceback
from
datetime
import
datetime
from
pony.orm
import
*
from
flask
import
request
from
model
import
fullStackDB
from
model.depot
import
Depot
from
model.role
import
Role
from
model.user
import
User
from
utils
import
sql_filter
logger
=
logging
.
getLogger
(
"RoleManager"
)
class
RoleManager
(
object
):
def
__init__
(
self
):
super
(
RoleManager
,
self
)
.
__init__
()
def
add
(
self
,
data
):
# 判断角色名是否存在
result
=
Role
.
get
(
name
=
data
.
get
(
"name"
))
if
result
:
return
False
,
"role name has been exists."
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
data
.
update
({
'create_by'
:
editor
,
'create_at'
:
datetime
.
now
(),
'update_by'
:
editor
,
'update_at'
:
datetime
.
now
(),
})
result
=
fullStackDB
.
add
(
Role
,
**
data
)
return
result
,
"add role {}."
.
format
(
"success"
if
result
else
"fail"
)
def
delete
(
self
,
uuid
):
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
result
=
fullStackDB
.
update
(
Role
,
{
'uuid'
:
uuid
},
is_delete
=
True
,
delete_at
=
datetime
.
now
(),
delete_by
=
editor
)
return
result
,
"delete role {}."
.
format
(
"success"
if
result
else
"fail"
)
def
get
(
self
,
data
):
result
=
Role
.
get
(
**
data
)
if
result
:
result
=
result
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"name"
,
"create_at"
,
"update_at"
,
"delete_at"
])
return
result
,
"get role {}."
.
format
(
"success"
if
result
else
"fail"
)
def
getList
(
self
,
data
):
if
not
data
or
len
(
data
)
<=
0
:
return
False
,
0
,
"parameters can not be null."
temp
=
copy
.
deepcopy
(
data
)
if
'pagenum'
in
temp
:
temp
.
pop
(
'pagenum'
)
if
'pagesize'
in
temp
:
temp
.
pop
(
'pagesize'
)
if
'scope_type'
in
temp
:
temp
.
pop
(
'scope_type'
)
temp
.
setdefault
(
"is_delete"
,
False
)
if
"scope_type"
in
data
and
data
.
get
(
"scope_type"
)
==
"list"
:
result
=
Role
.
select
()
.
where
(
**
temp
)
.
order_by
(
desc
(
Role
.
create_at
))
temp
=
[]
for
item
in
result
:
temp
.
append
(
item
.
to_dict
(
only
=
[
"uuid"
,
"name"
]))
return
temp
,
len
(
temp
),
"get select {}."
.
format
(
"success"
if
temp
else
"no data"
)
result
=
fullStackDB
.
pagination
(
Role
,
Role
.
create_at
,
pagenum
=
data
.
get
(
"pagenum"
,
1
),
pagesize
=
data
.
get
(
"pagesize"
,
10
),
**
temp
)
count
=
fullStackDB
.
count
(
Role
,
**
temp
)
if
result
and
len
(
result
):
temp
=
[]
for
item
in
result
:
t
=
item
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"name"
,
"permission"
,
"is_system"
,
"create_by"
,
"update_by"
])
t
.
update
({
"create_at"
:
item
.
create_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
})
t
.
update
({
"update_at"
:
item
.
update_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
})
t
.
update
({
"create_by"
:
item
.
create_by
.
to_dict
(
only
=
[
"uuid"
,
"username"
])
})
t
.
update
({
"update_by"
:
item
.
update_by
.
to_dict
(
only
=
[
"uuid"
,
"username"
])
})
temp
.
append
(
t
)
result
=
temp
return
result
,
count
,
"get role {}."
.
format
(
"success"
if
result
else
"no data"
)
def
update
(
self
,
uuid
,
data
):
# 当参数为空时,直接返回错误
if
len
(
data
)
<=
0
or
(
len
(
data
.
keys
())
==
1
and
"id"
in
data
):
return
False
,
"parameters can not be null."
# 查询请求者是否存在
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
return
False
,
"current user is not exists"
result
=
None
with
db_session
:
result
=
Role
.
get
(
uuid
=
uuid
)
if
result
:
result
.
set
(
update_at
=
datetime
.
now
(),
update_by
=
editor
,
**
data
)
commit
()
# result = fullStackDB.update(Role, { 'uuid': uuid }, update_at=datetime.now(), update_by=editor, **data)
return
result
,
"update role {}."
.
format
(
"success"
if
result
else
"fail"
)
roleManager
=
RoleManager
()
backend/controller/upload_manager.py
View file @
f778c0b8
...
@@ -2,27 +2,15 @@
...
@@ -2,27 +2,15 @@
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
os
import
os
import
sys
import
copy
import
time
import
types
import
json
import
json
import
logging
import
logging
import
traceback
import
traceback
import
re
import
tempfile
import
tempfile
import
shutil
import
base64
import
base64
import
uuid
from
hashlib
import
md5
as
fmd5
from
hashlib
import
md5
as
fmd5
from
urllib
import
parse
from
datetime
import
datetime
from
threading
import
Thread
from
werkzeug.security
import
check_password_hash
from
werkzeug.security
import
check_password_hash
from
app.setting
import
config
from
utils
import
md5_salt
,
random_string
logger
=
logging
.
getLogger
(
"UploadManager"
)
logger
=
logging
.
getLogger
(
__name__
)
FileStoragePath
=
os
.
getcwd
()
FileStoragePath
=
os
.
getcwd
()
...
...
backend/controller/user_manager.py
View file @
f778c0b8
#!/usr/bin/env python
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
time
import
json
import
logging
import
logging
import
traceback
import
copy
import
copy
import
uuid
from
datetime
import
datetime
from
datetime
import
datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
flask
import
request
from
flask
import
request
from
app.setting
import
config
from
model
import
fullStackDB
from
model
import
fullStackDB
from
model.user
import
User
from
model.user
import
User
from
utils
import
md5_salt
,
filter_dict
,
sql_filter
from
utils
import
md5_salt
logger
=
logging
.
getLogger
(
"UserManager"
)
logger
=
logging
.
getLogger
(
__name__
)
class
UserManager
(
object
):
class
UserManager
(
object
):
'''
'''
...
@@ -25,6 +20,13 @@ class UserManager(object):
...
@@ -25,6 +20,13 @@ class UserManager(object):
def
__init__
(
self
):
def
__init__
(
self
):
super
(
UserManager
,
self
)
.
__init__
()
super
(
UserManager
,
self
)
.
__init__
()
def
check
(
self
,
data
):
with
db_session
:
user
=
User
.
get
(
uuid
=
data
.
get
(
"uuid"
))
if
not
user
:
return
False
return
True
def
add
(
self
,
data
):
def
add
(
self
,
data
):
'''
'''
添加用户
添加用户
...
...
backend/fullstack/login/auth.py
View file @
f778c0b8
#!/usr/bin/env python
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
sys
import
re
import
logging
import
logging
import
traceback
import
traceback
import
time
from
datetime
import
datetime
,
timedelta
from
datetime
import
datetime
,
timedelta
,
timezone
from
functools
import
wraps
from
functools
import
wraps
import
jwt
import
jwt
from
flask
import
jsonify
,
current_app
,
request
from
flask
import
current_app
,
request
logger
=
logging
.
getLogger
(
"auth"
)
logger
=
logging
.
getLogger
(
__name__
)
class
Auth
(
object
):
class
Auth
(
object
):
...
...
backend/model/device.py
View file @
f778c0b8
'''
'''
Author: your name
Author: your name
Date: 2021-04-14 14:12:18
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 1
7:54:11
LastEditTime: 2021-07-01 1
8:24:18
LastEditors:
your name
LastEditors:
Please set LastEditors
Description: In User Settings Edit
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\
model
\
device.py
FilePath:
\
evm-store
\b
ackend
\
model
\
device.py
'''
'''
...
...
backend/model/monitor.py
View file @
f778c0b8
'''
'''
Author: your name
Author: your name
Date: 2021-04-14 14:12:18
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 1
7:55:08
LastEditTime: 2021-07-01 1
8:26:25
LastEditors: Please set LastEditors
LastEditors: Please set LastEditors
Description: In User Settings Edit
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\
model
\
monitor.py
FilePath:
\
evm-store
\b
ackend
\
model
\
monitor.py
...
@@ -10,10 +10,11 @@ FilePath: \evm-store\backend\model\monitor.py
...
@@ -10,10 +10,11 @@ FilePath: \evm-store\backend\model\monitor.py
# -*- coding: utf_8 -*-
# -*- coding: utf_8 -*-
import
json
import
json
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
from
sqlalchemy
import
func
,
Column
,
Integer
,
String
,
Float
,
DateTime
,
Numeric
,
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
,
object_mapper
...
@@ -137,12 +138,23 @@ class Image(Base):
...
@@ -137,12 +138,23 @@ class Image(Base):
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
Device
(
Base
):
class
Device
(
Base
):
__tablename__
=
'monitor_system'
__tablename__
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"device"
id
=
Column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
id
=
Column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
watch
=
Column
(
Integer
)
# 手表ID
uuid
=
Column
(
String
(
64
),
default
=
uuid
.
uuid1
,
index
=
True
)
free_size
=
Column
(
Integer
)
# 单位:字节
name
=
Column
(
String
)
timestamp
=
Column
(
DateTime
(
timezone
=
True
),
default
=
get_current_datetime
,
server_default
=
func
.
now
(),
onupdate
=
func
.
now
())
imei
=
Column
(
String
)
desc
=
Column
(
String
)
type
=
Column
(
String
)
create_at
=
Column
(
DateTime
(
timezone
=
True
),
default
=
get_current_datetime
,
onupdate
=
func
.
now
())
create_by
=
Column
(
Integer
)
update_at
=
Column
(
DateTime
(
timezone
=
True
),
default
=
get_current_datetime
,
onupdate
=
func
.
now
())
update_by
=
Column
(
Integer
)
delete_at
=
Column
(
DateTime
(
timezone
=
True
),
default
=
get_current_datetime
,
onupdate
=
func
.
now
())
delete_by
=
Column
(
Integer
)
is_delete
=
Column
(
Boolean
,
default
=
False
)
sort
=
Column
(
Integer
)
remarks
=
Column
(
String
)
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
}
...
...
backend/model/netdisc.py
deleted
100644 → 0
View file @
c8ebc791
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import
uuid
from
datetime
import
datetime
from
pony.orm
import
PrimaryKey
,
Required
,
Optional
,
Set
,
LongStr
,
Json
from
app
import
config
from
.
import
fullStackDB
db
=
fullStackDB
.
db
class
Netdisc
(
db
.
Entity
):
_table_
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"netdisc"
id
=
PrimaryKey
(
int
,
auto
=
True
)
uuid
=
Required
(
uuid
.
UUID
,
unique
=
True
,
default
=
uuid
.
uuid1
,
index
=
True
)
name
=
Required
(
str
,
max_len
=
200
)
# 文件名
size
=
Required
(
int
,
default
=
0
)
# 文件大小
file_type
=
Required
(
str
)
# 文件类型
is_dir
=
Required
(
bool
,
default
=
False
)
# 是否是目录
parent_dir
=
Required
(
str
,
default
=
'/'
)
# 上级目录
real_path
=
Required
(
str
)
# 真实路径
create_at
=
Required
(
datetime
,
default
=
datetime
.
now
)
create_by
=
Required
(
"User"
,
reverse
=
'netdisc_creator'
)
# NetDisc与User一对一关系
update_at
=
Required
(
datetime
,
default
=
datetime
.
now
)
update_by
=
Required
(
"User"
,
reverse
=
'netdisc_updater'
)
# NetDisc与User一对一关系
delete_at
=
Optional
(
datetime
)
delete_by
=
Optional
(
"User"
,
reverse
=
'netdisc_deleter'
)
# NetDisc与User一对一关系
is_delete
=
Required
(
bool
,
default
=
False
)
sort
=
Optional
(
int
,
size
=
32
,
default
=
0
)
remarks
=
Optional
(
str
,
max_len
=
255
,
default
=
""
,
nullable
=
True
)
\ No newline at end of file
backend/view/__init__.py
View file @
f778c0b8
'''
'''
Author: your name
Author: your name
Date: 2021-04-14 14:12:18
Date: 2021-04-14 14:12:18
LastEditTime: 2021-0
6-29 19:37:32
LastEditTime: 2021-0
7-03 11:43:10
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
\
__init__.py
FilePath:
\
evm-store
\b
ackend
\v
iew
\
__init__.py
...
@@ -18,7 +18,6 @@ from .api import api
...
@@ -18,7 +18,6 @@ from .api import api
from
.files
import
file_api
from
.files
import
file_api
from
.login
import
login_api
from
.login
import
login_api
from
.user
import
user_api
from
.user
import
user_api
from
.annex
import
annex_api
from
.apps
import
apps_api
from
.apps
import
apps_api
from
.device
import
device_api
from
.device
import
device_api
from
.download
import
download_api
from
.download
import
download_api
...
@@ -48,7 +47,6 @@ def create_app():
...
@@ -48,7 +47,6 @@ def create_app():
app
.
register_blueprint
(
login_api
)
app
.
register_blueprint
(
login_api
)
app
.
register_blueprint
(
file_api
)
app
.
register_blueprint
(
file_api
)
app
.
register_blueprint
(
user_api
)
app
.
register_blueprint
(
user_api
)
app
.
register_blueprint
(
annex_api
)
app
.
register_blueprint
(
apps_api
)
app
.
register_blueprint
(
apps_api
)
app
.
register_blueprint
(
download_api
)
app
.
register_blueprint
(
download_api
)
app
.
register_blueprint
(
device_api
)
app
.
register_blueprint
(
device_api
)
...
...
backend/view/annex.py
deleted
100644 → 0
View file @
c8ebc791
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 14:45:16
LastEditors: your name
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\v
iew
\a
nnex.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import
logging
import
traceback
from
flask
import
Blueprint
,
request
from
app
import
config
,
signalManager
from
fullstack.login
import
Auth
from
fullstack.validation
import
validate_schema
from
fullstack.response
import
ResponseCode
,
response_result
from
schema.annex
import
AddSchema
,
DeleteSchema
,
QuerySchema
,
UpdateSchema
logger
=
logging
.
getLogger
(
__name__
)
annex_api
=
Blueprint
(
"annex_api"
,
__name__
,
url_prefix
=
"/api/v1/
%
s/annex"
%
config
[
'NAME'
])
@
annex_api
.
route
(
"/add"
,
methods
=
[
'POST'
])
@
validate_schema
(
AddSchema
)
@
Auth
.
auth_required
def
add
():
try
:
isSuccess
,
message
=
signalManager
.
actionAddAnnex
.
emit
(
request
.
schema_data
)
if
isSuccess
:
return
response_result
(
ResponseCode
.
OK
,
msg
=
message
)
else
:
return
response_result
(
ResponseCode
.
REQUEST_ERROR
,
msg
=
message
)
except
Exception
as
e
:
traceback
.
print_exc
()
logger
.
error
(
str
(
e
))
return
response_result
(
ResponseCode
.
SERVER_ERROR
,
msg
=
str
(
e
))
@
annex_api
.
route
(
"/delete/<uuid:id>"
,
methods
=
[
'POST'
])
@
validate_schema
(
DeleteSchema
)
@
Auth
.
auth_required
def
delete
(
id
):
try
:
isSuccess
,
message
=
signalManager
.
actionDeleteAnnex
.
emit
(
id
)
if
isSuccess
:
return
response_result
(
ResponseCode
.
OK
,
msg
=
message
)
else
:
return
response_result
(
ResponseCode
.
REQUEST_ERROR
,
msg
=
message
)
except
Exception
as
e
:
traceback
.
print_exc
()
logger
.
error
(
str
(
e
))
return
response_result
(
ResponseCode
.
SERVER_ERROR
)
@
annex_api
.
route
(
"/get"
,
methods
=
[
"POST"
])
@
validate_schema
(
QuerySchema
)
@
Auth
.
auth_required
def
get
():
try
:
result
,
message
=
signalManager
.
actionGetAnnex
.
emit
(
request
.
schema_data
)
if
result
:
return
response_result
(
ResponseCode
.
OK
,
data
=
result
,
msg
=
message
)
else
:
return
response_result
(
ResponseCode
.
REQUEST_ERROR
,
msg
=
message
)
except
Exception
as
e
:
traceback
.
print_exc
()
logger
.
error
(
str
(
e
))
return
response_result
(
ResponseCode
.
SERVER_ERROR
,
msg
=
str
(
e
))
@
annex_api
.
route
(
"/list"
,
methods
=
[
'POST'
])
@
validate_schema
(
QuerySchema
)
@
Auth
.
auth_required
def
get_list
():
try
:
result
,
count
,
message
=
signalManager
.
actionGetAnnexList
.
emit
(
request
.
schema_data
)
if
result
:
return
response_result
(
ResponseCode
.
OK
,
data
=
result
,
msg
=
message
,
count
=
count
)
else
:
return
response_result
(
ResponseCode
.
REQUEST_ERROR
,
msg
=
message
)
except
Exception
as
e
:
traceback
.
print_exc
()
logger
.
error
(
str
(
e
))
return
response_result
(
ResponseCode
.
SERVER_ERROR
)
@
annex_api
.
route
(
"/update/<uuid:id>"
,
methods
=
[
'POST'
])
@
validate_schema
(
UpdateSchema
)
@
Auth
.
auth_required
def
update
(
id
):
try
:
isSuccess
,
message
=
signalManager
.
actionUpdateAnnex
.
emit
(
id
,
request
.
schema_data
)
if
isSuccess
:
return
response_result
(
ResponseCode
.
OK
,
msg
=
message
)
else
:
return
response_result
(
ResponseCode
.
REQUEST_ERROR
,
msg
=
message
)
except
Exception
as
e
:
traceback
.
print_exc
()
logger
.
error
(
str
(
e
))
return
response_result
(
ResponseCode
.
SERVER_ERROR
)
backend/view/monitor.py
View file @
f778c0b8
'''
'''
Author: your name
Author: your name
Date: 2021-06-29 19:33:41
Date: 2021-06-29 19:33:41
LastEditTime: 2021-07-0
1 04:03:21
LastEditTime: 2021-07-0
3 09:33:58
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
...
@@ -16,7 +16,10 @@ import time
...
@@ -16,7 +16,10 @@ import time
import
logging
import
logging
import
pprint
import
pprint
import
traceback
import
traceback
import
jwt
from
threading
import
Timer
from
datetime
import
datetime
,
timedelta
from
datetime
import
datetime
,
timedelta
from
app
import
config
,
signalManager
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__
)
...
@@ -86,8 +89,17 @@ def pushmessage(func):
...
@@ -86,8 +89,17 @@ def pushmessage(func):
return
send
return
send
class
BaseWebsocket
(
WebSocketHandler
):
class
BaseWebsocket
(
WebSocketHandler
):
_clients
=
[]
handlers
=
{}
handlers
=
{}
def
open
(
self
):
def
open
(
self
):
# 新加入一个连接后,设置一个接收消息时间戳
# 同时查询改用可以查看哪些设备
# 当有消息到来时,遍历用户列表,将设备IMEI与每个用户的IMEI列表比对
# 如果用户列表有这个IMEI,则需要向该用户广播消息
# 列表 [里面存放字典]
# 字典 { 'uuid': '', 'context': self, 'devices': ['imei', 'imei'], 'ts': '接收消息时间戳' }
className
=
self
.
__class__
.
__name__
className
=
self
.
__class__
.
__name__
logger
.
warning
(
"websocket of
%
s is opened"
%
className
)
logger
.
warning
(
"websocket of
%
s is opened"
%
className
)
if
className
not
in
self
.
handlers
:
if
className
not
in
self
.
handlers
:
...
@@ -124,13 +136,55 @@ class NotifyHandler(BaseWebsocket):
...
@@ -124,13 +136,55 @@ class NotifyHandler(BaseWebsocket):
"""
"""
建立与web前端的通信连接,发送状态信息报文
建立与web前端的通信连接,发送状态信息报文
"""
"""
_timer
=
None
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__
# 收到心跳包消息,更新接收数据时间
try
:
if
message
.
get
(
"type"
):
if
message
.
get
(
"type"
)
==
"auth"
:
# 获取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"
)
print
(
payload
)
result
=
signalManager
.
actionCheckUser
.
emit
(
message
.
get
(
"uuid"
))
# 判断消息类型
# 认证包,认证不通过,则剔除该连接
# 查询该用户可查看设备
self
.
_clients
.
append
({
'uuid'
:
''
,
'context'
:
self
,
'devices'
:
[],
'ts'
:
int
(
time
.
time
())
})
return
result
elif
message
.
get
(
"type"
)
==
"heartbeat"
:
# 心跳包
for
c
in
self
.
_clients
:
if
c
.
get
(
"uuid"
)
==
message
.
get
(
"uuid"
):
c
[
"ts"
]
=
int
(
time
.
time
())
self
.
write
(
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'update session timestamp success'
}))
break
else
:
self
.
write
(
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'unkonw message packet, disconnect by server'
}))
self
.
handlers
[
className
]
.
remove
(
self
)
except
Exception
as
e
:
self
.
handlers
[
className
]
.
remove
(
self
)
logger
.
error
(
e
)
print
(
"hello,world"
,
message
)
print
(
"hello,world"
,
message
)
logger
.
info
(
message
)
logger
.
info
(
message
)
def
on_heartbeat
(
self
):
# 心跳定时器,固定间隔扫描连接列表,当连接超时,主动剔除该连接
self
.
_timer
=
Timer
(
5
,
self
.
on_heartbeat
)
self
.
_timer
.
start
()
class
MainHandler
(
BaseHandler
):
class
MainHandler
(
BaseHandler
):
def
get
(
self
,
*
args
,
**
kwargs
):
def
get
(
self
,
*
args
,
**
kwargs
):
print
(
"#############"
,
args
)
print
(
"#############"
,
args
)
...
@@ -152,6 +206,7 @@ class MainHandler(BaseHandler):
...
@@ -152,6 +206,7 @@ class MainHandler(BaseHandler):
message
=
{
'imei'
:
'12345678900005'
,
'system'
:
{
'free_size'
:
0
},
'lvgl'
:
{
'total_size'
:
5242880
,
'free_cnt'
:
31
,
'free_size'
:
1279664
,
'free_biggest_size'
:
1205448
,
'used_cnt'
:
832
,
'used_pct'
:
76
,
'frag_pct'
:
6
},
'evm'
:
{
'total_size'
:
2097152
,
'free_size'
:
0
,
'gc_usage'
:
50
},
'image'
:
[{
'uri'
:
'evue_launcher'
,
'length'
:
1043
,
'png_total_count'
:
0
,
'png_uncompressed_size'
:
0
,
'png_file_size'
:
0
},
{
'uri'
:
'kdgs_1_storyList'
,
'length'
:
9608
,
'png_total_count'
:
193
,
'png_uncompressed_size'
:
370884
,
'png_file_size'
:
209807
}]}
message
=
{
'imei'
:
'12345678900005'
,
'system'
:
{
'free_size'
:
0
},
'lvgl'
:
{
'total_size'
:
5242880
,
'free_cnt'
:
31
,
'free_size'
:
1279664
,
'free_biggest_size'
:
1205448
,
'used_cnt'
:
832
,
'used_pct'
:
76
,
'frag_pct'
:
6
},
'evm'
:
{
'total_size'
:
2097152
,
'free_size'
:
0
,
'gc_usage'
:
50
},
'image'
:
[{
'uri'
:
'evue_launcher'
,
'length'
:
1043
,
'png_total_count'
:
0
,
'png_uncompressed_size'
:
0
,
'png_file_size'
:
0
},
{
'uri'
:
'kdgs_1_storyList'
,
'length'
:
9608
,
'png_total_count'
:
193
,
'png_uncompressed_size'
:
370884
,
'png_file_size'
:
209807
}]}
insert_data
(
message
)
insert_data
(
message
)
# 这里不能使用广播,得点对点发送,有此设备的账号才能看到调试信息
NotifyHandler
.
broadcastMessage
(
message
)
NotifyHandler
.
broadcastMessage
(
message
)
class
WatchHandler
(
BaseHandler
):
class
WatchHandler
(
BaseHandler
):
...
@@ -177,7 +232,7 @@ class WatchHandler(BaseHandler):
...
@@ -177,7 +232,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
))
print
(
"=====>"
,
data
,
type
(
data
))
self
.
write
(
json
.
dumps
({
'code'
:
100
,
'msg'
:
'success'
}))
self
.
write
(
json
.
dumps
({
'code'
:
100
,
'msg'
:
'success'
}))
class
DeviceMessageHandler
(
BaseHandler
):
class
DeviceMessageHandler
(
BaseHandler
):
...
...
backend/view/ws.py
View file @
f778c0b8
'''
'''
Author: your name
Author: your name
Date: 2021-04-14 14:12:18
Date: 2021-04-14 14:12:18
LastEditTime: 2021-0
6-29 19:39:04
LastEditTime: 2021-0
7-03 11:57:41
LastEditors:
your name
LastEditors:
Please set LastEditors
Description: In User Settings Edit
Description: In User Settings Edit
FilePath:
\
evm-store
\b
ackend
\v
iew
\
ws.py
FilePath:
\
evm-store
\b
ackend
\v
iew
\
ws.py
'''
'''
...
@@ -36,7 +36,7 @@ def pushmessage(func):
...
@@ -36,7 +36,7 @@ def pushmessage(func):
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_message
(
json
.
dumps
(
msg
),
binary
)
elif
isinstance
(
msg
,
str
)
or
isinstance
(
msg
,
unicode
):
elif
isinstance
(
msg
,
str
)
or
isinstance
(
msg
,
str
):
self
.
write_message
(
msg
,
binary
)
self
.
write_message
(
msg
,
binary
)
else
:
else
:
self
.
write_message
(
repr
(
msg
),
binary
)
self
.
write_message
(
repr
(
msg
),
binary
)
...
...
frontend/src/api/index.js
View file @
f778c0b8
...
@@ -323,37 +323,6 @@ export function getPaybackList(params) {
...
@@ -323,37 +323,6 @@ export function getPaybackList(params) {
});
});
}
}
export
function
addAnnex
(
params
)
{
return
request
({
url
:
"
/api/v1/evm_store/annex/add
"
,
method
:
"
post
"
,
data
:
params
,
});
}
export
function
deleteAnnex
(
id
)
{
return
request
({
url
:
`/api/v1/evm_store/annex/delete/
${
id
}
`
,
method
:
"
post
"
,
});
}
export
function
getAnnexList
(
params
)
{
return
request
({
url
:
"
/api/v1/evm_store/annex/list
"
,
method
:
"
post
"
,
data
:
params
,
});
}
export
function
updateAnnex
(
id
,
params
)
{
return
request
({
url
:
`/api/v1/evm_store/annex/update/
${
id
}
`
,
method
:
"
post
"
,
data
:
params
,
});
}
export
function
deleteProjectUser
(
params
)
{
export
function
deleteProjectUser
(
params
)
{
return
request
({
return
request
({
url
:
"
/api/v1/evm_store/system/deleteProjectUser
"
,
url
:
"
/api/v1/evm_store/system/deleteProjectUser
"
,
...
...
frontend/src/utils/eventBus.js
View file @
f778c0b8
/*
/*
* @Author: your name
* @Author: your name
* @Date: 2021-07-01 15:02:16
* @Date: 2021-07-01 15:02:16
* @LastEditTime: 2021-07-01 1
5:03:23
* @LastEditTime: 2021-07-01 1
8:20:04
* @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
...
...
frontend/src/views/system/chart.vue
View file @
f778c0b8
<
template
>
<
template
>
<div
class=
"app-container"
>
<div
class=
"app-container"
>
<el-form
:inline=
"true"
:model=
"form"
size=
"mini"
>
<el-form
:inline=
"true"
:model=
"form"
ref=
"query"
size=
"mini"
>
<el-form-item
label=
"设备"
>
<el-form-item
label=
"设备"
>
<el-select
<el-select
v-model=
"watch_id"
v-model=
"watch_id"
...
@@ -21,9 +21,9 @@
...
@@ -21,9 +21,9 @@
>
查询
</el-button
>
查询
</el-button
></el-form-item
></el-form-item
>
>
<el-form-item><el-button
@
click=
"onReset"
>
重置
</el-button></el-form-item>
<el-form-item><el-button
@
click=
"onReset
('query')
"
>
重置
</el-button></el-form-item>
</el-form>
</el-form>
<LineChart
:chartData=
"evm"
:dataList=
"evmList"
></LineChart>
<LineChart
:chartData=
"evm"
></LineChart>
<LvglChart
:chartData=
"lvgl"
></LvglChart>
<LvglChart
:chartData=
"lvgl"
></LvglChart>
</div>
</div>
</
template
>
</
template
>
...
@@ -104,10 +104,15 @@ export default {
...
@@ -104,10 +104,15 @@ export default {
});
});
},
},
onChange
(
res
)
{
onChange
(
res
)
{
if
(
!
res
)
return
null
;
var
t
=
this
.
watchs
.
find
((
item
)
=>
{
var
t
=
this
.
watchs
.
find
((
item
)
=>
{
return
item
.
id
==
res
;
return
item
.
id
==
res
;
});
});
if
(
t
)
this
.
device
=
t
.
imei
;
if
(
t
)
this
.
device
=
t
.
imei
;
// 清空之前数据
this
.
processData
();
this
.
processData
();
},
},
onSubmit
()
{
onSubmit
()
{
...
@@ -123,9 +128,11 @@ export default {
...
@@ -123,9 +128,11 @@ export default {
this
.
processData
()
this
.
processData
()
},
},
processData
()
{
processData
()
{
this
.
evm
=
this
.
devices
[
this
.
device
].
evm
;
if
(
this
.
devices
[
this
.
device
])
{
this
.
lvgl
=
this
.
devices
[
this
.
device
].
lvgl
;
if
(
this
.
devices
[
this
.
device
].
evm
)
this
.
evm
=
this
.
devices
[
this
.
device
].
evm
;
this
.
image
=
this
.
devices
[
this
.
device
].
image
;
if
(
this
.
devices
[
this
.
device
].
lvgl
)
this
.
lvgl
=
this
.
devices
[
this
.
device
].
lvgl
;
if
(
this
.
devices
[
this
.
device
].
image
)
this
.
image
=
this
.
devices
[
this
.
device
].
image
;
}
}
}
},
},
mounted
()
{},
mounted
()
{},
...
...
frontend/src/views/system/components/EvmChart.vue
View file @
f778c0b8
...
@@ -125,37 +125,6 @@ export default {
...
@@ -125,37 +125,6 @@ export default {
},
},
},
},
mounted
()
{
mounted
()
{
// this.timer = setInterval(() => {
// for (var i = 0; i
<
5
;
i
++
)
{
// dataList.shift();
// dataList.push(randomData());
// }
// if (!this.chart) {
// clearInterval(this.timer);
// }
// this.chart &&
// this.chart.setOption({
// series: [
// {
// data: dataList,
// },
// ],
// });
// }, 1000);
// this.loading = this.$loading({
// lock: true,
// text: "Loading",
// spinner: "el-icon-loading",
// background: "rgba(0, 0, 0, 0.7)",
// });
// setTimeout(() => {
// this.loading.close()
// }, 2000)
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
initChart
();
this
.
initChart
();
});
});
...
@@ -168,22 +137,19 @@ export default {
...
@@ -168,22 +137,19 @@ export default {
this
.
chart
=
null
;
this
.
chart
=
null
;
},
},
methods
:
{
methods
:
{
handleData
(
data
)
{
cleanData
(
)
{
// 关闭从WebSocket接收数据
// 关闭从WebSocket接收数据
// 重置所有数据
// 重置所有数据
Object
.
keys
(
seriesData
).
forEach
((
key
)
=>
{
Object
.
keys
(
seriesData
).
forEach
((
key
)
=>
{
seriesData
[
key
]
=
[];
seriesData
[
key
]
=
[];
});
});
// this.series.forEach((item) => {
this
.
series
.
forEach
((
item
)
=>
{
// item.data = [];
item
.
data
=
[];
// });
// this.chart.setOption({ series: this.series });
data
.
forEach
((
item
)
=>
{
this
.
handleMessage
(
item
);
});
});
this
.
chart
.
setOption
({
series
:
this
.
series
});
},
},
handleMessage
(
data
)
{
handleMessage
(
data
)
{
if
(
!
data
||
data
.
length
==
0
)
this
.
cleanData
()
// 这里面应该增加一个数组长度判断,当超过了多少个之后,弹出数组第一项,防止数组内存溢出
// 这里面应该增加一个数组长度判断,当超过了多少个之后,弹出数组第一项,防止数组内存溢出
// seriesData[k].shift()
// seriesData[k].shift()
Object
.
keys
(
data
).
forEach
((
k
)
=>
{
Object
.
keys
(
data
).
forEach
((
k
)
=>
{
...
...
frontend/src/views/system/history.vue
View file @
f778c0b8
<
template
>
<
template
>
<div
class=
"app-container"
>
<div
class=
"app-container"
>
<el-form
:inline=
"true"
:model=
"form"
size=
"mini"
>
<el-form
:inline=
"true"
:model=
"form"
ref=
"query"
size=
"mini"
>
<el-form-item
label=
"设备"
>
<el-form-item
label=
"设备"
>
<el-select
<el-select
v-model=
"watch_id"
v-model=
"watch_id"
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
>
查询
</el-button
>
查询
</el-button
></el-form-item
></el-form-item
>
>
<el-form-item><el-button
@
click=
"onReset"
>
重置
</el-button></el-form-item>
<el-form-item><el-button
@
click=
"onReset
('query')
"
>
重置
</el-button></el-form-item>
</el-form>
</el-form>
<EvmHistoryChart
:dataList=
"evmList"
></EvmHistoryChart>
<EvmHistoryChart
:dataList=
"evmList"
></EvmHistoryChart>
<LvglHistoryChart
:dataList=
"lvglList"
></LvglHistoryChart>
<LvglHistoryChart
:dataList=
"lvglList"
></LvglHistoryChart>
...
...
frontend/vue.config.js
View file @
f778c0b8
...
@@ -35,11 +35,10 @@ module.exports = {
...
@@ -35,11 +35,10 @@ module.exports = {
changeOrigin
:
true
,
changeOrigin
:
true
,
pathRewrite
:
{},
pathRewrite
:
{},
},
},
"
/api/v1/
kxpms
"
:
{
"
/api/v1/
evm_store
"
:
{
target
:
"
http://
192.168.1.106:5000
/
"
,
target
:
"
http://
store.evmiot.com
/
"
,
changeOrigin
:
true
,
changeOrigin
:
true
,
pathRewrite
:
{
pathRewrite
:
{
"
^/online
"
:
"
/
"
,
// 这里理解成用/api代替target里面的地址,后面组件中我们调用接口时直接用api代替
// 这里理解成用/api代替target里面的地址,后面组件中我们调用接口时直接用api代替
// 比如我要调用'http://40.00.100.100:3002/user/add',直接写'/api/user/add'即可
// 比如我要调用'http://40.00.100.100:3002/user/add',直接写'/api/user/add'即可
},
},
...
...
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