Skip to content

Commit

Permalink
feat: 解除屏蔽的api,参数id默认支持列表 --story=120710255 (TencentBlueKing#3921)
Browse files Browse the repository at this point in the history
  • Loading branch information
HACK-WU authored Nov 18, 2024
1 parent adb8b0c commit 0bfd075
Showing 1 changed file with 28 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from bkmonitor.documents.alert import AlertDocument
from bkmonitor.documents.base import BulkActionType
from bkmonitor.models import Event, Shield
from bkmonitor.utils.common_utils import logger
from bkmonitor.utils.request import get_request, get_request_username
from bkmonitor.utils.time_tools import (
DEFAULT_FORMAT,
Expand All @@ -31,6 +32,7 @@
strftime_local,
utc2biz_str,
)
from bkmonitor.utils.user import get_global_user
from bkmonitor.views import serializers
from constants.shield import ScopeType, ShieldCategory, ShieldStatus
from core.drf_resource import resource
Expand Down Expand Up @@ -510,18 +512,34 @@ class DisableShieldResource(Resource):
"""

class RequestSerializer(serializers.Serializer):
id = serializers.IntegerField(required=True, label="屏蔽id")
id = serializers.ListField(required=True, child=serializers.IntegerField(), min_length=1, label="屏蔽id列表")

def perform_request(self, data):
try:
shield = Shield.objects.get(id=data["id"])
except Shield.DoesNotExist:
raise ShieldNotExist({"msg": data["id"]})
def to_internal_value(self, data):
data["id"] = data.get("id", [])
# 确保"id"字段始终是一个列表
if not isinstance(data["id"], list):
data["id"] = [data["id"]]

return super().to_internal_value(data)

if shield.is_enabled:
shield.is_enabled = False
shield.failure_time = now()
shield.save()
def perform_request(self, data):
username = get_global_user() or "unknown"
shields = Shield.objects.filter(pk__in=data["id"])
update_shields = []
for shield in shields:
if shield.is_enabled:
shield.is_enabled = False
shield.failure_time = now()
shield.update_user = username # 记录最后的操作人
update_shields.append(shield)
Shield.objects.bulk_update(update_shields, ["is_enabled", "failure_time", "update_user"])

# 检查是否有不存在的屏蔽对象ID
existing_ids = {shield.id for shield in shields}
missing_ids = set(data["id"]) - existing_ids

if missing_ids:
logger.warning("Alarm shield ids does not exist: {}".format(list(missing_ids)))
return "success"


Expand Down

0 comments on commit 0bfd075

Please sign in to comment.