diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index e9a1bd61e..5633f71b5 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -7,7 +7,7 @@ from dcim.models import ( DeviceBay, DeviceBayTemplate, DeviceType, DeviceRole, IFACE_FF_CHOICES, IFACE_ORDERING_CHOICES, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RACK_FACE_CHOICES, RACK_TYPE_CHOICES, - RACK_WIDTH_CHOICES, Region, Site, STATUS_CHOICES, SUBDEVICE_ROLE_CHOICES, + RACK_WIDTH_CHOICES, Region, Site, STATUS_CHOICES, SUBDEVICE_ROLE_CHOICES, HistoryLog, HistoryRole, ) from extras.api.customfields import CustomFieldModelSerializer from tenancy.api.serializers import NestedTenantSerializer @@ -688,3 +688,47 @@ class WritableInterfaceConnectionSerializer(serializers.ModelSerializer): class Meta: model = InterfaceConnection fields = ['id', 'interface_a', 'interface_b', 'connection_status'] + + +# +# Device History Logs +# + +class HistoryRoleSerializer(serializers.ModelSerializer): + + class Meta: + model = HistoryRole + fields = ['id', 'name', 'slug', 'color'] + + +class NestedHistoryRoleSerializer(serializers.ModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:historyrole-detail') + + class Meta: + model = HistoryRole + fields = ['id', 'url', 'name', 'slug'] + + +class HistoryLogSerializer(CustomFieldModelSerializer): + role = NestedHistoryRoleSerializer() + device = NestedDeviceSerializer() + + class Meta: + model = HistoryLog + fields = ['id', 'time', 'device', 'user', 'role', 'message'] + + +class NestedHistoryLogSerializer(serializers.ModelSerializer): + role = NestedHistoryRoleSerializer() + device = NestedDeviceSerializer() + + class Meta: + model = HistoryLog + fields = ['id', 'role', 'device', 'message'] + + +class WritableHistoryLogSerializer(serializers.ModelSerializer): + + class Meta: + model = HistoryLog + fields = ['id', 'time', 'device', 'user', 'role', 'message'] diff --git a/netbox/dcim/api/urls.py b/netbox/dcim/api/urls.py index f648c869d..6b762c83f 100644 --- a/netbox/dcim/api/urls.py +++ b/netbox/dcim/api/urls.py @@ -49,6 +49,8 @@ router.register(r'power-outlets', views.PowerOutletViewSet) router.register(r'interfaces', views.InterfaceViewSet) router.register(r'device-bays', views.DeviceBayViewSet) router.register(r'inventory-items', views.InventoryItemViewSet) +router.register(r'history-log', views.HistoryLogViewSet) +router.register(r'history-roles', views.HistoryRoleViewSet) # Interface connections router.register(r'interface-connections', views.InterfaceConnectionViewSet) diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 77344f4fa..b64e5af0d 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -10,7 +10,7 @@ from dcim.models import ( ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, - RackRole, Region, Site, + RackRole, Region, Site, HistoryLog, HistoryRole, ) from dcim import filters from extras.api.serializers import RenderedGraphSerializer @@ -301,6 +301,18 @@ class InventoryItemViewSet(WritableSerializerMixin, ModelViewSet): filter_class = filters.InventoryItemFilter +class HistoryLogViewSet(WritableSerializerMixin, ModelViewSet): + queryset = HistoryLog.objects.select_related('device') + serializer_class = serializers.HistoryLogSerializer + write_serializer_class = serializers.WritableHistoryLogSerializer + filter_class = filters.HistoryLogFilter + + +class HistoryRoleViewSet(ModelViewSet): + queryset = HistoryRole.objects.all() + serializer_class = serializers.HistoryRoleSerializer + + # # Interface connections # diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 106607ee8..01e37237c 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -10,7 +10,7 @@ from .models import ( ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, IFACE_FF_LAG, Interface, InterfaceTemplate, Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, - RackRole, Region, Site, VIRTUAL_IFACE_TYPES, + RackRole, Region, Site, VIRTUAL_IFACE_TYPES, HistoryLog ) @@ -487,8 +487,8 @@ class InventoryItemFilter(DeviceComponentFilterSet): class HistoryLogFilter(DeviceComponentFilterSet): class Meta: - model = InventoryItem - fields = ['name'] + model = HistoryLog + fields = ['role'] class ConsoleConnectionFilter(django_filters.FilterSet): site = django_filters.CharFilter(