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 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:
model = TopologyMap
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
router.register(r'topology-maps', views.TopologyMapViewSet)
# Recent activity
router.register(r'recent-activity', views.RecentActivityViewSet)
urlpatterns = router.urls

View File

@ -1,6 +1,6 @@
from rest_framework import generics
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.http import Http404, HttpResponse
@ -9,14 +9,14 @@ from django.shortcuts import get_object_or_404
from circuits.models import Provider
from dcim.models import Site, Interface
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 . import serializers
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):
@ -95,3 +95,12 @@ class TopologyMapViewSet(WritableSerializerMixin, ModelViewSet):
response['Content-Disposition'] = 'inline; filename="{}.{}"'.format(tmap.slug, img_format)
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
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
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):
@ -63,3 +64,15 @@ class TopologyMapFilter(django_filters.FilterSet):
class Meta:
model = TopologyMap
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']