Beispiel #1
0
class InputRequestLog(InputRequestLogStrMixin, RequestLog):

    user_id = models.TextField(
        null=True,
        blank=True,
        db_index=True
    )
    ip = models.GenericIPAddressField(
        null=False,
        blank=False,
        db_index=True
    )
    view_slug = models.CharField(
        null=True,
        blank=True,
        db_index=True,
        max_length=255
    )
    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        ordering = ('-start',)

    @cached_property
    def user(self):
        return get_user_model().objects.filter(pk=self.user_id).first()
Beispiel #2
0
class OutputRequestLog(OutputRequestLogStrMixin, RequestLog):

    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        ordering = ('-start',)

    class SmartMeta:
        is_cleaned_pre_save = False
Beispiel #3
0
class OutputLoggedRequest(LoggedRequest):

    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        verbose_name = _('output logged request')
        verbose_name_plural = _('output logged requests')
        ordering = ('-created_at', )

    class SmartMeta:
        is_cleaned_pre_save = False
Beispiel #4
0
class CommandLog(CommandLogStrMixin, Log):
    """
    Represents a log of a command run.

    Attributes:
        start: Date and time when command was started.
        stop: Date and time when command finished.
        time: Command processing time in miliseconds.
        name: Name of the command.
        options: Arguments/options the command was run with.
        is_executed_from_command_line: Flag that indicates if command was run from the command line.
        output: Standard and error output of the command.
        is_successful: Flag that indicates if command finished successfully.
    """
    name = models.CharField(
        max_length=250,
        blank=False,
        null=False,
        editable=False,
        db_index=True
    )
    input = models.TextField(
        blank=False,
        null=False,
        editable=False
    )
    is_executed_from_command_line = models.BooleanField(
        blank=False,
        null=False,
        default=False,
        editable=False
    )
    output = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    state = IntegerEnumField(
        null=False,
        blank=False,
        enum=CommandState,
        default=CommandState.ACTIVE,
        db_index=True
    )
    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        ordering = ('-start',)
Beispiel #5
0
class InputLoggedRequest(LoggedRequest):

    user_id = models.TextField(verbose_name=_('user ID'),
                               null=True,
                               blank=True,
                               db_index=True)
    ip = models.GenericIPAddressField(_('IP address'),
                                      null=False,
                                      blank=False,
                                      db_index=True)
    type = NumEnumField(verbose_name=_('type'),
                        enum=InputLoggedRequestType,
                        default=InputLoggedRequestType.COMMON_REQUEST,
                        null=False,
                        blank=False,
                        db_index=True)
    related_objects = MultipleDBGenericManyToManyField()

    objects = InputLoggedRequestManager.from_queryset(BaseLogQuerySet)()

    class Meta:
        verbose_name = _('input logged request')
        verbose_name_plural = _('input logged requests')
        ordering = ('-created_at', )

    class SmartMeta:
        is_cleaned_pre_save = False

    @cached_property
    def user(self):
        return get_user_model().objects.filter(pk=self.user_id).first()

    def update_from_response(self, response):
        self.response_timestamp = timezone.now()
        self.response_time = (self.response_timestamp -
                              self.request_timestamp).total_seconds()
        self.status = self.get_status(response.status_code)
        self.response_code = response.status_code
        self.response_headers = clean_headers(dict(response.items()))

        if (not response.streaming
                and settings.LOG_RESPONSE_BODY_CONTENT_TYPES is not None
                and response.get('content-type', '').split(';')[0]
                in settings.LOG_RESPONSE_BODY_CONTENT_TYPES):
            response_body = clean_body(response.content,
                                       settings.LOG_RESPONSE_BODY_LENGTH)
        else:
            response_body = ''

        self.response_body = response_body
