SLA plugin: fixed template shown in dialog
[myslice.git] / sla / slicetabsla.py
index 5fcdc04..cc26b25 100755 (executable)
@@ -3,6 +3,7 @@ from __future__ import print_function
 # this somehow is not used anymore - should it not be ?
 import ast
 from datetime import datetime
+import json
 import pytz
 from django.template import RequestContext
 from django.shortcuts import render_to_response
@@ -25,62 +26,6 @@ from django.http import HttpResponse
 
 from myslice.settings import logger, SLA_COLLECTOR_URL
 
-
-# class AgreementsFilter(object):
-# def __init__(self, status=None, provider=None, consumer=None):
-#         self.status = status
-#         self.provider = provider
-#         self.consumer = consumer
-#
-#     def __repr__(self):
-#         return "<AgreementsFilter(status={}, provider={}, consumer={})>".format(
-#             self.status, self.provider, self.consumer
-#         )
-#
-#     @staticmethod
-#     def _check(expectedvalue, actualvalue):
-#         if expectedvalue is None or expectedvalue == '':
-#             return True
-#         else:
-#             return actualvalue == expectedvalue
-#
-#     def check(self, agreement):
-#         """Check if this agreement satisfy the filter.
-#
-#         The agreement must be previously annotated
-#         """
-#         guaranteestatus = agreement.guaranteestatus
-#         provider = agreement.context.provider
-#         consumer = agreement.context.consumer
-#         return (
-#             AgreementsFilter._check(self.status, guaranteestatus) and
-#             AgreementsFilter._check(self.provider, provider) and
-#             AgreementsFilter._check(self.consumer, consumer)
-#         )
-
-
-# class FilterForm(forms.Form):
-#     _attrs = {'class': 'form-control'}
-#     exclude = ()
-#     status = forms.ChoiceField(
-#         choices=[
-#             ('', 'All'),
-#             (wsag_model.AgreementStatus.StatusEnum.FULFILLED, 'Fulfilled'),
-#             (wsag_model.AgreementStatus.StatusEnum.VIOLATED, 'Violated'),
-#             (wsag_model.AgreementStatus.StatusEnum.NON_DETERMINED, 'Non determined')],
-#         widget=forms.Select(attrs=_attrs),
-#         required=False
-#     )
-#     provider = forms.CharField(
-#         widget=forms.TextInput(attrs=_attrs),
-#         required=False
-#     )
-#     consumer = forms.CharField(
-#         widget=forms.TextInput(attrs=_attrs),
-#         required=False
-#     )
-
-
 class SLAView(FreeAccessView, ThemeView):
     template_name = 'slice-tab-sla.html'
 
@@ -88,9 +33,6 @@ class SLAView(FreeAccessView, ThemeView):
 
         page = Page(request)
 
-        # logger.debug("SLA slice name: {}".format(slicename))
-
-        # consumer_id = None
         agreement_id = None
         enforcements = {}
         violations = {}
@@ -99,14 +41,6 @@ class SLAView(FreeAccessView, ThemeView):
                 'ok', 'slivers']
         ag_info = []
 
-        # filter_ = None
-        # form = FilterForm(request.GET)
-        # if form.is_valid():
-        #     filter_ = _get_filter_from_form(form)
-
-        # consumer_id = _get_consumer_id(request)
-
-        # agreements = _get_agreements(agreement_id, consumer_id=consumer_id, filter_=filter_)
         agreements = _get_agreements_by_slice(slicename)
 
         for agreement in agreements:
@@ -117,7 +51,6 @@ class SLAView(FreeAccessView, ThemeView):
             row.append(agreement.context.time_formatted())  # Date
 
             enf = _get_enforcement(agreement.agreement_id, provider)
-            logger.debug("SLA AAAAA: {}".format(agreement.guaranteestatus))
 
             if enf.enabled == 'true':
                 row.append('Evaluating')  # Status
@@ -176,46 +109,6 @@ class SLAView(FreeAccessView, ThemeView):
         return render_to_response(self.template_name, template_env, context_instance=RequestContext(request))
 
 
-# class AgreementsFilter(object):
-#     def __init__(self, status=None, provider=None, consumer=None):
-#         self.status = status
-#         self.provider = provider
-#         self.consumer = consumer
-#
-#     def __repr__(self):
-#         return "<AgreementsFilter(status={}, provider={}, consumer={})>".format(
-#             self.status, self.provider, self.consumer
-#         )
-#
-#     @staticmethod
-#     def _check(expectedvalue, actualvalue):
-#         if expectedvalue is None or expectedvalue == '':
-#             return True
-#         else:
-#             return actualvalue == expectedvalue
-#
-#     def check(self, agreement):
-#         """Check if this agreement satisfy the filter.
-#
-#         The agreement must be previously annotated
-#         """
-#         guaranteestatus = agreement.guaranteestatus
-#         provider = agreement.context.provider
-#         consumer = agreement.context.consumer
-#         return (
-#             AgreementsFilter._check(self.status, guaranteestatus) and
-#             AgreementsFilter._check(self.provider, provider) and
-#             AgreementsFilter._check(self.consumer, consumer)
-#         )
-
-
-# class ContactForm(forms.Form):
-#     subject = forms.CharField(max_length=100)
-#     message = forms.CharField()
-#     sender = forms.EmailField()
-#     cc_myself = forms.BooleanField(required=False)
-
-
 def _get_agreements_client():
     return restclient.Factory.agreements()
 
@@ -244,13 +137,6 @@ def _get_enforcement(agreement_id, testbed):
     return enforcement
 
 
-# def _get_filter_from_form(form):
-#
-#     data = form.cleaned_data
-#     result = AgreementsFilter(
-#         data["status"], data["provider"], data["consumer"])
-#     return result
-
 def agreement_term_violations(request, agreement_id, guarantee_name):
     page = Page(request)
     prelude_env = page.prelude_env()
