old_console/incident_export/models.py
2024-11-02 14:12:45 +03:00

69 lines
3.7 KiB
Python

from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy
from django.db import models
from core.fields import IntegerField
from core.validators import domain_or_ip_validator
from incident_export.enums import ReceiverType, SeverityLevel, SysLogSendProtocol
class Receiver(models.Model):
""" Model for storing export receiver """
type = models.CharField(max_length=64,
choices=ReceiverType.choices,
verbose_name=gettext_lazy("Type"),
help_text=gettext_lazy("Type of receiver"),
default=ReceiverType.SYSLOG)
cef_format = models.BooleanField(default=True,
verbose_name=gettext_lazy("CEF formatting"),
help_text=gettext_lazy("Format using CEF standard"))
message_filter = models.CharField(max_length=255,
validators=[RegexValidator],
verbose_name=gettext_lazy("Message filter"),
blank=True,
help_text=gettext_lazy("Regular expression for message filtering"))
message_min_severity = models.IntegerField(verbose_name=gettext_lazy("Message minimum severity level"),
choices=SeverityLevel.choices,
default=SeverityLevel.MINIMAL,
help_text=gettext_lazy("Minimum event severity level to send"))
export_status = models.BooleanField(verbose_name=gettext_lazy("Event receiver export status. Could be on or off"),
default=True,
help_text=gettext_lazy("Set the event receiver status - on or off"))
class SyslogReceiver(models.Model):
""" Model for receiver if type = SYSLOG """
receiver = models.OneToOneField(Receiver, on_delete=models.CASCADE)
protocol = models.CharField(max_length=32,
choices=SysLogSendProtocol.choices,
verbose_name=gettext_lazy("Send protocol"),
help_text=gettext_lazy("Select send protocol"))
host = models.CharField(verbose_name=gettext_lazy("Recipient's IP address"),
max_length=100,
help_text=gettext_lazy("Enter the recipient's IP address"),
validators=[domain_or_ip_validator])
port = IntegerField(min_value=0,
max_value=65535,
verbose_name=gettext_lazy("Destination port"),
help_text=gettext_lazy("Enter destination port"))
class OpcuaReceiver(models.Model):
""" Model for receiver if type = OPCUA """
receiver = models.OneToOneField(Receiver, on_delete=models.CASCADE)
host = models.CharField(verbose_name=gettext_lazy("Recipient's IP address"),
max_length=100,
help_text=gettext_lazy("Enter the recipient's IP address"),
validators=[domain_or_ip_validator])
port = IntegerField(min_value=0,
max_value=65535,
verbose_name=gettext_lazy("Destination port"),
help_text=gettext_lazy("Enter destination port"))
# TODO Examine how to handle node number, as it can vary on different servers
node_number = IntegerField(min_value=1,
max_value=254,
verbose_name=gettext_lazy("OPC UA node number"),
help_text=gettext_lazy("Enter OPC UA node number"))