Add API support for Device History Log

This commit is contained in:
Mark 2017-04-02 01:34:15 +02:00
parent 6a9ec035d6
commit 433f9119d2
4 changed files with 63 additions and 5 deletions

View File

@ -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']

View File

@ -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)

View File

@ -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
#

View File

@ -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(