blob: 41ce9a00bb89afdc8e80fac32d49098c01993c39 [file] [log] [blame]
Srikanth Vavilapalli1dfc9c82016-12-20 02:58:32 +00001from rest_framework.decorators import api_view
2from rest_framework.response import Response
3from rest_framework.reverse import reverse
4from rest_framework import serializers
5from rest_framework import generics
6from rest_framework import viewsets
7from rest_framework import status
8from rest_framework.decorators import detail_route, list_route
9from rest_framework.views import APIView
10from core.models import *
11from django.forms import widgets
12from django.conf.urls import patterns, url
13from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
14from django.shortcuts import get_object_or_404
15from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
16from xos.exceptions import *
17import json
18import subprocess
19from django.views.decorators.csrf import ensure_csrf_cookie
20from services.monitoring.models import MonitoringChannel, CeilometerService
21
22class CeilometerServiceForApi(CeilometerService):
23 class Meta:
24 proxy = True
25 app_label = "ceilometer"
26
27 @property
28 def related(self):
29 related = {}
30 if self.creator:
31 related["creator"] = self.creator.username
32 instance = self.get_instance()
33 if instance:
34 related["instance_id"] = instance.id
35 related["instance_name"] = instance.name
36 if instance.node:
37 related["compute_node_name"] = instance.node.name
38 return related
39
40
41class CeilometerServiceSerializer(PlusModelSerializer):
42 id = ReadOnlyField()
43 backend_status = ReadOnlyField()
44 humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
45 ceilometer_pub_sub_url = ReadOnlyField()
Srikanth Vavilapalli71aa28d2017-01-31 00:43:13 +000046 ceilometer_enable_pub_sub = ReadOnlyField()
47 kafka_url = ReadOnlyField()
Srikanth Vavilapalli1dfc9c82016-12-20 02:58:32 +000048 related = serializers.DictField(required=False)
49
50 class Meta:
51 model = CeilometerServiceForApi
52 fields = ('humanReadableName',
53 'id',
54 'backend_status',
55 'ceilometer_pub_sub_url',
Srikanth Vavilapalli71aa28d2017-01-31 00:43:13 +000056 'ceilometer_enable_pub_sub',
57 'kafka_url',
Srikanth Vavilapalli1dfc9c82016-12-20 02:58:32 +000058 'related')
59
60 def getHumanReadableName(self, obj):
61 return obj.__unicode__()
62
63# @ensure_csrf_cookie
64class CeilometerServiceViewSet(XOSViewSet):
65 base_name = "monitoringservice"
66 method_name = None # use the api endpoint /api/service/monitoring/
67 method_kind = "viewset"
68 queryset = CeilometerServiceForApi.get_service_objects().select_related().all()
69 serializer_class = CeilometerServiceSerializer
70
71 @classmethod
72 def get_urlpatterns(self, api_path="^"):
73 patterns = super(CeilometerServiceViewSet, self).get_urlpatterns(api_path=api_path)
74
75 return patterns
76
77 def list(self, request):
78 object_list = self.filter_queryset(self.get_queryset())
79
80 serializer = self.get_serializer(object_list, many=True)
81
82 return Response(serializer.data)
83