diff --git a/apps/common/templatetags/common_tags.py b/apps/common/templatetags/common_tags.py index 6919e1228..ee6c4bdfb 100644 --- a/apps/common/templatetags/common_tags.py +++ b/apps/common/templatetags/common_tags.py @@ -2,7 +2,6 @@ from django import template from django.utils import timezone -from django.conf import settings from django.utils.html import escape from audits.backends import command_store diff --git a/apps/terminal/api.py b/apps/terminal/api.py index e58d72bbb..a0b930d4b 100644 --- a/apps/terminal/api.py +++ b/apps/terminal/api.py @@ -84,7 +84,7 @@ class StatusViewSet(viewsets.ModelViewSet): for session_data in self.request.data.get("sessions", []): self.create_or_update_session(session_data) if not session_data["is_finished"]: - sessions_active.append(session_data["uuid"]) + sessions_active.append(session_data["id"]) sessions_in_db_active = Session.objects.filter( is_finished=False, @@ -92,15 +92,15 @@ class StatusViewSet(viewsets.ModelViewSet): ) for session in sessions_in_db_active: - if str(session.uuid) not in sessions_active: + if str(session.id) not in sessions_active: session.is_finished = True session.date_end = timezone.now() session.save() def create_or_update_session(self, session_data): session_data["terminal"] = self.request.user.terminal.id - _uuid = session_data["uuid"] - session = get_object_or_none(Session, uuid=_uuid) + _id = session_data["id"] + session = get_object_or_none(Session, id=_id) if session: serializer = SessionSerializer( data=session_data, instance=session @@ -210,7 +210,7 @@ class CommandViewSet(viewsets.ViewSet): permission_classes = (IsSuperUserOrAppUser,) def get_queryset(self): - self.command_store.all() + self.command_store.filter(**dict(self.request.data)) def create(self, request, *args, **kwargs): serializer = self.serializer_class(data=request.data, many=True) @@ -221,7 +221,6 @@ class CommandViewSet(viewsets.ViewSet): else: return Response("save error", status=500) else: - print(serializer.errors) return Response({"msg": "Not valid: {}".format(serializer.errors)}, status=401) def list(self, request, *args, **kwargs): diff --git a/apps/terminal/backends/command/base.py b/apps/terminal/backends/command/base.py index bb6838809..0aa689738 100644 --- a/apps/terminal/backends/command/base.py +++ b/apps/terminal/backends/command/base.py @@ -14,9 +14,8 @@ class CommandBase(object): pass @abc.abstractmethod - def filter(self, date_from=None, date_to=None, user=None, - asset=None, system_user=None, command=None, session=None): + def filter(self, date_from=None, date_to=None, + user=None, asset=None, system_user=None, + input=None, session=None): pass - - diff --git a/apps/terminal/backends/command/db.py b/apps/terminal/backends/command/db.py index 3034d374b..27ee19a14 100644 --- a/apps/terminal/backends/command/db.py +++ b/apps/terminal/backends/command/db.py @@ -37,27 +37,26 @@ class CommandStore(CommandBase): )) return self.model.objects.bulk_create(_commands) - def filter(self, date_from=None, date_to=None, user=None, - asset=None, system_user=None, _input=None, session=None): + def filter(self, date_from=None, date_to=None, + user=None, asset=None, system_user=None, + input=None, session=None): filter_kwargs = {} + date_from_default = timezone.now() - datetime.timedelta(days=7) + date_to_default = timezone.now() + + date_from = date_from if date_from else date_from_default + date_to = date_to if date_to else date_to_default + filter_kwargs['timestamp__gte'] = int(date_from.timestamp()) + filter_kwargs['timestamp__lte'] = int(date_to.timestamp()) - if date_from: - filter_kwargs['timestamp__gte'] = int(date_from.timestamp()) - else: - week_ago = timezone.now() - datetime.timedelta(days=7) - filter_kwargs['timestamp__gte'] = int(week_ago.timestamp()) - if date_to: - filter_kwargs['timestamp__lte'] = int(date_to.timestamp()) - else: - filter_kwargs['timestamp__lte'] = int(timezone.now().timestamp()) if user: - filter_kwargs['user'] = user + filter_kwargs["user"] = user if asset: filter_kwargs['asset'] = asset if system_user: filter_kwargs['system_user'] = system_user - if _input: - filter_kwargs['input__icontains'] = _input + if input: + filter_kwargs['input__icontains'] = input if session: filter_kwargs['session'] = session diff --git a/apps/terminal/backends/command/models.py b/apps/terminal/backends/command/models.py index f21ff7b81..181fe2200 100644 --- a/apps/terminal/backends/command/models.py +++ b/apps/terminal/backends/command/models.py @@ -11,7 +11,7 @@ class AbstractSessionCommand(models.Model): asset = models.CharField(max_length=128, verbose_name=_("Asset")) system_user = models.CharField(max_length=64, verbose_name=_("System user")) input = models.CharField(max_length=128, db_index=True, verbose_name=_("Input")) - output = models.CharField(max_length=1024, verbose_name=_("Output")) + output = models.CharField(max_length=1024, blank=True, verbose_name=_("Output")) session = models.CharField(max_length=36, db_index=True, verbose_name=_("Session")) timestamp = models.IntegerField(db_index=True) diff --git a/apps/terminal/backends/command/serializers.py b/apps/terminal/backends/command/serializers.py index 4b740c8f0..634a81b36 100644 --- a/apps/terminal/backends/command/serializers.py +++ b/apps/terminal/backends/command/serializers.py @@ -10,7 +10,7 @@ class SessionCommandSerializer(serializers.Serializer): asset = serializers.CharField(max_length=128) system_user = serializers.CharField(max_length=64) input = serializers.CharField(max_length=128) - output = serializers.CharField(max_length=1024) + output = serializers.CharField(max_length=1024, allow_blank=True) session = serializers.CharField(max_length=36) timestamp = serializers.IntegerField() diff --git a/apps/terminal/models.py b/apps/terminal/models.py index bfe742f45..fa6f219ac 100644 --- a/apps/terminal/models.py +++ b/apps/terminal/models.py @@ -86,7 +86,7 @@ class Session(models.Model): ('WT', 'Web Terminal'), ) - uuid = models.UUIDField(default=uuid.uuid4, db_index=True) + id = models.UUIDField(default=uuid.uuid4, primary_key=True) user = models.CharField(max_length=128, verbose_name=_("User")) asset = models.CharField(max_length=1024, verbose_name=_("Asset")) system_user = models.CharField(max_length=128, verbose_name=_("System User")) @@ -126,3 +126,4 @@ class Command(AbstractSessionCommand): class Meta: db_table = "terminal_command" + ordering = ('timestamp',) diff --git a/apps/terminal/serializers.py b/apps/terminal/serializers.py index de108a878..600e279e7 100644 --- a/apps/terminal/serializers.py +++ b/apps/terminal/serializers.py @@ -5,7 +5,7 @@ from django.utils import timezone from rest_framework import serializers from .models import Terminal, Status, Session, Task -from .hands import ProxyLog +from .backends import get_command_store class TerminalSerializer(serializers.ModelSerializer): @@ -36,11 +36,16 @@ class TerminalSerializer(serializers.ModelSerializer): class SessionSerializer(serializers.ModelSerializer): + command_amount = serializers.SerializerMethodField() + command_store = get_command_store() class Meta: model = Session fields = '__all__' + def get_command_amount(self, obj): + return len(self.command_store.filter(session=obj.session)) + class StatusSerializer(serializers.ModelSerializer): diff --git a/apps/terminal/templates/terminal/session_detail.html b/apps/terminal/templates/terminal/session_detail.html index 0fa28b517..116ac3c9b 100644 --- a/apps/terminal/templates/terminal/session_detail.html +++ b/apps/terminal/templates/terminal/session_detail.html @@ -22,7 +22,7 @@