commit
82be60bed8
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
|
@ -0,0 +1,13 @@
|
|||
import logging
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AlarmConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'apps.alarm'
|
||||
|
||||
def ready(self):
|
||||
logger.info(">>> alarm module loading success")
|
|
@ -0,0 +1,22 @@
|
|||
from django.db import models
|
||||
from lib import BaseModel
|
||||
from apps.accounts.models import User
|
||||
from apps.host.models import HostModel
|
||||
|
||||
|
||||
class AlarmModel(BaseModel):
|
||||
LEVEL_CHOICES = (
|
||||
(0, 'info'),
|
||||
(1, 'warning'),
|
||||
(2, 'error')
|
||||
)
|
||||
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name="alarm_user", verbose_name="告警接受者")
|
||||
host = models.ForeignKey(HostModel, on_delete=models.CASCADE, related_name="alarm_hosts", verbose_name="告警主机")
|
||||
level = models.IntegerField(choices=LEVEL_CHOICES, default=0, verbose_name="告警级别")
|
||||
message = models.TextField(verbose_name="告警内容")
|
||||
collected_time = models.DateTimeField(verbose_name="告警采集时间")
|
||||
duration_time = models.TimeField(null=True, blank=True, verbose_name="告警持续时间")
|
||||
item = models.CharField(max_length=100, verbose_name="告警项")
|
||||
|
||||
class Meta:
|
||||
db_table = "alarm"
|
|
@ -0,0 +1,16 @@
|
|||
import logging
|
||||
from rest_framework import serializers
|
||||
from apps.alarm.models import AlarmModel
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AlarmSerializer(serializers.ModelSerializer):
|
||||
collected_time = serializers.DateTimeField(label=u'告警采集时间', format="%Y-%m-%d %H:%M:%S")
|
||||
level = serializers.SerializerMethodField(label='级别', read_only=True)
|
||||
class Meta:
|
||||
model = AlarmModel
|
||||
fields = "__all__"
|
||||
|
||||
def get_level(self, obj):
|
||||
return obj.get_level_display()
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
from django.urls import path
|
||||
from django.urls.conf import include
|
||||
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
from apps.alarm import views
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register('alarm', views.AlarmAPIView)
|
||||
|
||||
urlpatterns = [
|
||||
path('api/v1/', include(router.urls)),
|
||||
]
|
|
@ -0,0 +1,45 @@
|
|||
from rest_framework.viewsets import GenericViewSet
|
||||
from rest_framework import mixins
|
||||
from django.db.models import Q
|
||||
|
||||
from apps.alarm import serializer
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework.filters import SearchFilter, OrderingFilter
|
||||
from apps.alarm.models import AlarmModel
|
||||
from lib import *
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AlarmAPIView(GenericViewSet,
|
||||
mixins.ListModelMixin,
|
||||
mixins.RetrieveModelMixin,
|
||||
mixins.CreateModelMixin
|
||||
):
|
||||
queryset = AlarmModel.objects.filter(Q(deleted_at__isnull=True) | Q(deleted_at=''))
|
||||
serializer_class = serializer.AlarmSerializer
|
||||
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
|
||||
search_fields = ('id', 'host__id', 'receiver__id', 'level') # 模糊查询
|
||||
filter_fields = ('id', 'host__id', 'receiver__id', 'level') # 精确查询
|
||||
authentication_classes = []
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
try:
|
||||
response = super().create(request, *args, **kwargs)
|
||||
return success(result=response.data, message="插入成功")
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
return other_response(message=str(e), code=400, success=False)
|
||||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
instance = self.get_queryset().filter(**kwargs).first()
|
||||
if not instance:
|
||||
return success([])
|
||||
serializer = self.get_serializer(instance)
|
||||
return success(result=serializer.data)
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
if not queryset:
|
||||
return success([], total=0)
|
||||
return super(AlarmAPIView, self).list(request, *args, **kwargs)
|
|
@ -8,15 +8,9 @@ from apps.task.models import JobModel
|
|||
class TaskFilter(BaseFilterBackend):
|
||||
def filter_queryset(self, request: Request, queryset, view):
|
||||
params = request.query_params.dict()
|
||||
queryset_all = JobModel.objects.all()
|
||||
search = params.get("search", None)
|
||||
if search:
|
||||
queryset = queryset | queryset_all.filter(params__contains=search)
|
||||
queryset = queryset | queryset_all.filter(host_by__contains=search)
|
||||
service_name = params.get('service_name', None)
|
||||
if service_name:
|
||||
queryset = queryset.filter(params__contains=service_name)
|
||||
host_by = params.get('host_by', None)
|
||||
if host_by:
|
||||
queryset = queryset.filter(host_by__contains=host_by)
|
||||
service_name_all = '"service_name"'+': '+'"%s"' % service_name
|
||||
print(service_name_all)
|
||||
queryset = queryset.filter(params__contains=service_name_all)
|
||||
return queryset
|
||||
|
|
|
@ -45,7 +45,7 @@ class TaskAPIView(GenericViewSet,
|
|||
queryset = JobModel.objects.filter(Q(deleted_at__isnull=True) | Q(deleted_at=''))
|
||||
serializer_class = seriaizer.JobListSerializer
|
||||
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter, TaskFilter)
|
||||
search_fields = ('id', 'task_id', 'created_by__id', 'status') # 模糊查询
|
||||
search_fields = ('id', 'task_id', 'created_by__id', 'status', 'params') # 模糊查询
|
||||
filter_fields = ('id', 'task_id', 'created_by__id', 'status') # 精确查询
|
||||
authentication_classes = []
|
||||
|
||||
|
@ -114,9 +114,8 @@ class TaskAPIView(GenericViewSet,
|
|||
def list(self, request, *args, **kwargs):
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
if not queryset:
|
||||
return success([])
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
return success(serializer.data)
|
||||
return success([], total=0)
|
||||
return super(TaskAPIView, self).list(request, *args, **kwargs)
|
||||
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
instance = self.get_queryset().filter(**kwargs).first()
|
||||
|
|
|
@ -20,6 +20,7 @@ INSTALLED_APPS = [
|
|||
'apps.monitor',
|
||||
'apps.task',
|
||||
'apps.vmcore',
|
||||
'apps.alarm',
|
||||
'consumer',
|
||||
|
||||
'rest_framework',
|
||||
|
|
|
@ -24,6 +24,7 @@ urlpatterns = [
|
|||
path('', include("apps.monitor.urls")),
|
||||
path('', include("apps.task.urls")),
|
||||
path('', include("apps.vmcore.urls")),
|
||||
path('', include("apps.alarm.urls")),
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
|
|
Loading…
Reference in New Issue