企业设备功能接口

main
周平 10 months ago
parent 7a765dd1ac
commit af2d037577

@ -308,7 +308,8 @@ class EnterpriseDeviceRepository(object):
return 0
def list_entity_devices(self, entity_id: int, pageNo: int, pageSize: int, classification: str, status: int) -> dict:
def list_entity_devices(self, entity_id: int, pageno: int, pagesize: int, classification: str = "",
status: int = 0) -> dict:
"""获取企业的设备列表"""
with get_session() as session:
try:
@ -326,7 +327,8 @@ class EnterpriseDeviceRepository(object):
count = session_count.count()
session_device = (
session.query(EnterpriseDevice)
session.query(EnterpriseDevice, DeviceClassification.name.label("classification_name"))
.join(DeviceClassification, DeviceClassification.id == EnterpriseDevice.classification, isouter=True)
.filter(
EnterpriseDevice.entity_id == entity_id,
EnterpriseDevice.delete != 1,
@ -337,11 +339,39 @@ class EnterpriseDeviceRepository(object):
if status:
session_device.filter(EnterpriseDevice.status == status)
devices = session_device.order_by(EnterpriseDevice.id.desc()).limit(pageSize).offset(
(pageNo - 1) * pageSize).all()
devices = session_device.order_by(EnterpriseDevice.id.desc()).limit(pagesize).offset(
(pageno - 1) * pagesize).all()
except Exception as e:
logging.error("Failed to list devices")
raise e
logging.info(devices)
return {"count": count, "devices": devices}
def status_count(self, entity_id: int, classification: str=""):
with get_session() as session:
try:
session_count = (
session.query(
EnterpriseDevice.status,
func.count(EnterpriseDevice.id).label("count")
)
.filter(
EnterpriseDevice.entity_id == entity_id,
EnterpriseDevice.delete != 1,
)
.group_by(EnterpriseDevice.status)
)
if classification:
session_count = session_count.filter(EnterpriseDevice.classification == classification)
result = session_count.all()
except Exception as e:
logging.error("Failed to get status count")
raise e
return dict(result)

@ -8,9 +8,7 @@ from sqlalchemy import text
from website import consts
from website import db_mysql, errors
from website.db.alg_model.alg_model import ModelRepositry as DB_AlgModel
from website.db.device_classification import (
device_classification as DB_DeviceClassification,
)
from website.db.device_classification import device_classification as DB_DeviceClassification
from website.db.enterprise_busi_model import (
enterprise_busi_model as DB_BusiModel,
)
@ -18,6 +16,7 @@ from website.db.enterprise_busi_model import enterprise_busi_model_node_device a
from website.db.enterprise_device import enterprise_device as DB_Device
from website.db.enterprise_node import enterprise_node_base_model_conf as DB_NodeBaseModelConf
from website.handler import APIHandler, authenticated
from website.util import date_util
from website.util import shortuuid
@ -405,15 +404,15 @@ class DeviceBasemodelListHandler(APIHandler):
base_model_version = base_model["default_version"]
db_conf = DB_NodeBaseModelConf.EnterpriseNodeDeviceBMCusConfRepository()
conf = db_conf.get_busi_model_custom_config(busi_model_id=busi_model_id, device_id=device_id,
node_id=item["node_id"])
node_id=item["node_id"])
base_model_hub_image = ""
if conf:
base_model_hub_image = conf.model_hub_image
base_models.append({
"model_id": base_model_id,
"model_name": base_model_name,
"model_version": base_model_version,
"model_hub_image": base_model_hub_image,
"model_id": base_model_id,
"model_name": base_model_name,
"model_version": base_model_version,
"model_hub_image": base_model_hub_image,
})
res.append({
"busi_model_id": busi_model_id,
@ -541,8 +540,8 @@ class StatusListHandler(APIHandler):
db_device = DB_Device.EnterpriseDeviceRepository()
res = db_device.list_entity_devices(
entity_id=entity_id,
pageNo=pageNo,
pageSize=pageSize,
pageno=pageNo,
pagesize=pageSize,
classification=classification,
status=status,
)
@ -550,7 +549,8 @@ class StatusListHandler(APIHandler):
count = res["count"]
devices = res["devices"]
data = []
for item in devices:
for item, _ in devices:
logging.info(item)
data.append(
{
"id": item.id,
@ -563,7 +563,17 @@ class StatusListHandler(APIHandler):
}
)
self.finish({"count": count, "data": data})
status_dic = {
consts.device_status_online: 0,
consts.device_status_offline: 0,
consts.device_status_ongoing: 0,
consts.device_status_error: 0,
}
status_count = db_device.status_count(entity_id=entity_id, classification=classification)
for key in status_count:
status_dic.update({key: status_count[key]})
self.finish({"count": count, "data": data, "status_count": status_dic})
class StatusInfoHandler(APIHandler):
@ -575,22 +585,112 @@ class StatusInfoHandler(APIHandler):
if not device_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备id不能为空")
# 查询设备信息
db_device = DB_Device.EnterpriseDeviceRepository()
res = db_device.get_devices(device_ids=[device_id])
if not res:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备不存在")
res = res[0]
device_suid = res["suid"]
device_name = res["name"]
device_comment = res["comment"]
classification = res["classification"]
db_cls = DB_DeviceClassification.DeviceClassificationReporitory()
row_cls = db_cls.get_row_by_suid(suid=classification)
device_classification_name = row_cls.name
db_busi_model = DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository()
busi_models, _ = db_busi_model.get_busi_model_by_device(device_id=device_id)
for busi_model in busi_models:
base_model_ids = json.loads(busi_model["base_models"])
self.finish()
models = []
for item in busi_models:
busi_model_id = item["busi_model_id"]
busi_model_name = item["name"]
base_model_list = json.loads(item["base_models"])
base_models = []
for base_model in base_model_list:
base_model_id = base_model["id"]
base_model_name = base_model["name"]
db_alg_model = DB_AlgModel()
base_model = db_alg_model.get_model_dict_by_id(base_model_id)
base_model_version = base_model["default_version"]
db_conf = DB_NodeBaseModelConf.EnterpriseNodeDeviceBMCusConfRepository()
conf = db_conf.get_busi_model_custom_config(busi_model_id=busi_model_id, device_id=device_id,
node_id=item["node_id"])
base_model_hub_image = ""
if conf:
base_model_hub_image = conf.model_hub_image
base_models.append({
"model_id": base_model_id,
"model_name": base_model_name,
"model_version": base_model_version,
"model_hub_image": base_model_hub_image,
})
models.append({
"busi_model": busi_model_name,
"base_models": base_models
})
self.finish({
"classification": device_classification_name,
"name": device_name,
"ID": device_suid,
"cpu": random.randint(20, 30),
"mem": random.randint(20, 30),
"storage": random.randint(20, 30),
"gpu": random.randint(20, 30),
"models": models
})
class StatusLogHandler(APIHandler):
""" """
"""
- 描述设备状态日志
- 请求方式post
- 请求参数
> - entity_id, int, 企业id
> - pageNo
> - pageSize
- 返回值
```
{
"count": 123,
"data": [
{
"ID": "xxx",
"name": "xxx",
"classification": "xxx",
"IP": "xxx",
"duration": "xxx",
}
]
}
```
"""
@authenticated
def post(self):
self.finish()
entity_id = self.get_int_argument("entity_id")
pageNo = self.get_int_argument("pageNo", 1)
pageSize = self.get_int_argument("pageSize", 10)
db_device = DB_Device.EnterpriseDeviceRepository()
res = db_device.list_entity_devices(entity_id=entity_id, pageno=pageNo, pagesize=pageSize)
count = res["count"]
devices = res["devices"]
result = []
for device, classification_name in devices:
device_name = device.name
device_suid = device.suid
device_ip = ""
duration = date_util.time_diff(str(device.create_time))
result.append({
"ID": device_suid,
"name": device_name,
"classification": classification_name,
"IP": device_ip,
"duration": duration,
})
self.finish({"count": count, "data": result})

@ -418,15 +418,23 @@ class AlertHandler(APIHandler):
db_alert = DB_NodeAlert.EnterpriseNodeAlertRepository()
data = db_alert.get_one(entity_suid, node_suid)
self.finish(
{
res = {
"is_sms": 0,
"sms_to": "",
"is_email": 0,
"email_to": "",
"freq": "T",
}
if data:
res.update({
"is_sms": data["is_sms"],
"sms_to": data["sms_to"],
"is_email": data["is_email"],
"email_to": data["email_to"],
"freq": data["freq"],
}
)
})
self.finish(res)
class AlertConfigHandler(APIHandler):

@ -1,5 +1,6 @@
#!/usr/bin/env python
import datetime
from datetime import datetime, timedelta
# 获取过去几天的日期
def get_last_days(delta):
@ -12,6 +13,21 @@ def get_last_days(delta):
days.sort()
return days
def time_diff(t1):
# 将字符串转换为 datetime 对象
t1 = datetime.strptime(t1, "%Y-%m-%d %H:%M:%S")
# 计算当前时间与 t1 的差值
diff = datetime.now() - t1
# 计算天数、小时数和分钟数
days = diff.days
hours, remainder = divmod(diff.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
# 返回格式化的时间差
return f"{days}:{hours}:{minutes}"
class DateNext(object):
def get_next_week_date(self, weekday):

Loading…
Cancel
Save