blob: 66ca2ae80d804687fc569e28110216ce3c1f6176 [file] [log] [blame]
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.reverse import reverse
from rest_framework import serializers
from rest_framework import generics
from rest_framework import status
from core.models import *
from django.forms import widgets
from services.ceilometer.models import MonitoringChannel, CeilometerService
from plus import PlusSerializerMixin
from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
if hasattr(serializers, "ReadOnlyField"):
# rest_framework 3.x
ReadOnlyField = serializers.ReadOnlyField
else:
# rest_framework 2.x
ReadOnlyField = serializers.Field
def get_default_ceilometer_service():
ceilometer_services = CeilometerService.get_service_objects().all()
if ceilometer_services:
return ceilometer_services[0].id
return None
class MonitoringChannelSerializer(serializers.ModelSerializer, PlusSerializerMixin):
id = ReadOnlyField()
service_specific_attribute = ReadOnlyField()
ceilometer_url = ReadOnlyField()
tenant_list_str = ReadOnlyField()
creator = ReadOnlyField()
instance = ReadOnlyField()
provider_service = serializers.PrimaryKeyRelatedField(queryset=CeilometerService.get_service_objects().all(), default=get_default_ceilometer_service)
humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
computeNodeName = serializers.SerializerMethodField("getComputeNodeName")
class Meta:
model = MonitoringChannel
fields = ('humanReadableName', 'id', 'provider_service', 'service_specific_attribute', 'ceilometer_url', 'tenant_list_str', 'creator', 'instance', 'computeNodeName' )
def getHumanReadableName(self, obj):
return obj.__unicode__()
def getComputeNodeName(self, obj):
instance = obj.instance
if not instance:
return None
return instance.node.name
class MonitoringChannelList(XOSListCreateAPIView):
serializer_class = MonitoringChannelSerializer
method_kind = "list"
method_name = "monitoringchannel"
def get_queryset(self):
queryset = MonitoringChannel.get_tenant_objects().select_related().all()
current_user = self.request.user.username
if current_user is not None:
ids = [x.id for x in queryset if x.creator.username==current_user]
queryset = queryset.filter(id__in=ids)
return queryset
def post(self, request, format=None):
current_user = request.user.username
existing_obj = None
for obj in MonitoringChannel.get_tenant_objects().all():
if (obj.creator.username == current_user):
existing_obj = obj
break
if existing_obj:
serializer = MonitoringChannelSerializer(existing_obj)
headers = self.get_success_headers(serializer.data)
return Response( serializer.data, status=status.HTTP_200_OK )
return super(MonitoringChannelList, self).post(request, format)
class MonitoringChannelDetail(XOSRetrieveUpdateDestroyAPIView):
serializer_class = MonitoringChannelSerializer
queryset = MonitoringChannel.get_tenant_objects().select_related().all()
method_kind = "detail"
method_name = "monitoringchannel"