summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormaxbr <maxbr@mi.fu-berlin.de>2016-09-19 10:14:19 +0200
committermaxbr <maxbr@mi.fu-berlin.de>2016-09-19 10:14:19 +0200
commit3c8baae57206988fbdfc2d858ddc3f134e552f07 (patch)
treeedddd6c005b399425785fc8af3f97a520485264c
parent1375c1e7f9e21de9ea0a1c756d27caa652a7c2f2 (diff)
Add a REST API for the dashboard
JIRA: PHAROS-265 Change-Id: Ic1b2d20415b0b84473d5915c4f26f3e65bbb1ecf Signed-off-by: maxbr <maxbr@mi.fu-berlin.de>
-rw-r--r--tools/pharos-dashboard/api/__init__.py0
-rw-r--r--tools/pharos-dashboard/api/serializers.py22
-rw-r--r--tools/pharos-dashboard/api/urls.py28
-rw-r--r--tools/pharos-dashboard/api/views.py23
-rw-r--r--tools/pharos-dashboard/booking/models.py1
-rw-r--r--tools/pharos-dashboard/dashboard/urls.py1
-rw-r--r--tools/pharos-dashboard/pharos_dashboard/urls.py4
-rw-r--r--tools/pharos-dashboard/templates/base.html5
-rw-r--r--tools/pharos-dashboard/templates/rest_framework/api.html9
9 files changed, 92 insertions, 1 deletions
diff --git a/tools/pharos-dashboard/api/__init__.py b/tools/pharos-dashboard/api/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tools/pharos-dashboard/api/__init__.py
diff --git a/tools/pharos-dashboard/api/serializers.py b/tools/pharos-dashboard/api/serializers.py
new file mode 100644
index 00000000..c3875cca
--- /dev/null
+++ b/tools/pharos-dashboard/api/serializers.py
@@ -0,0 +1,22 @@
+from rest_framework import serializers
+
+from booking.models import Booking
+from dashboard.models import Server, Resource
+
+
+class BookingSerializer(serializers.HyperlinkedModelSerializer):
+ class Meta:
+ model = Booking
+ fields = ('id', 'resource', 'start', 'end', 'purpose')
+
+
+class ServerSerializer(serializers.HyperlinkedModelSerializer):
+ class Meta:
+ model = Server
+ fields = ('id', 'resource', 'name', 'model', 'cpu', 'ram', 'storage')
+
+
+class ResourceSerializer(serializers.HyperlinkedModelSerializer):
+ class Meta:
+ model = Resource
+ fields = ('id', 'name', 'description', 'url', 'server_set')
diff --git a/tools/pharos-dashboard/api/urls.py b/tools/pharos-dashboard/api/urls.py
new file mode 100644
index 00000000..22f12eb6
--- /dev/null
+++ b/tools/pharos-dashboard/api/urls.py
@@ -0,0 +1,28 @@
+"""pharos_dashboard URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/1.10/topics/http/urls/
+Examples:
+Function views
+ 1. Add an import: from my_app import views
+ 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
+Class-based views
+ 1. Add an import: from other_app.views import Home
+ 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
+Including another URLconf
+ 1. Import the include() function: from django.conf.urls import url, include
+ 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
+"""
+from django.conf.urls import url, include
+from rest_framework import routers
+
+from api.views import *
+
+router = routers.DefaultRouter()
+router.register(r'resources', ResourceViewSet)
+router.register(r'servers', ServerViewSet)
+router.register(r'bookings', BookingViewSet)
+
+urlpatterns = [
+ url(r'^', include(router.urls)),
+] \ No newline at end of file
diff --git a/tools/pharos-dashboard/api/views.py b/tools/pharos-dashboard/api/views.py
new file mode 100644
index 00000000..78d7b8a9
--- /dev/null
+++ b/tools/pharos-dashboard/api/views.py
@@ -0,0 +1,23 @@
+from rest_framework import viewsets
+
+from api.serializers import ResourceSerializer, ServerSerializer, BookingSerializer
+from booking.models import Booking
+from dashboard.models import Resource, Server
+
+
+class BookingViewSet(viewsets.ModelViewSet):
+ queryset = Booking.objects.all()
+ serializer_class = BookingSerializer
+ filter_fields = ('resource', 'user')
+
+
+class ServerViewSet(viewsets.ModelViewSet):
+ queryset = Server.objects.all()
+ serializer_class = ServerSerializer
+ filter_fields = ('resource', 'name')
+
+
+class ResourceViewSet(viewsets.ModelViewSet):
+ queryset = Resource.objects.all()
+ serializer_class = ResourceSerializer
+ filter_fields = ('name',) \ No newline at end of file
diff --git a/tools/pharos-dashboard/booking/models.py b/tools/pharos-dashboard/booking/models.py
index e772fb5b..fed35e3f 100644
--- a/tools/pharos-dashboard/booking/models.py
+++ b/tools/pharos-dashboard/booking/models.py
@@ -6,6 +6,7 @@ from jira import JIRAError
from dashboard.models import Resource
from django.conf import settings
+
class Booking(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User, models.CASCADE) # delete if user is deleted
diff --git a/tools/pharos-dashboard/dashboard/urls.py b/tools/pharos-dashboard/dashboard/urls.py
index baa2d633..35c64636 100644
--- a/tools/pharos-dashboard/dashboard/urls.py
+++ b/tools/pharos-dashboard/dashboard/urls.py
@@ -14,7 +14,6 @@ Including another URLconf
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
-
from dashboard.views import *
urlpatterns = [
diff --git a/tools/pharos-dashboard/pharos_dashboard/urls.py b/tools/pharos-dashboard/pharos_dashboard/urls.py
index d8bf5608..4a9d9149 100644
--- a/tools/pharos-dashboard/pharos_dashboard/urls.py
+++ b/tools/pharos-dashboard/pharos_dashboard/urls.py
@@ -18,12 +18,16 @@ from django.conf.urls import url, include
from django.conf.urls.static import static
from django.contrib import admin
+
urlpatterns = [
url(r'^', include('dashboard.urls', namespace='dashboard')),
url(r'^booking/', include('booking.urls', namespace='booking')),
url(r'^accounts/', include('account.urls', namespace='account')),
url(r'^admin/', admin.site.urls),
+ url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
+
+ url(r'^api/', include('api.urls'))
]
if settings.DEBUG is True:
diff --git a/tools/pharos-dashboard/templates/base.html b/tools/pharos-dashboard/templates/base.html
index 42156e3b..c5da483d 100644
--- a/tools/pharos-dashboard/templates/base.html
+++ b/tools/pharos-dashboard/templates/base.html
@@ -76,6 +76,11 @@
class="fa fa-fw"></i>Users
</a>
</li>
+ <li>
+ <a href="{% url 'api-root' %}"><i
+ class="fa fa-fw"></i>API
+ </a>
+ </li>
</ul>
</div>
<!-- /.sidebar-collapse -->
diff --git a/tools/pharos-dashboard/templates/rest_framework/api.html b/tools/pharos-dashboard/templates/rest_framework/api.html
new file mode 100644
index 00000000..9c6c4f7d
--- /dev/null
+++ b/tools/pharos-dashboard/templates/rest_framework/api.html
@@ -0,0 +1,9 @@
+{% extends "rest_framework/base.html" %}
+
+{% block title %}Pharos Dashboard API{% endblock %}
+
+{% block branding %}
+ <a class='navbar-brand' rel="nofollow" href=#>
+ Pharos Dashboard API
+ </a>
+{% endblock %} \ No newline at end of file