新功能(服务监控API): 服务监控API
parent
9bfac232fe
commit
f804d45bed
|
@ -13,7 +13,18 @@ class ServerSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Server
|
model = Server
|
||||||
fields = '__all__'
|
fields = ("id", "ip", "name", "os", "remark")
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateServerSerializer(CustomModelSerializer):
|
||||||
|
"""
|
||||||
|
服务器信息 简单序列化器
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Server
|
||||||
|
fields = ("name", "remark")
|
||||||
|
|
||||||
|
|
||||||
# ================================================= #
|
# ================================================= #
|
||||||
# ************** 服务器监控信息 序列化器 ************** #
|
# ************** 服务器监控信息 序列化器 ************** #
|
||||||
|
|
|
@ -8,7 +8,8 @@ router.register(r'server', ServerModelViewSet)
|
||||||
router.register(r'monitor', MonitorModelViewSet)
|
router.register(r'monitor', MonitorModelViewSet)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
re_path('monitor/info/', MonitorModelViewSet.as_view({'get': 'get_monitor_info'})),
|
re_path('monitor/info/(?P<pk>.*)/', MonitorModelViewSet.as_view({'get': 'get_monitor_info'})),
|
||||||
|
re_path('monitor/rate/(?P<pk>.*)/', MonitorModelViewSet.as_view({'get': 'get_rate_info'})),
|
||||||
re_path('monitor/enabled/', MonitorModelViewSet.as_view({'get': 'enabled_monitor_info'})),
|
re_path('monitor/enabled/', MonitorModelViewSet.as_view({'get': 'enabled_monitor_info'})),
|
||||||
re_path('monitor/clean/', MonitorModelViewSet.as_view({'get': 'clean_all'})),
|
re_path('monitor/clean/', MonitorModelViewSet.as_view({'get': 'clean_all'})),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,9 +2,9 @@ from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSch
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
||||||
from .filters import ServerFilter, MonitorFilter
|
from .filters import ServerFilter, MonitorFilter
|
||||||
from .models import Server, Monitor
|
from .models import Server, Monitor, SysFiles
|
||||||
from .serializers import ServerSerializer, MonitorSerializer
|
from .serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer
|
||||||
from ..op_drf.response import SuccessResponse
|
from ..op_drf.response import SuccessResponse, ErrorResponse
|
||||||
from ..op_drf.viewsets import CustomModelViewSet
|
from ..op_drf.viewsets import CustomModelViewSet
|
||||||
from ..permission.permissions import CommonPermission
|
from ..permission.permissions import CommonPermission
|
||||||
from ..system.models import ConfigSettings
|
from ..system.models import ConfigSettings
|
||||||
|
@ -16,6 +16,7 @@ class ServerModelViewSet(CustomModelViewSet):
|
||||||
"""
|
"""
|
||||||
queryset = Server.objects.all()
|
queryset = Server.objects.all()
|
||||||
serializer_class = ServerSerializer
|
serializer_class = ServerSerializer
|
||||||
|
update_serializer_class = UpdateServerSerializer
|
||||||
# extra_filter_backends = [DataLevelPermissionsFilter]
|
# extra_filter_backends = [DataLevelPermissionsFilter]
|
||||||
filter_class = ServerFilter
|
filter_class = ServerFilter
|
||||||
update_extra_permission_classes = (CommonPermission,)
|
update_extra_permission_classes = (CommonPermission,)
|
||||||
|
@ -37,7 +38,80 @@ class MonitorModelViewSet(CustomModelViewSet):
|
||||||
create_extra_permission_classes = (CommonPermission,)
|
create_extra_permission_classes = (CommonPermission,)
|
||||||
ordering = '-create_datetime' # 默认排序
|
ordering = '-create_datetime' # 默认排序
|
||||||
|
|
||||||
|
def get_rate_info(self, request: Request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
获取使用率 监控信息
|
||||||
|
:param request:
|
||||||
|
:param args:
|
||||||
|
:param kwargs:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pk = kwargs.get("pk")
|
||||||
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
|
queryset = queryset.filter(server__id=pk).order_by("-create_datetime")
|
||||||
|
# 间隔取值
|
||||||
|
queryset_count = queryset.count()
|
||||||
|
Interval_num = 1 if queryset_count < 200 else int(queryset_count / 100)
|
||||||
|
queryset = queryset.values('cpu_sys', 'mem_num', 'mem_sys')[::Interval_num][:100]
|
||||||
|
data = {
|
||||||
|
"cpu": [],
|
||||||
|
"memory": [],
|
||||||
|
}
|
||||||
|
for ele in queryset:
|
||||||
|
data["cpu"].append(float(ele.get('cpu_sys', 0)))
|
||||||
|
data["memory"].append(float(ele.get('mem_num', 0)) and round(float(ele.get('mem_sys', 0)) /
|
||||||
|
float(ele.get('mem_num', 0)), 4))
|
||||||
|
return SuccessResponse(data=data)
|
||||||
|
|
||||||
def get_monitor_info(self, request: Request, *args, **kwargs):
|
def get_monitor_info(self, request: Request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
最新的服务器状态信息
|
||||||
|
:param request:
|
||||||
|
:param args:
|
||||||
|
:param kwargs:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pk = kwargs.get("pk")
|
||||||
|
instance = Monitor.objects.filter(server__id=pk).order_by("-create_datetime").first()
|
||||||
|
if not instance:
|
||||||
|
return ErrorResponse(msg="未找到服务器信息id")
|
||||||
|
serializer = self.get_serializer(instance)
|
||||||
|
data = serializer.data
|
||||||
|
return SuccessResponse(data={
|
||||||
|
"cpu": {
|
||||||
|
"total": int(data.get('cpu_num'), 0),
|
||||||
|
"used": "", # cpu核心 可不传,如指cpu当前主频,该值可以传
|
||||||
|
"rate": float(data.get('cpu_sys', 0)),
|
||||||
|
"unit": "核心", # 默认单位 核心
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"total": int(int(data.get('mem_num', 0)) / 1024),
|
||||||
|
"used": int(int(data.get('mem_sys', 0)) / 1024),
|
||||||
|
"rate": int(data.get('mem_num', 0)) and round(int(data.get('mem_sys', 0)) /
|
||||||
|
int(data.get('mem_num', 0)), 4),
|
||||||
|
"unit": "MB", # 默认单位 MB
|
||||||
|
},
|
||||||
|
"disk": [{
|
||||||
|
"dir_name": ele.get('dir_name'),
|
||||||
|
"total": int(int(ele.get('total', 0)) / 1024 / 1024 / 1024),
|
||||||
|
"used": int(int(ele.get('disk_sys', 0)) / 1024 / 1024 / 1024),
|
||||||
|
"rate": int(ele.get('total', 0)) and round(int(ele.get('disk_sys', 0)) / int(ele.get('total', 0)),
|
||||||
|
4),
|
||||||
|
"unit": "GB", # 默认单位 GB
|
||||||
|
} for ele in SysFiles.objects.filter(monitor=instance).values('dir_name', 'total', 'disk_sys')]
|
||||||
|
})
|
||||||
|
|
||||||
|
def enabled_monitor_info(self, request: Request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
更新和获取监控信息
|
||||||
|
:param request:
|
||||||
|
:param args:
|
||||||
|
:param kwargs:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
enabled = request.query_params.get('enabled', None)
|
||||||
|
save_days = request.query_params.get('save_days', None)
|
||||||
|
interval = request.query_params.get('interval', None)
|
||||||
# 定时获取系统监控信息
|
# 定时获取系统监控信息
|
||||||
periodictask_obj = PeriodicTask.objects.filter(task='apps.vadmin.monitor.tasks.get_monitor_info').first()
|
periodictask_obj = PeriodicTask.objects.filter(task='apps.vadmin.monitor.tasks.get_monitor_info').first()
|
||||||
if not periodictask_obj:
|
if not periodictask_obj:
|
||||||
|
@ -73,33 +147,15 @@ class MonitorModelViewSet(CustomModelViewSet):
|
||||||
config_obj.remark = "定时清理多余-系统监控信息,默认30天"
|
config_obj.remark = "定时清理多余-系统监控信息,默认30天"
|
||||||
config_obj.save()
|
config_obj.save()
|
||||||
|
|
||||||
# 获取保留天数
|
|
||||||
return SuccessResponse(data={
|
|
||||||
"enabled": periodictask_obj.enabled,
|
|
||||||
"interval": periodictask_obj.interval.every,
|
|
||||||
"save_days": config_obj.configValue if config_obj else "30",
|
|
||||||
})
|
|
||||||
|
|
||||||
def enabled_monitor_info(self, request: Request, *args, **kwargs):
|
|
||||||
enabled = request.query_params.get('enabled', None)
|
|
||||||
save_days = request.query_params.get('save_days', None)
|
|
||||||
interval = request.query_params.get('interval', None)
|
|
||||||
|
|
||||||
periodictask_obj = PeriodicTask.objects.filter(task='apps.vadmin.monitor.tasks.get_monitor_info').first()
|
|
||||||
if enabled:
|
if enabled:
|
||||||
# 更新监控状态
|
# 更新监控状态
|
||||||
periodictask_obj.enabled = True if enabled == "1" else False
|
periodictask_obj.enabled = True if enabled == "1" else False
|
||||||
periodictask_obj.save()
|
periodictask_obj.save()
|
||||||
|
|
||||||
# 更新 定时清理多余 系统监控信息 状态
|
# 更新 定时清理多余 系统监控信息 状态
|
||||||
clean_task_obj = PeriodicTask.objects.filter(
|
|
||||||
task='apps.vadmin.monitor.tasks.clean_surplus_monitor_info').first()
|
|
||||||
clean_task_obj.enabled = True if enabled == "1" else False
|
clean_task_obj.enabled = True if enabled == "1" else False
|
||||||
clean_task_obj.save()
|
clean_task_obj.save()
|
||||||
# 更新保留天数
|
# 更新保留天数
|
||||||
config_obj = ConfigSettings.objects.filter(configKey='sys.monitor.info.save_days').first()
|
|
||||||
print(33, save_days)
|
|
||||||
print(22, config_obj)
|
|
||||||
if save_days and config_obj:
|
if save_days and config_obj:
|
||||||
config_obj.configValue = save_days
|
config_obj.configValue = save_days
|
||||||
config_obj.save()
|
config_obj.save()
|
||||||
|
|
Loading…
Reference in New Issue