mirror of
https://github.com/jumpserver/jumpserver.git
synced 2026-05-14 10:43:56 +00:00
34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from orgs.mixins.models import JMSOrgBaseModel
|
|
|
|
from .mixins import CREATABLE_REPORT_TYPES
|
|
|
|
REPORT_VISIBILITY_FILTER_FIELDS = {
|
|
'visible_charts',
|
|
'visible_tables',
|
|
}
|
|
|
|
|
|
class Report(JMSOrgBaseModel):
|
|
name = models.CharField(max_length=128, verbose_name=_('Name'))
|
|
tp = models.CharField(max_length=64, verbose_name=_('Type'))
|
|
is_builtin = models.BooleanField(default=False, verbose_name=_('Is builtin'))
|
|
is_active = models.BooleanField(default=True, verbose_name=_('Is active'))
|
|
days = models.PositiveIntegerField(default=7, verbose_name=_('Range days'))
|
|
filters = models.JSONField(default=dict, verbose_name=_('Filters'))
|
|
|
|
class Meta:
|
|
unique_together = [('org_id', 'name')]
|
|
verbose_name = _('Report')
|
|
ordering = ['-date_created']
|
|
|
|
|
|
def validate_report_payload(tp, filters):
|
|
if tp not in CREATABLE_REPORT_TYPES:
|
|
raise ValueError(f'Unsupported report type: {tp}')
|
|
allowed_keys = REPORT_VISIBILITY_FILTER_FIELDS
|
|
invalid_keys = set((filters or {}).keys()) - allowed_keys
|
|
if invalid_keys:
|
|
raise ValueError(f'Invalid filters: {", ".join(sorted(invalid_keys))}') |