1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #855: Added an API endpoint for recent activity

This commit is contained in:
Jeremy Stretch
2017-03-09 14:26:39 -05:00
parent 41826fc3cb
commit 9dfda83946
6 changed files with 55 additions and 5 deletions

View File

@ -1,7 +1,9 @@
from rest_framework import serializers from rest_framework import serializers
from dcim.api.serializers import NestedSiteSerializer from dcim.api.serializers import NestedSiteSerializer
from extras.models import Graph, TopologyMap from extras.models import ACTION_CHOICES, Graph, TopologyMap, UserAction
from users.api.serializers import NestedUserSerializer
from utilities.api import ChoiceFieldSerializer
# #
@ -40,3 +42,16 @@ class WritableTopologyMapSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = TopologyMap model = TopologyMap
fields = ['name', 'slug', 'site', 'device_patterns', 'description'] fields = ['name', 'slug', 'site', 'device_patterns', 'description']
#
# User actions
#
class UserActionSerializer(serializers.ModelSerializer):
user = NestedUserSerializer()
action = ChoiceFieldSerializer(choices=ACTION_CHOICES)
class Meta:
model = UserAction
fields = ['id', 'time', 'user', 'action', 'message']

View File

@ -8,4 +8,7 @@ router = routers.DefaultRouter()
# Topology maps # Topology maps
router.register(r'topology-maps', views.TopologyMapViewSet) router.register(r'topology-maps', views.TopologyMapViewSet)
# Recent activity
router.register(r'recent-activity', views.RecentActivityViewSet)
urlpatterns = router.urls urlpatterns = router.urls

View File

@ -1,6 +1,6 @@
from rest_framework import generics from rest_framework import generics
from rest_framework.decorators import detail_route from rest_framework.decorators import detail_route
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse
@ -9,14 +9,14 @@ from django.shortcuts import get_object_or_404
from circuits.models import Provider from circuits.models import Provider
from dcim.models import Site, Interface from dcim.models import Site, Interface
from extras import filters from extras import filters
from extras.models import Graph, TopologyMap, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_PROVIDER, GRAPH_TYPE_SITE from extras.models import Graph, TopologyMap, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_PROVIDER, GRAPH_TYPE_SITE, UserAction
from utilities.api import WritableSerializerMixin from utilities.api import WritableSerializerMixin
from . import serializers from . import serializers
class CustomFieldModelViewSet(ModelViewSet): class CustomFieldModelViewSet(ModelViewSet):
""" """
Include the applicable set of CustomField in the ModelViewSet context. Include the applicable set of CustomFields in the ModelViewSet context.
""" """
def get_serializer_context(self): def get_serializer_context(self):
@ -95,3 +95,12 @@ class TopologyMapViewSet(WritableSerializerMixin, ModelViewSet):
response['Content-Disposition'] = 'inline; filename="{}.{}"'.format(tmap.slug, img_format) response['Content-Disposition'] = 'inline; filename="{}.{}"'.format(tmap.slug, img_format)
return response return response
class RecentActivityViewSet(ReadOnlyModelViewSet):
"""
List all UserActions to provide a log of recent activity.
"""
queryset = UserAction.objects.all()
serializer_class = serializers.UserActionSerializer
filter_class = filters.UserActionFilter

View File

@ -1,9 +1,10 @@
import django_filters import django_filters
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from dcim.models import Site from dcim.models import Site
from .models import CF_TYPE_SELECT, CustomField, TopologyMap from .models import CF_TYPE_SELECT, CustomField, TopologyMap, UserAction
class CustomFieldFilter(django_filters.Filter): class CustomFieldFilter(django_filters.Filter):
@ -63,3 +64,15 @@ class TopologyMapFilter(django_filters.FilterSet):
class Meta: class Meta:
model = TopologyMap model = TopologyMap
fields = ['name', 'slug'] fields = ['name', 'slug']
class UserActionFilter(django_filters.FilterSet):
username = django_filters.ModelMultipleChoiceFilter(
name='user__username',
queryset=User.objects.all(),
to_field_name='username',
)
class Meta:
model = UserAction
fields = ['user']

View File

View File

@ -0,0 +1,10 @@
from django.contrib.auth.models import User
from rest_framework import serializers
class NestedUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username']