mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-27 07:02:26 +00:00
API: Generic services views
This commit is contained in:
parent
d509643dfe
commit
ee3f4fb598
3 changed files with 125 additions and 2 deletions
|
@ -18,7 +18,37 @@
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
"""api.serializers
|
"""
|
||||||
|
|
||||||
Serializers for the API app
|
Serializers for the API app
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from rest_framework import serializers
|
||||||
|
from machines.models import Service_link
|
||||||
|
|
||||||
|
|
||||||
|
class ServiceLinkSerializer(serializers.ModelSerializer):
|
||||||
|
name = serializers.CharField(source='service.service_type')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Service_link
|
||||||
|
fields = ('name',)
|
||||||
|
|
||||||
|
|
||||||
|
class ServicesSerializer(serializers.ModelSerializer):
|
||||||
|
"""Evaluation d'un Service, et serialisation"""
|
||||||
|
server = serializers.SerializerMethodField('get_server_name')
|
||||||
|
service = serializers.SerializerMethodField('get_service_name')
|
||||||
|
need_regen = serializers.SerializerMethodField('get_regen_status')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Service_link
|
||||||
|
fields = ('server', 'service', 'need_regen')
|
||||||
|
|
||||||
|
def get_server_name(self, obj):
|
||||||
|
return str(obj.server.domain.name)
|
||||||
|
|
||||||
|
def get_service_name(self, obj):
|
||||||
|
return str(obj.service)
|
||||||
|
|
||||||
|
def get_regen_status(self, obj):
|
||||||
|
return obj.need_regen()
|
||||||
|
|
|
@ -26,5 +26,12 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
# Services
|
||||||
|
url(r'^services/$', views.services),
|
||||||
|
url(r'^services/(?P<server_name>\w+)/(?P<service_name>\w+)/regen/$', views.services_server_service_regen),
|
||||||
|
url(r'^services/(?P<server_name>\w+)/$', views.services_server),
|
||||||
]
|
]
|
||||||
|
|
86
api/views.py
86
api/views.py
|
@ -23,3 +23,89 @@
|
||||||
The views for the API app. They should all return JSON data and not fallback on
|
The views for the API app. They should all return JSON data and not fallback on
|
||||||
HTML pages such as the login and index pages for a better integration.
|
HTML pages such as the login and index pages for a better integration.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
||||||
|
from machines.models import Service_link, Service, Interface, Domain
|
||||||
|
|
||||||
|
from .serializers import *
|
||||||
|
from .utils import JSONError, JSONSuccess, accept_method
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
@login_required
|
||||||
|
@permission_required('machines.serveur')
|
||||||
|
@accept_method(['GET'])
|
||||||
|
def services(request):
|
||||||
|
"""The list of the different services and servers couples
|
||||||
|
|
||||||
|
Return:
|
||||||
|
GET:
|
||||||
|
A JSONSuccess response with a field `data` containing:
|
||||||
|
* a list of dictionnaries (one for each service-server couple) containing:
|
||||||
|
* a field `server`: the server name
|
||||||
|
* a field `service`: the service name
|
||||||
|
* a field `need_regen`: does the service need a regeneration ?
|
||||||
|
"""
|
||||||
|
service_link = Service_link.objects.all().select_related('server__domain').select_related('service')
|
||||||
|
seria = ServicesSerializer(service_link, many=True)
|
||||||
|
return JSONSuccess(seria.data)
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
@login_required
|
||||||
|
@permission_required('machines.serveur')
|
||||||
|
@accept_method(['GET', 'POST'])
|
||||||
|
def services_server_service_regen(request, server_name, service_name):
|
||||||
|
"""The status of a particular service linked to a particular server.
|
||||||
|
Mark the service as regenerated if POST used.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
GET:
|
||||||
|
A JSONSucess response with a field `data` containing:
|
||||||
|
* a field `need_regen`: does the service need a regeneration ?
|
||||||
|
|
||||||
|
POST:
|
||||||
|
An empty JSONSuccess response.
|
||||||
|
"""
|
||||||
|
query = Service_link.objects.filter(
|
||||||
|
service__in=Service.objects.filter(service_type=service_name),
|
||||||
|
server__in=Interface.objects.filter(
|
||||||
|
domain__in=Domain.objects.filter(name=server_name)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if not query:
|
||||||
|
return JSONError("This service is not active for this server")
|
||||||
|
|
||||||
|
service = query.first()
|
||||||
|
if request.method == 'GET':
|
||||||
|
return JSONSuccess({'need_regen': service.need_regen()})
|
||||||
|
else:
|
||||||
|
service.done_regen()
|
||||||
|
return JSONSuccess()
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
@login_required
|
||||||
|
@permission_required('machines.serveur')
|
||||||
|
@accept_method(['GET'])
|
||||||
|
def services_server(request, server_name):
|
||||||
|
"""The list of services attached to a specific server
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
GET:
|
||||||
|
A JSONSuccess response with a field `data` containing:
|
||||||
|
* a list of dictionnaries (one for each service) containing:
|
||||||
|
* a field `name`: the name of a service
|
||||||
|
"""
|
||||||
|
query = Service_link.objects.filter(
|
||||||
|
server__in=Interface.objects.filter(
|
||||||
|
domain__in=Domain.objects.filter(name=server_name)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if not query:
|
||||||
|
return JSONError("This service is not active for this server")
|
||||||
|
|
||||||
|
services = query.all()
|
||||||
|
seria = ServiceLinkSerializer(services, many=True)
|
||||||
|
return JSONSuccess(seria.data)
|
||||||
|
|
Loading…
Reference in a new issue