1 # this somehow is not used anymore - should it not be ?
2 from django.template import RequestContext
3 from django.shortcuts import render_to_response
4 from django.shortcuts import render
5 from django import forms
7 from unfold.loginrequired import FreeAccessView
8 from unfold.page import Page
9 from sla.slaclient import restclient
10 from sla.slaclient import wsag_model
12 from myslice.theme import ThemeView
13 # from sla import SLAPlugin
14 from django.core.urlresolvers import reverse
15 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
17 import slaclient.service.fed4fire.fed4fireservice as fed4fireservice
18 from rest_framework.views import APIView
19 from django.http import HttpResponse
30 class AgreementsFilter(object):
31 def __init__(self, status=None, provider=None, consumer=None):
33 self.provider = provider
34 self.consumer = consumer
37 return "<AgreementsFilter(status={}, provider={}, consumer={})>".format(
38 self.status, self.provider, self.consumer
42 def _check(expectedvalue, actualvalue):
43 if expectedvalue is None or expectedvalue == '':
46 return actualvalue == expectedvalue
48 def check(self, agreement):
49 """Check if this agreement satisfy the filter.
51 The agreement must be previously annotated
53 guaranteestatus = agreement.guaranteestatus
54 provider = agreement.context.provider
55 consumer = agreement.context.consumer
57 AgreementsFilter._check(self.status, guaranteestatus) and
58 AgreementsFilter._check(self.provider, provider) and
59 AgreementsFilter._check(self.consumer, consumer)
63 class FilterForm(forms.Form):
64 _attrs = {'class': 'form-control'}
66 status = forms.ChoiceField(
69 (wsag_model.AgreementStatus.StatusEnum.FULFILLED, 'Fulfilled'),
70 (wsag_model.AgreementStatus.StatusEnum.VIOLATED, 'Violated'),
71 (wsag_model.AgreementStatus.StatusEnum.NON_DETERMINED, 'Non determined')],
72 widget=forms.Select(attrs=_attrs),
75 provider = forms.CharField(
76 widget=forms.TextInput(attrs=_attrs),
79 consumer = forms.CharField(
80 widget=forms.TextInput(attrs=_attrs),
85 class SLAView (FreeAccessView, ThemeView):
86 template_name = 'slice-tab-sla.html'
88 def get (self, request, slicename, state=None):
98 form = FilterForm(request.GET)
101 filter_ = _get_filter_from_form(form)
103 consumer_id = _get_consumer_id(request)
105 agreements = _get_agreements(agreement_id, consumer_id=consumer_id, filter_=filter_)
107 for agreement in agreements:
108 enf = _get_enforcement(agreement.agreement_id)
109 if enf.enabled == 'true':
110 enforcements[agreement.agreement_id] = "ACTIVE"
112 enforcements[agreement.agreement_id] = "UNACTIVE"
113 violations_list = _get_agreement_violations(agreement.agreement_id, "GT_Performance")
115 if len(violations_list):
116 violations[agreement.agreement_id] = float(violations_list[0]["actualValue"])*100
118 violations[agreement.agreement_id] = 100
121 # write something of our own instead
122 # more general variables expected in the template
123 template_env['title'] = 'SLA Agreements'
124 template_env['agreements'] = agreements
125 template_env['username'] = request.user
126 template_env['slicename'] = slicename
127 template_env['enforcements'] = enforcements
128 template_env['last_violation_list'] = violations
130 # the prelude object in page contains a summary of the requirements() for all plugins
131 # define {js,css}_{files,chunks}
132 prelude_env = page.prelude_env()
133 template_env.update(prelude_env)
135 return render_to_response (self.template_name, template_env, context_instance=RequestContext(request))
138 class AgreementsFilter(object):
139 def __init__(self, status=None, provider=None, consumer=None):
141 self.provider = provider
142 self.consumer = consumer
145 return "<AgreementsFilter(status={}, provider={}, consumer={})>".format(
146 self.status, self.provider, self.consumer
150 def _check(expectedvalue, actualvalue):
151 if expectedvalue is None or expectedvalue == '':
154 return actualvalue == expectedvalue
156 def check(self, agreement):
157 """Check if this agreement satisfy the filter.
159 The agreement must be previously annotated
161 guaranteestatus = agreement.guaranteestatus
162 provider = agreement.context.provider
163 consumer = agreement.context.consumer
165 AgreementsFilter._check(self.status, guaranteestatus) and
166 AgreementsFilter._check(self.provider, provider) and
167 AgreementsFilter._check(self.consumer, consumer)
171 class ContactForm(forms.Form):
172 subject = forms.CharField(max_length=100)
173 message = forms.CharField()
174 sender = forms.EmailField()
175 cc_myself = forms.BooleanField(required=False)
178 def _get_agreements_client():
179 return restclient.Factory.agreements()
182 def _get_violations_client():
183 return restclient.Factory.violations()
185 def _get_enforcements_client():
186 return restclient.Factory.enforcements()
188 def _get_consumer_id(request):
192 def _get_agreement(agreement_id):
194 agreements_client = _get_agreements_client()
195 agreement, response = agreements_client.getbyid(agreement_id)
198 def _get_enforcement(agreement_id):
200 enforcements_client = _get_enforcements_client()
201 enforcement, response = enforcements_client.getbyagreement(agreement_id)
204 def _get_filter_from_form(form):
206 data = form.cleaned_data
207 result = AgreementsFilter(
208 data["status"], data["provider"], data["consumer"])
211 def agreement_term_violations(request, agreement_id, guarantee_name):
214 prelude_env = page.prelude_env()
216 annotator = wsag_helper.AgreementAnnotator()
217 agreement = _get_agreement(agreement_id)
218 violations = _get_agreement_violations(agreement_id, guarantee_name)
219 annotator.annotate_agreement(agreement)
221 slicename = request.POST.get('slicename')
223 paginator = Paginator(violations, 25) # Show 25 violations per page
224 page_num = request.GET.get('page')
227 violation_page = paginator.page(page_num)
228 except PageNotAnInteger:
229 # If page is not an integer, deliver first page.
230 violation_page = paginator.page(1)
232 # If page is out of range (e.g. 9999), deliver first page.
233 violation_page = paginator.page(1)
235 print "\n******************"
237 print "******************\n"
240 'agreement_id': agreement_id,
241 'guarantee_term': agreement.guaranteeterms[guarantee_name],
242 'violations': violation_page,
243 'agreement': agreement,
244 'slicename': slicename,
245 'last_violation': violations[-1].actual_value
248 context.update(prelude_env)
250 return render_to_response ('violations_template.html', context, context_instance=RequestContext(request))
251 # return render(request, 'violations_template.html', context)
253 def agreement_details(request, agreement_id):
256 prelude_env = page.prelude_env()
258 annotator = wsag_helper.AgreementAnnotator()
259 agreement = _get_agreement(agreement_id)
260 violations = _get_agreement_violations(agreement_id)
261 status = _get_agreement_status(agreement_id)
262 annotator.annotate_agreement(agreement, status, violations)
264 violations_by_date = wsag_helper.get_violations_bydate(violations)
266 'agreement_id': agreement_id,
267 'agreement': agreement,
269 'violations_by_date': violations_by_date
272 context.update(prelude_env)
274 return render_to_response ('violations_template.html', context, context_instance=RequestContext(request))
275 #return render(request, 'agreement_detail.html', context)
278 def _get_agreements_client():
279 return restclient.Factory.agreements()
282 def _get_agreement(agreement_id):
284 agreements_client = _get_agreements_client()
285 agreement, response = agreements_client.getbyid(agreement_id)
288 def _get_agreements(agreement_id, provider_id=None, consumer_id=None, filter_=None):
290 agreements_client = _get_agreements_client()
291 if agreement_id is None:
292 if consumer_id is not None:
293 agreements, response = agreements_client.getbyconsumer(consumer_id)
294 elif provider_id is not None:
295 agreements, response = agreements_client.getbyprovider(provider_id)
298 "Invalid values: consumer_id and provider_id are None")
300 agreement, response = agreements_client.getbyid(agreement_id)
301 agreements = [agreement]
303 annotator = wsag_helper.AgreementAnnotator()
304 for agreement in agreements:
305 id_ = agreement.agreement_id
306 status = _get_agreement_status(id_)
307 annotator.annotate_agreement(agreement, status)
309 if filter_ is not None:
310 print "FILTERING ", repr(filter_)
311 agreements = filter(filter_.check, agreements);
313 print "NOT FILTERING"
317 def _get_agreements_by_consumer(consumer_id):
319 agreements_client = _get_agreements_client()
320 agreements, response = agreements_client.getbyconsumer(consumer_id)
323 def _get_agreement_status(agreement_id):
325 agreements_client = _get_agreements_client()
326 status, response = agreements_client.getstatus(agreement_id)
329 def _get_agreement_violations(agreement_id, term=None):
331 violations_client = _get_violations_client()
332 violations, response = violations_client.getbyagreement(agreement_id, term)
336 class AgreementSimple(APIView):
337 def build_response(self, code, text):
338 response = HttpResponse(text, content_type="text/plain", status=code)
341 def post( self, request, **kwargs):
342 #import pdb; pdb.set_trace()
343 print "------------------------------------------------1"
345 for key, value in request.DATA.items():
347 data[new_key] = value
350 template_id = data['template_id']
352 return self.build_response(400, 'Invalid template_id')
357 return self.build_response(400, 'Invalid user')
360 expiration_time = data['expiration_time']
362 return self.build_response(400, 'Invalid expiration_time')
365 print "Calling createagreementsimplified with template_id:",template_id,"and user:",user
366 result = fed4fireservice.createagreementsimplified(template_id, user, expiration_time)
369 print traceback.format_exc()
370 print '%s (%s)' % (e, type(e))
372 return self.build_response(400, 'Problem creating agreement')
374 return self.build_response(200, result)