blob: d9f28c6e29a8e81a84e9cca062d416e140413872 [file] [log] [blame]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -04001from django.contrib import admin
2
Scott Baker3dc3a4e2015-12-29 23:47:06 -08003from services.hpc.models import *
Siobhan Tullybfd11dc2013-09-03 12:59:24 -04004from 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
11from django.contrib.contenttypes import generic
12from suit.widgets import LinkedSelect
Scott Baker559be722015-05-15 09:08:19 -070013from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, SliderWidget, ServicePrivilegeInline
Scott Bakerc65b65c2015-05-15 15:00:48 -070014from core.middleware import get_request
Scott Bakerbab421b2015-04-02 23:17:59 -070015
Scott Baker82f46172015-04-02 21:56:00 -070016from functools import update_wrapper
Scott Bakerbab421b2015-04-02 23:17:59 -070017from django.contrib.admin.views.main import ChangeList
Scott Baker80dc9e82015-05-21 10:25:58 -070018from django.core.urlresolvers import reverse, NoReverseMatch
Scott Bakerbab421b2015-04-02 23:17:59 -070019from django.contrib.admin.utils import quote
20
Scott Baker80dc9e82015-05-21 10:25:58 -070021from filteredadmin import FilteredChangeList, FilteredAdmin, FilteredInline
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040022
Scott Baker7d60d162015-05-11 16:38:16 -070023class HpcServiceForm(forms.ModelForm):
24 scale = forms.IntegerField(widget = SliderWidget, required=False)
25
26 def __init__(self, *args, **kwargs):
27 super(HpcServiceForm, self).__init__(*args, **kwargs)
Scott Baker34334f72016-01-14 09:33:13 -080028 if ("instance" in kwargs) and (hasattr(kwargs["instance"], "scale")):
29 self.fields['scale'].initial = kwargs["instance"].scale
Scott Baker7d60d162015-05-11 16:38:16 -070030
31 def save(self, *args, **kwargs):
32 if self.cleaned_data['scale']:
33 self.instance.scale = self.cleaned_data['scale']
34
35 return super(HpcServiceForm, self).save(*args, **kwargs)
36
Scott Baker82f46172015-04-02 21:56:00 -070037class HpcServiceAdmin(ReadOnlyAwareAdmin):
Scott Baker446eaca2014-05-23 13:16:57 -070038 model = HpcService
39 verbose_name = "HPC Service"
40 verbose_name_plural = "HPC Service"
Scott Baker63d1a552014-08-21 15:19:07 -070041 list_display = ("backend_status_icon", "name","enabled")
42 list_display_links = ('backend_status_icon', 'name', )
Scott Bakerd0bab942015-05-18 16:55:31 -070043 fieldsets = [(None, {'fields': ['backend_status_text', 'name','scale','enabled','versionNumber', 'description', "cmi_hostname", "hpc_port80", "watcher_hpc_network", "watcher_dnsredir_network", "watcher_dnsdemux_network"], 'classes':['suit-tab suit-tab-general']})]
Scott Baker40c00762014-08-21 16:55:59 -070044 readonly_fields = ('backend_status_text', )
Scott Baker559be722015-05-15 09:08:19 -070045 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
Scott Baker7d60d162015-05-11 16:38:16 -070046 form = HpcServiceForm
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040047
Scott Baker82f46172015-04-02 21:56:00 -070048 extracontext_registered_admins = True
49
Scott Baker446eaca2014-05-23 13:16:57 -070050 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
Scott Baker446eaca2014-05-23 13:16:57 -070051
52 suit_form_tabs =(('general', 'HPC Service Details'),
Scott Baker8642fa82015-02-26 17:05:02 -080053 ('administration', 'Administration'),
Scott Bakerfbb71c72015-03-20 15:59:56 -070054 ('tools', 'Tools'),
Scott Baker446eaca2014-05-23 13:16:57 -070055 ('slices','Slices'),
56 ('serviceattrs','Additional Attributes'),
Scott Baker559be722015-05-15 09:08:19 -070057 ('serviceprivileges','Privileges'),
Scott Baker446eaca2014-05-23 13:16:57 -070058 )
59
Scott Bakerfbb71c72015-03-20 15:59:56 -070060 suit_form_includes = (('hpcadmin.html', 'top', 'administration'),
61 ('hpctools.html', 'top', 'tools') )
Scott Baker8642fa82015-02-26 17:05:02 -080062
Scott Baker31ebc472015-04-03 17:45:56 -070063 def url_for_model_changelist(self, request, model):
64 if not request.resolver_match.args:
65 return reverse('admin:%s_%s_changelist' % (model._meta.app_label, model._meta.model_name), current_app=model._meta.app_label)
66 else:
67 obj_id = request.resolver_match.args[0]
68 changelist_url = reverse('admin:%s_%s_filteredchangelist' % (model._meta.app_label, model._meta.model_name), args=(obj_id,), current_app=model._meta.app_label)
69 return changelist_url
70
Scott Bakerbab421b2015-04-02 23:17:59 -070071class HPCAdmin(FilteredAdmin):
Scott Bakerc481b322015-02-27 12:12:14 -080072 # Change the application breadcrumb to point to an HPC Service if one is
73 # defined
74
Scott Bakerc481b322015-02-27 12:12:14 -080075 custom_app_breadcrumb_name = "Hpc"
76 @property
77 def custom_app_breadcrumb_url(self):
78 services = HpcService.objects.all()
79 if len(services)==1:
80 return "/admin/hpc/hpcservice/%s/" % services[0].id
81 else:
82 return "/admin/hpc/hpcservice/"
83
Scott Baker80dc9e82015-05-21 10:25:58 -070084class CDNPrefixInline(FilteredInline):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040085 model = CDNPrefix
86 extra = 0
87 suit_classes = 'suit-tab suit-tab-prefixes'
Scott Baker40c00762014-08-21 16:55:59 -070088 fields = ('backend_status_icon', 'cdn_prefix_id', 'prefix', 'defaultOriginServer', 'enabled')
89 readonly_fields = ('backend_status_icon', 'cdn_prefix_id',)
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040090
Scott Baker80dc9e82015-05-21 10:25:58 -070091class OriginServerInline(FilteredInline):
Scott Bakerbc627c42015-05-19 16:44:09 -070092 model = OriginServer
93 extra = 0
94 suit_classes = 'suit-tab suit-tab-origins'
95 fields = ('backend_status_icon', 'origin_server_id', 'url')
96 readonly_fields = ('backend_status_icon', 'origin_server_id')
97
Scott Baker80dc9e82015-05-21 10:25:58 -070098class ContentProviderInline(FilteredInline):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040099 model = ContentProvider
100 extra = 0
101 suit_classes = 'suit-tab suit-tab-cps'
Scott Baker40c00762014-08-21 16:55:59 -0700102 fields = ('backend_status_icon', 'content_provider_id', 'name', 'enabled')
103 readonly_fields = ('backend_status_icon', 'content_provider_id',)
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400104
Scott Bakerc481b322015-02-27 12:12:14 -0800105class OriginServerAdmin(HPCAdmin):
Scott Baker63d1a552014-08-21 15:19:07 -0700106 list_display = ('backend_status_icon', 'url','protocol','redirects','contentProvider','authenticated','enabled' )
107 list_display_links = ('backend_status_icon', 'url', )
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400108
Scott Baker40c00762014-08-21 16:55:59 -0700109 fields = ('backend_status_text', 'url','protocol','redirects','contentProvider','authenticated','enabled','origin_server_id','description' )
110 readonly_fields = ('backend_status_text', 'origin_server_id',)
Scott Baker2a21ba12014-06-03 12:25:40 -0700111 user_readonly_fields = ('url','protocol','redirects','contentProvider','authenticated','enabled','origin_server_id','description')
Scott Baker446eaca2014-05-23 13:16:57 -0700112
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400113class ContentProviderForm(forms.ModelForm):
Scott Baker4bba6df2015-05-19 16:57:02 -0700114 users = forms.ModelMultipleChoiceField(
115 queryset=User.objects.all(),
116 required=False,
117 help_text="Select which users can manage this ContentProvider",
118 widget=FilteredSelectMultiple(
119 verbose_name=('Users'), is_stacked=False
120 )
121 )
122
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400123 class Meta:
Scott Baker4bba6df2015-05-19 16:57:02 -0700124 model = ContentProvider
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400125 widgets = {
126 'serviceProvider' : LinkedSelect
127 }
128
Scott Baker4bba6df2015-05-19 16:57:02 -0700129 def __init__(self, *args, **kwargs):
130 request = kwargs.pop('request', None)
131 super(ContentProviderForm, self).__init__(*args, **kwargs)
132
133 if self.instance and self.instance.pk:
134 self.fields['users'].initial = self.instance.users.all()
135
Scott Bakerc481b322015-02-27 12:12:14 -0800136class ContentProviderAdmin(HPCAdmin):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400137 form = ContentProviderForm
Scott Baker63d1a552014-08-21 15:19:07 -0700138 list_display = ('backend_status_icon', 'name','description','enabled' )
139 list_display_links = ('backend_status_icon', 'name', )
Scott Baker40c00762014-08-21 16:55:59 -0700140 readonly_fields = ('backend_status_text', )
Scott Baker2e6f2fd2015-05-19 17:11:36 -0700141 admin_readonly_fields = ('backend_status_text', )
142 cp_readonly_fields = ('backend_status_text', 'name', 'enabled', 'serviceProvider', 'users')
143 fieldsets = [ (None, {'fields': ['backend_status_text', 'name','enabled','description','serviceProvider','users'], 'classes':['suit-tab suit-tab-general']})]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400144
Scott Bakerbc627c42015-05-19 16:44:09 -0700145 inlines = [CDNPrefixInline, OriginServerInline]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400146
Scott Baker446eaca2014-05-23 13:16:57 -0700147 user_readonly_fields = ('name','description','enabled','serviceProvider','users')
Scott Baker446eaca2014-05-23 13:16:57 -0700148
Scott Bakerbc627c42015-05-19 16:44:09 -0700149 suit_form_tabs = (('general','Details'),('prefixes','CDN Prefixes'), ('origins','Origin Servers'))
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400150
Scott Baker2e6f2fd2015-05-19 17:11:36 -0700151 def change_view(self,request, *args, **kwargs):
152 if request.user.is_admin:
153 self.readonly_fields = self.admin_readonly_fields
154 else:
155 self.readonly_fields = self.cp_readonly_fields
156
157 return super(ContentProviderAdmin, self).change_view(request, *args, **kwargs)
158
Scott Baker80dc9e82015-05-21 10:25:58 -0700159 def has_add_permission(self, request):
160 return request.user.is_admin
161
162 def has_delete_permission(self, request, obj=None):
163 return request.user.is_admin
164
Scott Bakerc481b322015-02-27 12:12:14 -0800165class ServiceProviderAdmin(HPCAdmin):
Scott Baker63d1a552014-08-21 15:19:07 -0700166 list_display = ('backend_status_icon', 'name', 'description', 'enabled')
167 list_display_links = ('backend_status_icon', 'name', )
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400168 fieldsets = [
Scott Baker8f910612015-03-13 09:17:33 -0700169 (None, {'fields': ['backend_status_text', 'name','description','enabled', 'hpcService'], 'classes':['suit-tab suit-tab-general']})]
Scott Baker446eaca2014-05-23 13:16:57 -0700170#, ('Content Providers', {'fields':['contentProviders'],'classes':['suit-tab suit-tab-cps']})]
171
Scott Baker40c00762014-08-21 16:55:59 -0700172 readonly_fields = ('backend_status_text', )
Scott Baker446eaca2014-05-23 13:16:57 -0700173 user_readonly_fields = ('name', 'description', 'enabled')
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400174
175 suit_form_tabs = (('general','Details'),('cps','Content Providers'))
176 inlines = [ContentProviderInline]
177
178class CDNPrefixForm(forms.ModelForm):
179 class Meta:
180 widgets = {
181 'contentProvider' : LinkedSelect
182 }
183
Scott Bakerc481b322015-02-27 12:12:14 -0800184class CDNPrefixAdmin(HPCAdmin):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400185 form = CDNPrefixForm
Scott Baker63d1a552014-08-21 15:19:07 -0700186 list_display = ['backend_status_icon', 'prefix','contentProvider']
187 list_display_links = ('backend_status_icon', 'prefix', )
Scott Baker40c00762014-08-21 16:55:59 -0700188 fields = ['backend_status_text', 'prefix', 'contentProvider', 'cdn_prefix_id', 'description', 'defaultOriginServer', 'enabled']
189 readonly_fields = ('backend_status_text', )
Scott Baker446eaca2014-05-23 13:16:57 -0700190 user_readonly_fields = ['prefix','contentProvider', "cdn_prefix_id", "description", "defaultOriginServer", "enabled"]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400191
Scott Bakerc481b322015-02-27 12:12:14 -0800192class SiteMapAdmin(HPCAdmin):
Scott Baker53491082014-03-13 23:15:19 -0700193 model = SiteMap
194 verbose_name = "Site Map"
195 verbose_name_plural = "Site Map"
Scott Baker63d1a552014-08-21 15:19:07 -0700196 list_display = ("backend_status_icon", "name", "contentProvider", "serviceProvider")
197 list_display_links = ('backend_status_icon', 'name', )
Scott Baker7e3b78c2015-03-13 09:24:25 -0700198 fields = ['backend_status_text', 'name', 'hpcService', 'cdnPrefix', 'contentProvider', 'serviceProvider', 'map', 'map_id']
199 user_readonly_fields = ('backend_status_text', "name", "hpcService", "cdnPrefix", "contentProvider", "serviceProvider", "description", "map")
Scott Baker40c00762014-08-21 16:55:59 -0700200 readonly_fields = ('backend_status_text', )
Scott Baker53491082014-03-13 23:15:19 -0700201
Scott Bakerc481b322015-02-27 12:12:14 -0800202class AccessMapAdmin(HPCAdmin):
Scott Baker53491082014-03-13 23:15:19 -0700203 model = AccessMap
204 verbose_name = "Access Map"
205 verbose_name_plural = "Access Map"
Scott Baker63d1a552014-08-21 15:19:07 -0700206 list_display = ("backend_status_icon", "name", "contentProvider")
207 list_display_links = ('backend_status_icon', 'name', )
Scott Baker40c00762014-08-21 16:55:59 -0700208 user_readonly_fields = ('backend_status_text', "name", "contentProvider", "description", "map")
209 readonly_fields = ('backend_status_text', )
Scott Baker53491082014-03-13 23:15:19 -0700210
Scott Baker8977c962015-03-18 17:37:46 -0700211class HpcHealthCheckAdmin(HPCAdmin):
212 model = HpcHealthCheck
213 verbose_name = "Health Check"
214 verbose_name = "Health Checks"
215 list_display = ["backend_status_icon", "resource_name", "kind"]
216 list_display_links = ["backend_status_icon", "resource_name"]
217 fields = ["backend_status_text", "hpcService", "resource_name", "kind", "result_contains", "result_min_size", "result_max_size"]
218 readonly_fields = ["backend_status_text",]
219
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400220admin.site.register(ServiceProvider, ServiceProviderAdmin)
221admin.site.register(ContentProvider, ContentProviderAdmin)
222admin.site.register(CDNPrefix, CDNPrefixAdmin)
223admin.site.register(OriginServer,OriginServerAdmin)
Scott Baker446eaca2014-05-23 13:16:57 -0700224admin.site.register(HpcService, HpcServiceAdmin)
Scott Baker53491082014-03-13 23:15:19 -0700225admin.site.register(SiteMap, SiteMapAdmin)
226admin.site.register(AccessMap, AccessMapAdmin)
Scott Baker8977c962015-03-18 17:37:46 -0700227admin.site.register(HpcHealthCheck, HpcHealthCheckAdmin)
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400228