blob: a226bef35efc5cd4fee33f5c203148f324c8b012 [file] [log] [blame]
Scott Bakerfa8fd292015-09-09 17:31:22 -07001from django.contrib import admin
2
Scott Baker9719c642015-12-31 11:13:21 -08003from services.ceilometer.models import *
Scott Bakerfa8fd292015-09-09 17:31:22 -07004from django import forms
5from django.utils.safestring import mark_safe
6from django.contrib.auth.admin import UserAdmin
7from django.contrib.admin.widgets import FilteredSelectMultiple
8from django.contrib.auth.forms import ReadOnlyPasswordHashField
9from django.contrib.auth.signals import user_logged_in
10from django.utils import timezone
Scott Bakerfa8fd292015-09-09 17:31:22 -070011from suit.widgets import LinkedSelect
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -050012from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline, TenantRootTenantInline, TenantRootPrivilegeInline, TenantAttrAsTabInline
Scott Bakerd145efe2015-09-10 16:01:58 -070013from core.middleware import get_request
Scott Bakerfa8fd292015-09-09 17:31:22 -070014
15from functools import update_wrapper
16from django.contrib.admin.views.main import ChangeList
17from django.core.urlresolvers import reverse
18from django.contrib.admin.utils import quote
19
Srikanth Vavilapallia1bf88f2016-02-07 14:18:51 -050020class CeilometerServiceForm(forms.ModelForm):
21 ceilometer_pub_sub_url = forms.CharField(required=False, max_length=1024, help_text="REST URL of ceilometer PUB/SUB component in http://IP:port/ format")
22
23 def __init__(self,*args,**kwargs):
24 super (CeilometerServiceForm,self ).__init__(*args,**kwargs)
25 if self.instance:
26 # fields for the attributes
27 self.fields['ceilometer_pub_sub_url'].initial = self.instance.ceilometer_pub_sub_url
28
29 def save(self, commit=True):
30 self.instance.ceilometer_pub_sub_url = self.cleaned_data.get("ceilometer_pub_sub_url")
31 return super(CeilometerServiceForm, self).save(commit=commit)
32
33 class Meta:
34 model = CeilometerService
Zack Williamscca78892016-04-21 15:41:28 -070035 fields = '__all__'
Srikanth Vavilapallia1bf88f2016-02-07 14:18:51 -050036
Scott Bakerfa8fd292015-09-09 17:31:22 -070037class CeilometerServiceAdmin(ReadOnlyAwareAdmin):
38 model = CeilometerService
39 verbose_name = "Ceilometer Service"
40 verbose_name_plural = "Ceilometer Service"
41 list_display = ("backend_status_icon", "name", "enabled")
42 list_display_links = ('backend_status_icon', 'name', )
Srikanth Vavilapallia1bf88f2016-02-07 14:18:51 -050043 fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description','ceilometer_pub_sub_url', "view_url","icon_url" ], 'classes':['suit-tab suit-tab-general']})]
Scott Bakerfa8fd292015-09-09 17:31:22 -070044 readonly_fields = ('backend_status_text', )
45 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
Srikanth Vavilapallia1bf88f2016-02-07 14:18:51 -050046 form = CeilometerServiceForm
Scott Bakerfa8fd292015-09-09 17:31:22 -070047
48 extracontext_registered_admins = True
49
50 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
51
52 suit_form_tabs =(('general', 'Ceilometer Service Details'),
53 ('administration', 'Administration'),
54 ('slices','Slices'),
55 ('serviceattrs','Additional Attributes'),
56 ('serviceprivileges','Privileges'),
57 )
58
59 suit_form_includes = (('ceilometeradmin.html', 'top', 'administration'),
60 )
61
Zack Williams4a435692016-05-16 15:57:00 -070062 def get_queryset(self, request):
Scott Bakerfa8fd292015-09-09 17:31:22 -070063 return CeilometerService.get_service_objects_by_user(request.user)
64
65class MonitoringChannelForm(forms.ModelForm):
66 creator = forms.ModelChoiceField(queryset=User.objects.all())
67
Sapan Bhatia16be1432016-01-14 11:41:38 -050068 def __init__(self,*args,**kwargs):
69 super (MonitoringChannelForm,self ).__init__(*args,**kwargs)
70 self.fields['kind'].widget.attrs['readonly'] = True
71 self.fields['provider_service'].queryset = CeilometerService.get_service_objects().all()
72 if self.instance:
73 # fields for the attributes
74 self.fields['creator'].initial = self.instance.creator
75 if (not self.instance) or (not self.instance.pk):
76 # default fields for an 'add' form
77 self.fields['kind'].initial = CEILOMETER_KIND
78 self.fields['creator'].initial = get_request().user
79 if CeilometerService.get_service_objects().exists():
80 self.fields["provider_service"].initial = CeilometerService.get_service_objects().all()[0]
81
82
83 def save(self, commit=True):
84 self.instance.creator = self.cleaned_data.get("creator")
85 return super(MonitoringChannelForm, self).save(commit=commit)
86
87 class Meta:
Scott Bakerfa8fd292015-09-09 17:31:22 -070088 model = MonitoringChannel
Zack Williams388491e2016-04-21 15:46:47 -070089 fields = '__all__'
Scott Bakerfa8fd292015-09-09 17:31:22 -070090
91class MonitoringChannelAdmin(ReadOnlyAwareAdmin):
Scott Baker588caf92015-09-09 17:57:51 -070092 list_display = ('backend_status_icon', 'id', )
Scott Bakerfa8fd292015-09-09 17:31:22 -070093 list_display_links = ('backend_status_icon', 'id')
Scott Baker588caf92015-09-09 17:57:51 -070094 fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'service_specific_attribute',
Scott Bakerb37a99a2015-09-10 17:36:58 -070095 'ceilometer_url', 'tenant_list_str',
Tony Mack32010062015-09-13 22:50:39 +000096 'instance', 'creator'],
Scott Bakerfa8fd292015-09-09 17:31:22 -070097 'classes':['suit-tab suit-tab-general']})]
Tony Mack32010062015-09-13 22:50:39 +000098 readonly_fields = ('backend_status_text', 'instance', 'service_specific_attribute', 'ceilometer_url', 'tenant_list_str')
Scott Bakerfa8fd292015-09-09 17:31:22 -070099 form = MonitoringChannelForm
100
101 suit_form_tabs = (('general','Details'),)
Srikanth Vavilapalli17b5a3c2015-11-17 12:21:02 -0600102 actions=['delete_selected_objects']
103
104 def get_actions(self, request):
105 actions = super(MonitoringChannelAdmin, self).get_actions(request)
106 if 'delete_selected' in actions:
107 del actions['delete_selected']
108 return actions
109
110 def delete_selected_objects(self, request, queryset):
111 for obj in queryset:
112 obj.delete()
113 delete_selected_objects.short_description = "Delete Selected MonitoringChannel Objects"
Scott Bakerfa8fd292015-09-09 17:31:22 -0700114
Zack Williams4a435692016-05-16 15:57:00 -0700115 def get_queryset(self, request):
Scott Bakerfa8fd292015-09-09 17:31:22 -0700116 return MonitoringChannel.get_tenant_objects_by_user(request.user)
117
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -0500118class SFlowServiceForm(forms.ModelForm):
119 sflow_port = forms.IntegerField(required=False)
120 sflow_api_port = forms.IntegerField(required=False)
121
122 def __init__(self,*args,**kwargs):
123 super (SFlowServiceForm,self ).__init__(*args,**kwargs)
124 if self.instance:
125 # fields for the attributes
126 self.fields['sflow_port'].initial = self.instance.sflow_port
127 self.fields['sflow_api_port'].initial = self.instance.sflow_api_port
128 if (not self.instance) or (not self.instance.pk):
129 # default fields for an 'add' form
130 self.fields['sflow_port'].initial = SFLOW_PORT
131 self.fields['sflow_api_port'].initial = SFLOW_API_PORT
132
133 def save(self, commit=True):
134 self.instance.sflow_port = self.cleaned_data.get("sflow_port")
135 self.instance.sflow_api_port = self.cleaned_data.get("sflow_api_port")
136 return super(SFlowServiceForm, self).save(commit=commit)
137
138 class Meta:
139 model = SFlowService
Zack Williamscca78892016-04-21 15:41:28 -0700140 fields = '__all__'
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -0500141
142class SFlowServiceAdmin(ReadOnlyAwareAdmin):
143 model = SFlowService
144 verbose_name = "SFlow Service"
145 verbose_name_plural = "SFlow Service"
146 list_display = ("backend_status_icon", "name", "enabled")
147 list_display_links = ('backend_status_icon', 'name', )
148 fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description',"view_url","sflow_port","sflow_api_port","icon_url" ], 'classes':['suit-tab suit-tab-general']})]
149 readonly_fields = ('backend_status_text', )
150 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
151 form = SFlowServiceForm
152
153 extracontext_registered_admins = True
154
155 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
156
157 suit_form_tabs =(('general', 'SFlow Service Details'),
158 ('administration', 'Administration'),
159 ('slices','Slices'),
160 ('serviceattrs','Additional Attributes'),
161 ('serviceprivileges','Privileges'),
162 )
163
164 suit_form_includes = (('sflowadmin.html', 'top', 'administration'),
165 )
166
Zack Williams4a435692016-05-16 15:57:00 -0700167 def get_queryset(self, request):
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -0500168 return SFlowService.get_service_objects_by_user(request.user)
169
170class SFlowTenantForm(forms.ModelForm):
171 creator = forms.ModelChoiceField(queryset=User.objects.all())
172 listening_endpoint = forms.CharField(max_length=1024, help_text="sFlow listening endpoint in udp://IP:port format")
173
174 def __init__(self,*args,**kwargs):
175 super (SFlowTenantForm,self ).__init__(*args,**kwargs)
176 self.fields['kind'].widget.attrs['readonly'] = True
177 self.fields['provider_service'].queryset = SFlowService.get_service_objects().all()
178 if self.instance:
179 # fields for the attributes
180 self.fields['creator'].initial = self.instance.creator
181 self.fields['listening_endpoint'].initial = self.instance.listening_endpoint
182 if (not self.instance) or (not self.instance.pk):
183 # default fields for an 'add' form
184 self.fields['kind'].initial = SFLOW_KIND
185 self.fields['creator'].initial = get_request().user
186 if SFlowService.get_service_objects().exists():
187 self.fields["provider_service"].initial = SFlowService.get_service_objects().all()[0]
188
189 def save(self, commit=True):
190 self.instance.creator = self.cleaned_data.get("creator")
191 self.instance.listening_endpoint = self.cleaned_data.get("listening_endpoint")
192 return super(SFlowTenantForm, self).save(commit=commit)
193
194 class Meta:
195 model = SFlowTenant
Zack Williamscca78892016-04-21 15:41:28 -0700196 fields = '__all__'
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -0500197
198class SFlowTenantAdmin(ReadOnlyAwareAdmin):
199 list_display = ('backend_status_icon', 'creator', 'listening_endpoint' )
200 list_display_links = ('backend_status_icon', 'listening_endpoint')
201 fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_service', 'service_specific_attribute', 'listening_endpoint',
202 'creator'],
203 'classes':['suit-tab suit-tab-general']})]
204 readonly_fields = ('backend_status_text', 'instance', 'service_specific_attribute')
205 inlines = [TenantAttrAsTabInline]
206 form = SFlowTenantForm
207
208 suit_form_tabs = (('general','Details'), ('tenantattrs', 'Attributes'))
209
Zack Williams4a435692016-05-16 15:57:00 -0700210 def get_queryset(self, request):
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -0500211 return SFlowTenant.get_tenant_objects_by_user(request.user)
212
Scott Bakerfa8fd292015-09-09 17:31:22 -0700213admin.site.register(CeilometerService, CeilometerServiceAdmin)
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -0500214admin.site.register(SFlowService, SFlowServiceAdmin)
Scott Bakerfa8fd292015-09-09 17:31:22 -0700215admin.site.register(MonitoringChannel, MonitoringChannelAdmin)
Srikanth Vavilapalli0ddb11f2016-01-29 14:29:26 -0500216admin.site.register(SFlowTenant, SFlowTenantAdmin)
Scott Bakerfa8fd292015-09-09 17:31:22 -0700217