@@ -288,9 +174,6 @@ def agreement_term_violations(request, agreement_id, guarantee_name):
     return render_to_response('violations_template.html', context, context_instance=RequestContext(request))
 
 
-#     return render(request, 'violations_template.html', context)
-
-
 # TODO Change function to class
 def agreement_details(request, agreement_id):
     page = Page(request)
@@ -316,38 +199,6 @@ def agreement_details(request, agreement_id):
     #return render(request, 'agreement_detail.html', context)
 
 
-# def _get_agreements(agreement_id, slice=None, provider_id=None, consumer_id=None, filter_=None):
-#
-#     agreements_client = _get_agreements_client()
-#     if agreement_id is None:
-#         if consumer_id is not None:
-#             agreements, response = agreements_client.getbyconsumer(consumer_id)
-#         elif provider_id is not None:
-#             agreements, response = agreements_client.getbyprovider(provider_id)
-#         elif slice is not None:
-#             agreements_client = _get_agreements_client("slice")
-#             agreements, response = agreements_client.getbyslice(slice)
-#         else:
-#             raise ValueError(
-#                 "Invalid values: consumer_id and provider_id are None")
-#     else:
-#         agreement, response = agreements_client.getbyid(agreement_id)
-#         agreements = [agreement]
-#
-#     annotator = wsag_helper.AgreementAnnotator()
-#     for agreement in agreements:
-#         id_ = agreement.agreement_id
-#         testbed = agreement.context.provider
-#         status = _get_agreement_status(id_, testbed)
-#         annotator.annotate_agreement(agreement, status)
-#
-#     if filter_ is not None:
-#         print "FILTERING ", repr(filter_)
-#         agreements = filter(filter_.check, agreements)
-#     else:
-#         print "NOT FILTERING"
-#     return agreements
-
 def _get_agreements_by_slice(slice):
     agreements_client = _get_agreements_client()
     agreements, response = agreements_client.getbyslice(slice)
@@ -362,12 +213,6 @@ def _get_agreements_by_slice(slice):
     return agreements
 
 
-# def _get_agreements_by_consumer(consumer_id):
-#
-#     agreements_client = _get_agreements_client()
-#     agreements, response = agreements_client.getbyconsumer(consumer_id)
-#     return agreements
-
 def _get_agreement_status(agreement_id, testbed):
     agreements_client = _get_agreements_client()
     status, response = agreements_client.getstatus(agreement_id, testbed)
@@ -392,6 +237,26 @@ class Testbeds(FreeAccessView, ThemeView):
         return HttpResponse(SLAtestbeds.text, content_type="application/json", status=SLAtestbeds.status_code)
 
 
+class AgreementTemplates(FreeAccessView, ThemeView):
+    def get(self, request, *args, **kwargs):
+        c = restclient.Templates(SLA_COLLECTOR_URL)
+        testbed = kwargs.get('testbed', None)
+
+        #logger.debug("AAAAA testbed: {}".format(testbed))
+
+        templates, response = c.getall(testbed)
+        service_level_objectives = []
+
+        #logger.debug("BBBBB templates: {}".format(templates))
+
+        for template in templates:
+            service_level_objectives.append(
+                [v.servicelevelobjective for v in template.guaranteeterms.values()])
+
+        logger.debug("CCCCC slo: {}".format(service_level_objectives))
+
+        return HttpResponse(service_level_objectives, content_type="application/json", status=response.status_code)
+
 class CreateAgreement(LoginRequiredView, ThemeView):
     def post(self, request, *args, **kwargs):
 
@@ -402,22 +267,30 @@ class CreateAgreement(LoginRequiredView, ThemeView):
         pattern = re.compile(testbed_urn_regex)
         testbed_urn = pattern.search(data["SLIVER_INFO_AGGREGATE_URN"]).group(1)
 
-        tstmp = data["SLIVER_INFO_EXPIRATION"]
+        # Fix for django QueryDict list parameters
+        slivers = data.getlist("SLIVER_INFO_URN[]")
+        data["SLIVER_INFO_URN"] = slivers
+        del data["SLIVER_INFO_URN[]"]
 
+        # Timestamp to ISO date + timezone
+        tstmp = data["SLIVER_INFO_EXPIRATION"]
         dt = datetime.fromtimestamp(float(tstmp))
-        gmt_2 = pytz.timezone("Etc/GMT-2") # FIXME: hardcoded for demo purposes
-        dlocal = gmt_2.localize(dt).isoformat()
-
+        # gmt_2 = pytz.timezone("Etc/GMT-2")
+        dlocal = gmt_2.localize(dt).isoformat()
+        dlocal = dt.isoformat() + "CET" # FIXME: hardcoded for demo purposes
         data["SLIVER_INFO_EXPIRATION"] = dlocal
 
-        logger.debug("SLA Agreement parameters: {}".format(data))
+        # logger.debug("SLA Agreement parameters: {}".format(data.dict()))
+        # import pdb; pdb.set_trace()
 
         try:
-            response = c.post("agreementslist/", data=data, testbed=testbed_urn)
+            response = c.post("agreementslist/", data=json.dumps(data),
+                              headers={"accept": "application/json",
+                                 "content-type": "application/json"})
         except Exception as e:
-            import traceback, sys
-
-            traceback.print_exc(file=sys.stdout)
-            logger.debug("SLA ERROR {}".format(e.message))
+            import traceback, sys
+            #
+            traceback.print_exc(file=sys.stdout)
+            logger.debug("SLA Error: CreateAgreement {}".format(e.message))
 
         return HttpResponse(response.text, status=response.status_code)