fix: es命令记录可以看到其他资产执行的命令

pull/12394/head
wangruidong 2023-12-20 17:45:18 +08:00 committed by Bryan
parent 9f67ba573c
commit 98c9cddcbf
3 changed files with 27 additions and 11 deletions

View File

@ -228,6 +228,18 @@ class ES(object):
datetime_range['lte'] = datetime__lte
return 'datetime', datetime_range
@staticmethod
def handle_exact_fields(exact):
_filter = []
for k, v in exact.items():
query = 'term'
if isinstance(v, list):
query = 'terms'
_filter.append({
query: {k: v}
})
return _filter
def get_query_body(self, **kwargs):
new_kwargs = {}
for k, v in kwargs.items():
@ -235,6 +247,8 @@ class ES(object):
v = str(v)
if k == 'pk':
k = 'id'
if k.endswith('__in'):
k = k.replace('__in', '')
new_kwargs[k] = v
kwargs = new_kwargs
@ -287,11 +301,8 @@ class ES(object):
{'match': {k: v}} for k, v in match.items()
],
'should': should,
'filter': [
{
'term': {k: v}
} for k, v in exact.items()
] + [
'filter': self.handle_exact_fields(exact) +
[
{
'range': {
time_field_name: time_range

View File

@ -167,7 +167,6 @@ class CommandViewSet(JMSBulkModelViewSet):
def get_queryset(self):
command_storage_id = self.request.query_params.get('command_storage_id')
asset_id = self.request.query_params.get('asset_id')
if not command_storage_id:
return Command.objects.none()
@ -176,9 +175,6 @@ class CommandViewSet(JMSBulkModelViewSet):
raise StorageInvalid
else:
qs = storage.get_command_queryset()
if asset_id:
session_ids = Session.objects.filter(asset_id=asset_id).values_list('id', flat=True)
qs = qs.filter(session__in=list(session_ids))
return qs
def create(self, request, *args, **kwargs):

View File

@ -2,7 +2,7 @@ from django.db.models import QuerySet
from django_filters import rest_framework as filters
from orgs.utils import filter_org_queryset
from terminal.models import Command, CommandStorage
from terminal.models import Command, CommandStorage, Session
class CommandFilter(filters.FilterSet):
@ -13,7 +13,7 @@ class CommandFilter(filters.FilterSet):
user = filters.CharFilter(lookup_expr='startswith')
input = filters.CharFilter(lookup_expr='icontains')
asset = filters.CharFilter(field_name='asset', lookup_expr='icontains')
asset_id = filters.UUIDFilter(method='do_nothing')
asset_id = filters.UUIDFilter(method='filter_by_asset_id')
class Meta:
model = Command
@ -48,6 +48,15 @@ class CommandFilter(filters.FilterSet):
qs = qs.filter(**filters)
return qs
def filter_by_asset_id(self, queryset, name, value):
asset_id = self.form.cleaned_data.get('asset_id')
filters = {}
if asset_id:
session_ids = Session.objects.filter(asset_id=asset_id).values_list('id', flat=True)
filters['session__in'] = list(session_ids)
queryset = queryset.filter(**filters)
return queryset
class CommandFilterForStorageTree(CommandFilter):
asset = filters.CharFilter(method='do_nothing')