Files
2026-07-13 12:31:34 +08:00

151 lines
3.6 KiB
Python

# -*- coding: utf-8 -*-
"""
monitor_model.py
"""
from __future__ import print_function, unicode_literals, absolute_import, division
import json
from datetime import datetime
from peewee import CharField, IntegerField, DateTimeField, BooleanField, AutoField, TextField
from playhouse.shortcuts import model_to_dict
from domain_admin.enums.monitor_status_enum import MonitorStatusEnum
from domain_admin.enums.monitor_type_enum import MonitorTypeEnum
from domain_admin.enums.time_unit_enum import TimeUnitEnum
from domain_admin.model.base_model import BaseModel
from domain_admin.utils import datetime_util
class MonitorModel(BaseModel):
"""监控"""
id = AutoField(primary_key=True)
# 用户id
user_id = IntegerField(default=0)
# 名称
title = CharField(default='')
# 监控类型
monitor_type = IntegerField(default=MonitorTypeEnum.UNKNOWN)
# 监控参数
# http {url, method, timeout}
# @since v1.6.56 add timeout_unit
content = TextField(default=None)
# 间隔 检测频率
interval = IntegerField(default=60)
# 间隔 检测频率单位:默认:分钟
interval_unit = IntegerField(default=TimeUnitEnum.Minute)
# 允许失败次数
allow_error_count = IntegerField(default=0)
# 状态
status = IntegerField(default=MonitorStatusEnum.UNKNOWN)
# 是否监测
is_active = BooleanField(default=True)
# 下一次运行时间
next_run_time = DateTimeField(default=None, null=True)
# 数据版本号 @since 1.6.11
version = IntegerField(default=0, null=False)
# 创建时间
create_time = DateTimeField(default=datetime.now)
# 更新时间
update_time = DateTimeField(default=None, null=True)
class Meta:
table_name = 'tb_monitor'
@property
def monitor_id(self):
return self.id
@property
def create_time_label(self):
return datetime_util.format_datetime_label(self.create_time)
@property
def update_time_label(self):
return datetime_util.time_for_human(self.update_time)
@property
def content_dict(self):
return json.loads(self.content)
@property
def http_url(self):
return self.content_dict.get('url')
@property
def http_timeout(self):
return int(self.content_dict.get('timeout'))
@property
def http_timeout_unit(self):
return self.content_dict.get('timeout_unit')
@property
def http_timeout_unit_label(self):
return TimeUnitEnum.get_label(self.http_timeout_unit)
@property
def interval_unit_label(self):
return TimeUnitEnum.get_label(self.interval_unit)
def to_dict(self):
data = model_to_dict(
model=self,
extra_attrs=[
'create_time_label',
'update_time_label',
'content_dict',
'monitor_id',
'http_url',
'http_timeout',
'http_timeout_unit',
'http_timeout_unit_label',
'interval_unit_label',
]
)
data['content'] = data.pop('content_dict')
return data
# 数据导入导出字段关系
FIELD_MAPPING = [
{
'name': '名称',
'field': 'title',
},
{
'name': '请求URL',
'field': 'http_url',
},
{
'name': '请求超时',
'field': 'http_timeout',
},
{
'name': '请求超时单位',
'field': 'http_timeout_unit_label',
},
{
'name': '检测频率',
'field': 'interval',
},
{
'name': '检测频率单位',
'field': 'interval_unit_label',
},
]