Beispiel #6
0
class CeleryTaskRunLog(CeleryTaskRunLogStrMixin, Log):

    celery_task_id = models.UUIDField(
        max_length=250,
        db_index=True,
        null=True,
        blank=True
    )
    name = models.CharField(
        null=False,
        blank=False,
        max_length=250,
        db_index=True
    )
    queue_name = models.CharField(
        null=True,
        blank=True,
        max_length=250
    )
    input = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    task_args = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    task_kwargs = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    state = IntegerEnumField(
        null=False,
        blank=False,
        enum=CeleryTaskRunLogState,
        default=CeleryTaskRunLogState.ACTIVE,
        db_index=True
    )
    result = models.JSONField(
        blank=True,
        null=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    output = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    retries = models.PositiveSmallIntegerField(
        null=False,
        blank=False,
        default=0
    )
    estimated_time_of_next_retry = models.DateTimeField(
        null=True,
        blank=True
    )
    waiting_time = models.FloatField(
        null=True,
        blank=True
    )
    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        ordering = ('-start',)

    def __str__(self):
        return '{} ({})'.format(self.name, self.get_state_display())

    def get_task_invocation_logs(self):
        return CeleryTaskInvocationLog.objects.filter(celery_task_id=self.celery_task_id)
Beispiel #7
0
class CeleryTaskInvocationLog(CeleryTaskInvocationLogStrMixin, Log):

    celery_task_id = models.UUIDField(
        max_length=250,
        db_index=True,
        null=True,
        blank=True
    )
    name = models.CharField(
        null=False,
        blank=False,
        max_length=250,
        db_index=True
    )
    queue_name = models.CharField(
        null=True,
        blank=True,
        max_length=250
    )
    applied_at = models.DateTimeField(
        null=False,
        blank=False
    )
    triggered_at = models.DateTimeField(
        null=True,
        blank=True
    )
    is_unique = models.BooleanField()
    is_async = models.BooleanField()
    is_on_commit = models.BooleanField()
    input = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    task_args = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    task_kwargs = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    estimated_time_of_first_arrival = models.DateTimeField(
        null=True,
        blank=True
    )
    expires_at = models.DateTimeField(
        null=True,
        blank=True
    )
    stale_at = models.DateTimeField(
        null=True,
        blank=True
    )
    state = IntegerEnumField(
        null=False,
        blank=False,
        enum=CeleryTaskInvocationLogState,
        default=CeleryTaskInvocationLogState.WAITING,
        db_index=True
    )

    related_objects = MultipleDBGenericManyToManyField()

    objects = CeleryTaskInvocationLogManager.from_queryset(BaseLogQuerySet)()

    class Meta:
        ordering = ('-start',)

    def __str__(self):
        return '{} ({})'.format(self.name, self.state.label)

    @property
    def runs(self):
        return CeleryTaskRunLog.objects.filter(celery_task_id=self.celery_task_id)

    @property
    def last_run(self):
        return CeleryTaskRunLog.objects.filter(celery_task_id=self.celery_task_id).first()

    @property
    def first_run(self):
        return CeleryTaskRunLog.objects.filter(celery_task_id=self.celery_task_id).last()
Beispiel #8
0
class CeleryTaskRunLog(SmartModel):

    celery_task_id = models.CharField(verbose_name=_('celery ID'),
                                      null=False,
                                      blank=False,
                                      max_length=250,
                                      db_index=True)
    start = models.DateTimeField(verbose_name=_('start'),
                                 null=True,
                                 blank=True)
    stop = models.DateTimeField(verbose_name=_('stop'), null=True, blank=True)
    time = models.FloatField(verbose_name=_('time'), null=True, blank=True)
    state = NumEnumField(verbose_name=_('state'),
                         null=False,
                         blank=False,
                         enum=CeleryTaskRunLogState,
                         default=CeleryTaskRunLogState.ACTIVE,
                         db_index=True)
    name = models.CharField(verbose_name=_('task name'),
                            null=False,
                            blank=False,
                            max_length=250,
                            db_index=True)
    task_args = models.JSONField(verbose_name=_('task args'),
                                 null=True,
                                 blank=True,
                                 editable=False,
                                 encoder=DjangoJSONEncoder)
    task_kwargs = models.JSONField(verbose_name=_('task kwargs'),
                                   null=True,
                                   blank=True,
                                   editable=False,
                                   encoder=DjangoJSONEncoder)
    result = models.JSONField(verbose_name=_('result'),
                              blank=True,
                              null=True,
                              editable=False,
                              encoder=DjangoJSONEncoder)
    error_message = models.TextField(verbose_name=_('error message'),
                                     null=True,
                                     blank=True)
    output = models.TextField(verbose_name=_('output'),
                              blank=True,
                              null=True,
                              editable=False)
    retries = models.PositiveSmallIntegerField(verbose_name=_('retries'),
                                               null=False,
                                               blank=False,
                                               default=0)
    estimated_time_of_next_retry = models.DateTimeField(
        verbose_name=_('estimated time of arrival'), null=True, blank=True)
    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        verbose_name = _('celery task run')
        verbose_name_plural = _('celery tasks run')
        ordering = ('created_at', )

    def __str__(self):
        return '{} ({})'.format(self.name, self.get_state_display())

    def get_task_log(self):
        return CeleryTaskLog.objects.filter(
            celery_task_id=self.celery_task_id).first()

    get_task_log.short_description = _('celery task')
Beispiel #9
0
class CeleryTaskLog(SmartModel):

    celery_task_id = models.CharField(verbose_name=_('celery ID'),
                                      null=False,
                                      blank=False,
                                      max_length=250,
                                      db_index=True)
    name = models.CharField(verbose_name=_('task name'),
                            null=False,
                            blank=False,
                            max_length=250,
                            db_index=True)
    queue_name = models.CharField(verbose_name=_('queue name'),
                                  null=True,
                                  blank=True,
                                  max_length=250)
    input = models.TextField(verbose_name=_('input'),
                             blank=True,
                             null=True,
                             editable=False)
    task_args = models.JSONField(verbose_name=_('task args'),
                                 null=True,
                                 blank=True,
                                 editable=False,
                                 encoder=DjangoJSONEncoder)
    task_kwargs = models.JSONField(verbose_name=_('task kwargs'),
                                   null=True,
                                   blank=True,
                                   editable=False,
                                   encoder=DjangoJSONEncoder)
    estimated_time_of_first_arrival = models.DateTimeField(
        verbose_name=_('estimated time of first arrival'),
        null=False,
        blank=False)
    expires = models.DateTimeField(verbose_name=_('time of expiration'),
                                   null=True,
                                   blank=True)
    stale = models.DateTimeField(verbose_name=_('stale task time'),
                                 null=True,
                                 blank=True)
    state = NumEnumField(verbose_name=_('state'),
                         null=False,
                         blank=False,
                         enum=CeleryTaskLogState,
                         default=CeleryTaskLogState.WAITING,
                         db_index=True)

    related_objects = MultipleDBGenericManyToManyField()

    objects = CeleryTaskLogManager.from_queryset(BaseLogQuerySet)()

    class Meta:
        verbose_name = _('celery task')
        verbose_name_plural = _('celery tasks')
        ordering = ('-created_at', )

    class UIMeta:
        default_ui_filter_by = 'id'

    def __str__(self):
        return '{} ({})'.format(self.name, self.state.label)

    @property
    def runs(self):
        return CeleryTaskRunLog.objects.filter(
            celery_task_id=self.celery_task_id)

    @property
    def last_run(self):
        return CeleryTaskRunLog.objects.filter(
            celery_task_id=self.celery_task_id).last()

    @property
    def first_run(self):
        return CeleryTaskRunLog.objects.filter(
            celery_task_id=self.celery_task_id).first()

    def get_start(self):
        first_run = self.first_run
        return first_run.start if first_run else None

    get_start.short_description = _('start')

    def get_stop(self):
        last_run = self.last_run
        return last_run.stop if last_run else None

    get_stop.short_description = _('stop')
Beispiel #10
0
class CommandLog(SmartModel):
    """
    Represents a log of a command run.

    Attributes:
        start: Date and time when command was started.
        stop: Date and time when command finished.
        time: Command processing time in miliseconds.
        name: Name of the command.
        options: Arguments/options the command was run with.
        executed_from_command_line: Flag that indicates if command was run from the command line.
        output: Standard and error output of the command.
        is_successful: Flag that indicates if command finished successfully.
    """
    start = models.DateTimeField(verbose_name=_('start'),
                                 blank=False,
                                 null=False,
                                 editable=False)
    stop = models.DateTimeField(verbose_name=_('stop'),
                                blank=True,
                                null=True,
                                editable=False)
    time = models.FloatField(verbose_name=_('time'), null=True, blank=True)
    name = models.CharField(max_length=250,
                            blank=False,
                            null=False,
                            editable=False,
                            db_index=True,
                            verbose_name=_('name'))
    input = models.TextField(verbose_name=_('input'),
                             blank=False,
                             null=False,
                             editable=False)
    executed_from_command_line = models.BooleanField(
        verbose_name=_('executed from command line'),
        blank=False,
        null=False,
        default=False,
        editable=False)
    output = models.TextField(verbose_name=_('output'),
                              blank=True,
                              null=True,
                              editable=False)
    is_successful = models.BooleanField(
        verbose_name=_('finished successfully'),
        blank=False,
        null=False,
        default=False,
        editable=False)
    error_message = models.TextField(verbose_name=_('error message'),
                                     null=True,
                                     blank=True,
                                     editable=False)
    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        verbose_name = _('command log')
        verbose_name_plural = _('command logs')
        ordering = ('-created_at', )

    class UIMeta:
        default_ui_filter_by = 'id'
Beispiel #11
0
class MultipleDBGenericManyToManyModel(models.Model):

    related_objects = MultipleDBGenericManyToManyField()