old_console/devices/serializers/device.py
2024-11-02 14:12:45 +03:00

45 lines
1.7 KiB
Python

from rest_framework import serializers
from devices.enums import DeviceType
from devices.fields import DeviceRelatedField, DeviceGroupRelatedField
from devices.models.device import Device, DeviceGroup
from devices.services.endpoint.endpoint_get_status import EndpointStatusService
from devices.services.firewall import FirewallService
from devices.services.sensor.service import SensorService
class DeviceSerializer(serializers.ModelSerializer):
status = serializers.SerializerMethodField()
group = DeviceGroupRelatedField(queryset=DeviceGroup.objects.all(), default=None)
class Meta:
model = Device
fields = ['id', 'name', 'description', 'type', 'ip', 'port', 'updated', 'status', 'group']
def get_status(self, device: Device):
if device.type == DeviceType.FIREWALL:
return FirewallService(device).check_status()
elif device.type == DeviceType.ENDPOINT:
return EndpointStatusService(device).get_status()
elif device.type == DeviceType.SENSOR:
return SensorService(device).get_status()
class DeviceGroupSerializer(serializers.ModelSerializer):
devices = DeviceRelatedField(many=True, queryset=Device.objects.all(), default=[])
class Meta:
model = DeviceGroup
fields = ['id', 'name', 'description', 'devices']
class ExportToCSVDeviceSerializer(serializers.ModelSerializer):
group = serializers.ReadOnlyField(source='group.name', allow_null=True)
class Meta:
model = Device
# You need to explicitly list all fields, because then this list is passed to the function csv_export
# to create columns
fields = ['id', 'type', 'name', 'description', 'ip', 'port', 'group', 'updated']