blob: de876acde56fe3c68518955fa5134fefa38c447e [file] [log] [blame]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -04001from django.contrib import admin
2
3from hpc.models import *
4from 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)
28 self.fields['scale'].initial = kwargs["instance"].scale
29
30 def save(self, *args, **kwargs):
31 if self.cleaned_data['scale']:
32 self.instance.scale = self.cleaned_data['scale']
33
34 return super(HpcServiceForm, self).save(*args, **kwargs)
35
Scott Baker82f46172015-04-02 21:56:00 -070036class HpcServiceAdmin(ReadOnlyAwareAdmin):
Scott Baker446eaca2014-05-23 13:16:57 -070037 model = HpcService
38 verbose_name = "HPC Service"
39 verbose_name_plural = "HPC Service"
Scott Baker63d1a552014-08-21 15:19:07 -070040 list_display = ("backend_status_icon", "name","enabled")
41 list_display_links = ('backend_status_icon', 'name', )
Scott Bakerd0bab942015-05-18 16:55:31 -070042 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 -070043 readonly_fields = ('backend_status_text', )
Scott Baker559be722015-05-15 09:08:19 -070044 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
Scott Baker7d60d162015-05-11 16:38:16 -070045 form = HpcServiceForm
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040046
Scott Baker82f46172015-04-02 21:56:00 -070047 extracontext_registered_admins = True
48
Scott Baker446eaca2014-05-23 13:16:57 -070049 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
Scott Baker446eaca2014-05-23 13:16:57 -070050
51 suit_form_tabs =(('general', 'HPC Service Details'),
Scott Baker8642fa82015-02-26 17:05:02 -080052 ('administration', 'Administration'),
Scott Bakerfbb71c72015-03-20 15:59:56 -070053 ('tools', 'Tools'),
Scott Baker446eaca2014-05-23 13:16:57 -070054 ('slices','Slices'),
55 ('serviceattrs','Additional Attributes'),
Scott Baker559be722015-05-15 09:08:19 -070056 ('serviceprivileges','Privileges'),
Scott Baker446eaca2014-05-23 13:16:57 -070057 )
58
Scott Bakerfbb71c72015-03-20 15:59:56 -070059 suit_form_includes = (('hpcadmin.html', 'top', 'administration'),
60 ('hpctools.html', 'top', 'tools') )
Scott Baker8642fa82015-02-26 17:05:02 -080061
Scott Baker31ebc472015-04-03 17:45:56 -070062 def url_for_model_changelist(self, request, model):
63 if not request.resolver_match.args:
64 return reverse('admin:%s_%s_changelist' % (model._meta.app_label, model._meta.model_name), current_app=model._meta.app_label)
65 else:
66 obj_id = request.resolver_match.args[0]
67 changelist_url = reverse('admin:%s_%s_filteredchangelist' % (model._meta.app_label, model._meta.model_name), args=(obj_id,), current_app=model._meta.app_label)
68 return changelist_url
69
Scott Bakerbab421b2015-04-02 23:17:59 -070070class HPCAdmin(FilteredAdmin):
Scott Bakerc481b322015-02-27 12:12:14 -080071 # Change the application breadcrumb to point to an HPC Service if one is
72 # defined
73
Scott Bakerc481b322015-02-27 12:12:14 -080074 custom_app_breadcrumb_name = "Hpc"
75 @property
76 def custom_app_breadcrumb_url(self):
77 services = HpcService.objects.all()
78 if len(services)==1:
79 return "/admin/hpc/hpcservice/%s/" % services[0].id
80 else:
81 return "/admin/hpc/hpcservice/"
82
Scott Baker80dc9e82015-05-21 10:25:58 -070083class CDNPrefixInline(FilteredInline):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040084 model = CDNPrefix
85 extra = 0
86 suit_classes = 'suit-tab suit-tab-prefixes'
Scott Baker40c00762014-08-21 16:55:59 -070087 fields = ('backend_status_icon', 'cdn_prefix_id', 'prefix', 'defaultOriginServer', 'enabled')
88 readonly_fields = ('backend_status_icon', 'cdn_prefix_id',)
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040089
Scott Baker80dc9e82015-05-21 10:25:58 -070090class OriginServerInline(FilteredInline):
Scott Bakerbc627c42015-05-19 16:44:09 -070091 model = OriginServer
92 extra = 0
93 suit_classes = 'suit-tab suit-tab-origins'
94 fields = ('backend_status_icon', 'origin_server_id', 'url')
95 readonly_fields = ('backend_status_icon', 'origin_server_id')
96
Scott Baker80dc9e82015-05-21 10:25:58 -070097class ContentProviderInline(FilteredInline):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -040098 model = ContentProvider
99 extra = 0
100 suit_classes = 'suit-tab suit-tab-cps'
Scott Baker40c00762014-08-21 16:55:59 -0700101 fields = ('backend_status_icon', 'content_provider_id', 'name', 'enabled')
102 readonly_fields = ('backend_status_icon', 'content_provider_id',)
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400103
Scott Bakerc481b322015-02-27 12:12:14 -0800104class OriginServerAdmin(HPCAdmin):
Scott Baker63d1a552014-08-21 15:19:07 -0700105 list_display = ('backend_status_icon', 'url','protocol','redirects','contentProvider','authenticated','enabled' )
106 list_display_links = ('backend_status_icon', 'url', )
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400107
Scott Baker40c00762014-08-21 16:55:59 -0700108 fields = ('backend_status_text', 'url','protocol','redirects','contentProvider','authenticated','enabled','origin_server_id','description' )
109 readonly_fields = ('backend_status_text', 'origin_server_id',)
Scott Baker2a21ba12014-06-03 12:25:40 -0700110 user_readonly_fields = ('url','protocol','redirects','contentProvider','authenticated','enabled','origin_server_id','description')
Scott Baker446eaca2014-05-23 13:16:57 -0700111
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400112class ContentProviderForm(forms.ModelForm):
Scott Baker4bba6df2015-05-19 16:57:02 -0700113 users = forms.ModelMultipleChoiceField(
114 queryset=User.objects.all(),
115 required=False,
116 help_text="Select which users can manage this ContentProvider",
117 widget=FilteredSelectMultiple(
118 verbose_name=('Users'), is_stacked=False
119 )
120 )
121
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400122 class Meta:
Scott Baker4bba6df2015-05-19 16:57:02 -0700123 model = ContentProvider
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400124 widgets = {
125 'serviceProvider' : LinkedSelect
126 }
127
Scott Baker4bba6df2015-05-19 16:57:02 -0700128 def __init__(self, *args, **kwargs):
129 request = kwargs.pop('request', None)
130 super(ContentProviderForm, self).__init__(*args, **kwargs)
131
132 if self.instance and self.instance.pk:
133 self.fields['users'].initial = self.instance.users.all()
134
Scott Bakerc481b322015-02-27 12:12:14 -0800135class ContentProviderAdmin(HPCAdmin):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400136 form = ContentProviderForm
Scott Baker63d1a552014-08-21 15:19:07 -0700137 list_display = ('backend_status_icon', 'name','description','enabled' )
138 list_display_links = ('backend_status_icon', 'name', )
Scott Baker40c00762014-08-21 16:55:59 -0700139 readonly_fields = ('backend_status_text', )
Scott Baker2e6f2fd2015-05-19 17:11:36 -0700140 admin_readonly_fields = ('backend_status_text', )
141 cp_readonly_fields = ('backend_status_text', 'name', 'enabled', 'serviceProvider', 'users')
142 fieldsets = [ (None, {'fields': ['backend_status_text', 'name','enabled','description','serviceProvider','users'], 'classes':['suit-tab suit-tab-general']})]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400143
Scott Bakerbc627c42015-05-19 16:44:09 -0700144 inlines = [CDNPrefixInline, OriginServerInline]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400145
Scott Baker446eaca2014-05-23 13:16:57 -0700146 user_readonly_fields = ('name','description','enabled','serviceProvider','users')
Scott Baker446eaca2014-05-23 13:16:57 -0700147
Scott Bakerbc627c42015-05-19 16:44:09 -0700148 suit_form_tabs = (('general','Details'),('prefixes','CDN Prefixes'), ('origins','Origin Servers'))
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400149
Scott Baker2e6f2fd2015-05-19 17:11:36 -0700150 def change_view(self,request, *args, **kwargs):
151 if request.user.is_admin:
152 self.readonly_fields = self.admin_readonly_fields
153 else:
154 self.readonly_fields = self.cp_readonly_fields
155
156 return super(ContentProviderAdmin, self).change_view(request, *args, **kwargs)
157
Scott Baker80dc9e82015-05-21 10:25:58 -0700158 def has_add_permission(self, request):
159 return request.user.is_admin
160
161 def has_delete_permission(self, request, obj=None):
162 return request.user.is_admin
163
Scott Bakerc481b322015-02-27 12:12:14 -0800164class ServiceProviderAdmin(HPCAdmin):
Scott Baker63d1a552014-08-21 15:19:07 -0700165 list_display = ('backend_status_icon', 'name', 'description', 'enabled')
166 list_display_links = ('backend_status_icon', 'name', )
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400167 fieldsets = [
Scott Baker8f910612015-03-13 09:17:33 -0700168 (None, {'fields': ['backend_status_text', 'name','description','enabled', 'hpcService'], 'classes':['suit-tab suit-tab-general']})]
Scott Baker446eaca2014-05-23 13:16:57 -0700169#, ('Content Providers', {'fields':['contentProviders'],'classes':['suit-tab suit-tab-cps']})]
170
Scott Baker40c00762014-08-21 16:55:59 -0700171 readonly_fields = ('backend_status_text', )
Scott Baker446eaca2014-05-23 13:16:57 -0700172 user_readonly_fields = ('name', 'description', 'enabled')
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400173
174 suit_form_tabs = (('general','Details'),('cps','Content Providers'))
175 inlines = [ContentProviderInline]
176
177class CDNPrefixForm(forms.ModelForm):
178 class Meta:
179 widgets = {
180 'contentProvider' : LinkedSelect
181 }
182
Scott Bakerc481b322015-02-27 12:12:14 -0800183class CDNPrefixAdmin(HPCAdmin):
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400184 form = CDNPrefixForm
Scott Baker63d1a552014-08-21 15:19:07 -0700185 list_display = ['backend_status_icon', 'prefix','contentProvider']
186 list_display_links = ('backend_status_icon', 'prefix', )
Scott Baker40c00762014-08-21 16:55:59 -0700187 fields = ['backend_status_text', 'prefix', 'contentProvider', 'cdn_prefix_id', 'description', 'defaultOriginServer', 'enabled']
188 readonly_fields = ('backend_status_text', )
Scott Baker446eaca2014-05-23 13:16:57 -0700189 user_readonly_fields = ['prefix','contentProvider', "cdn_prefix_id", "description", "defaultOriginServer", "enabled"]
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400190
Scott Bakerc481b322015-02-27 12:12:14 -0800191class SiteMapAdmin(HPCAdmin):
Scott Baker53491082014-03-13 23:15:19 -0700192 model = SiteMap
193 verbose_name = "Site Map"
194 verbose_name_plural = "Site Map"
Scott Baker63d1a552014-08-21 15:19:07 -0700195 list_display = ("backend_status_icon", "name", "contentProvider", "serviceProvider")
196 list_display_links = ('backend_status_icon', 'name', )
Scott Baker7e3b78c2015-03-13 09:24:25 -0700197 fields = ['backend_status_text', 'name', 'hpcService', 'cdnPrefix', 'contentProvider', 'serviceProvider', 'map', 'map_id']
198 user_readonly_fields = ('backend_status_text', "name", "hpcService", "cdnPrefix", "contentProvider", "serviceProvider", "description", "map")
Scott Baker40c00762014-08-21 16:55:59 -0700199 readonly_fields = ('backend_status_text', )
Scott Baker53491082014-03-13 23:15:19 -0700200
Scott Bakerc481b322015-02-27 12:12:14 -0800201class AccessMapAdmin(HPCAdmin):
Scott Baker53491082014-03-13 23:15:19 -0700202 model = AccessMap
203 verbose_name = "Access Map"
204 verbose_name_plural = "Access Map"
Scott Baker63d1a552014-08-21 15:19:07 -0700205 list_display = ("backend_status_icon", "name", "contentProvider")
206 list_display_links = ('backend_status_icon', 'name', )
Scott Baker40c00762014-08-21 16:55:59 -0700207 user_readonly_fields = ('backend_status_text', "name", "contentProvider", "description", "map")
208 readonly_fields = ('backend_status_text', )
Scott Baker53491082014-03-13 23:15:19 -0700209
Scott Baker8977c962015-03-18 17:37:46 -0700210class HpcHealthCheckAdmin(HPCAdmin):
211 model = HpcHealthCheck
212 verbose_name = "Health Check"
213 verbose_name = "Health Checks"
214 list_display = ["backend_status_icon", "resource_name", "kind"]
215 list_display_links = ["backend_status_icon", "resource_name"]
216 fields = ["backend_status_text", "hpcService", "resource_name", "kind", "result_contains", "result_min_size", "result_max_size"]
217 readonly_fields = ["backend_status_text",]
218
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400219admin.site.register(ServiceProvider, ServiceProviderAdmin)
220admin.site.register(ContentProvider, ContentProviderAdmin)
221admin.site.register(CDNPrefix, CDNPrefixAdmin)
222admin.site.register(OriginServer,OriginServerAdmin)
Scott Baker446eaca2014-05-23 13:16:57 -0700223admin.site.register(HpcService, HpcServiceAdmin)
Scott Baker53491082014-03-13 23:15:19 -0700224admin.site.register(SiteMap, SiteMapAdmin)
225admin.site.register(AccessMap, AccessMapAdmin)
Scott Baker8977c962015-03-18 17:37:46 -0700226admin.site.register(HpcHealthCheck, HpcHealthCheckAdmin)
Siobhan Tullybfd11dc2013-09-03 12:59:24 -0400227