Files
jumpserver/apps/reports/models.py
2026-03-30 22:33:27 +08:00

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))}')