45 lines
1.7 KiB
Python
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']
|