Fixed SLA-Collector requests
authorJavier García <javier.garcial.external@atos.net>
Thu, 31 Jul 2014 09:47:25 +0000 (11:47 +0200)
committerJavier García <javier.garcial.external@atos.net>
Thu, 31 Jul 2014 09:47:25 +0000 (11:47 +0200)
- Now works with different testbeds and independent slices

myslice/settings.py
sla/slaclient/restclient.py
sla/slicetabsla.py

index 1f5f662..17effac 100644 (file)
@@ -296,6 +296,6 @@ CSRF_FAILURE_VIEW = 'manifoldapi.manifoldproxy.csrf_failure'
 #SLA_MANAGER_URL = "http://157.193.215.125:4000/sla-service"
 # SLA_MANAGER_USER = "normal_user"
 # SLA_MANAGER_PASSWORD = "password"
-SLA_MANAGER_URL = "http://172.24.76.98:8080/sla"
+SLA_MANAGER_URL = "http://172.24.76.38:8000/sla"
 SLA_MANAGER_USER = ""
 SLA_MANAGER_PASSWORD = ""
index 5d1641f..602c927 100755 (executable)
@@ -43,12 +43,12 @@ rooturl = settings.SLA_MANAGER_URL
 
 class Factory(object):
     @staticmethod
-    def agreements():
+    def agreements(path):
         """Returns a REST client for Agreements
 
         :rtype : Agreements
          """
-        return Agreements(rooturl)
+        return Agreements(rooturl, path)
 
     @staticmethod
     def providers():
@@ -112,16 +112,22 @@ class Client(object):
             c.get("/resource", headers = { "accept": "application/json" })
         """
         url = _buildpath_(self.rooturl, path)
-        url = url + "?testbed=iminds"  # TODO remove hardcoded string
+        if "testbed" in kwargs:
+            url = url + "?testbed=" + kwargs["testbed"]
         #kwargs['params']['testbed'] = 'iminds'
 
         if "headers" not in kwargs:
             kwargs["headers"] = {"accept": "application/xml"}
         # kwargs["auth"] = HTTPBasicAuth(settings.SLA_MANAGER_USER,
         #                                settings.SLA_MANAGER_PASSWORD)
+
+        for key, values in kwargs.iteritems():
+            print key, values
+
         result = requests.get(url, **kwargs)
-        #print "GET {} {} {}".format(
-        #    result.url, result.status_code, result.text[0:70])
+        print "GET {} {} {}".format(
+            result.url, result.status_code, result.text[0:70])
+        print result.encoding
 
         return result
 
@@ -211,18 +217,21 @@ class _Resource(object):
         resources = self._processresult(r, self.listconverter)
         return resources, r
 
-    def getbyid(self, id):
+    def getbyid(self, id, params):
         """Get resource 'id'"""
-        r = self.client.get(id)
+        r = self.client.get(id, params=params)
         resource = _Resource._processresult(r, self.converter)
         return resource, r
 
-    def get(self, params):
+    def get(self, path, params):
         """Generic query over resource: GET /resource?q1=v1&q2=v2...
 
         :param dict[str,str] params: values to pass as get parameters
         """
-        r = self.client.get("", params=params)
+        if path is None:
+            path = ""
+
+        r = self.client.get(path, params=params)
         resources = self._processresult(r, self.listconverter)
         return resources, r
 
@@ -281,14 +290,15 @@ class Agreements(object):
         """
         return self.res.get(dict(providerId=providerid))
 
-    def getstatus(self, agreementid):
+    def getstatus(self, agreementid, testbed):
         """Get guarantee status of an agreement
 
         :param str agreementid :
         :rtype : wsag_model.AgreementStatus
         """
-        path = _buildpath_(agreementid, "guaranteestatus")
-        r = self.res.client.get(path, headers={'accept': 'application/json'})
+        path = _buildpath_(_AGREEMENTS_PATH, agreementid, "guaranteestatus")
+        r = self.res.client.get(path, headers={'accept': 'application/json'},
+                                params={'testbed': testbed})
 
         json_obj = r.json()
 
@@ -296,6 +306,13 @@ class Agreements(object):
 
         return status, r
 
+    def getbyslice(self, slicename):
+        """Get the agreements corresponding to a slice
+
+        :rtype : list[wsag_model.Agreement]
+        """
+        return self.res.get(slicename, dict())
+
     def create(self, agreement):
         """Create a new agreement
 
@@ -401,7 +418,7 @@ class Violations(object):
         """
         return self.res.getbyid(violationid)
 
-    def getbyagreement(self, agreement_id, term=None):
+    def getbyagreement(self, agreement_id, testbed, term=None):
         """Get the violations of an agreement.
 
         :param str agreement_id:
@@ -409,9 +426,8 @@ class Violations(object):
             violations from all terms will be returned
         :rtype: list[wsag_model.Violation]
         """
-
-        return self.res.get(
-            {"agreementId": agreement_id, "guaranteeTerm": term})
+        path = _buildpath_(agreement_id, term)
+        return self.res.get(path, params={"testbed": testbed})
 
 
 class Enforcements(object):
@@ -433,17 +449,20 @@ class Enforcements(object):
         """
         return self.res.getall()
 
-    def getbyagreement(self, agreement_id):
+    def getbyagreement(self, agreement_id, testbed):
         """Get the enforcement of an agreement.
 
         :param str agreement_id:
 
         :rtype: list[wsag_model.Enforcement]
         """
-        return self.res.getbyid(agreement_id)
+        return self.res.getbyid(agreement_id, params={"testbed": testbed})
 
 
 def _buildpath_(*paths):
+    if "" in paths:
+        paths = [path for path in paths if path != ""]
+
     return "/".join(paths)
 
 
index b220af1..564079b 100755 (executable)
@@ -104,15 +104,19 @@ class SLAView (FreeAccessView, ThemeView):
 
         consumer_id = _get_consumer_id(request)
 
-        agreements = _get_agreements(agreement_id, consumer_id=consumer_id, filter_=filter_)
+        #agreements = _get_agreements(agreement_id, consumer_id=consumer_id, filter_=filter_)
+        agreements = _get_agreements(agreement_id, slice=slicename)
+        print "--- AGREEMENTS ---"
+        print agreements
 
         for agreement in agreements:
             row = []
-            row.append(agreement.context.provider) # Provider
+            provider = agreement.context.provider
+            row.append(provider) # Provider
             row.append(agreement) # Agreement
             row.append(agreement.context.time_formatted()) # Date
 
-            enf = _get_enforcement(agreement.agreement_id)
+            enf = _get_enforcement(agreement.agreement_id, provider)
 
             if enf.enabled == 'true':
                 row.append('Evaluating') # Status
@@ -127,7 +131,7 @@ class SLAView (FreeAccessView, ThemeView):
                 else:
                     row.append('Finished') # Status
 
-                    violations_list = _get_agreement_violations(agreement.agreement_id, "GT_Performance")
+                    violations_list = _get_agreement_violations(agreement.agreement_id, provider, "GT_Performance")
                     
                     if len(violations_list) > 0:
                         value = '%.2f'%float(violations_list[0].actual_value)
@@ -143,18 +147,6 @@ class SLAView (FreeAccessView, ThemeView):
 
             ag_info.append(dict(zip(keys,row)))
 
-            # enf = _get_enforcement(agreement.agreement_id)
-            # if enf.enabled == 'true':
-            #     enforcements[agreement.agreement_id] = "ACTIVE"
-            # else:
-            #     enforcements[agreement.agreement_id] = "UNACTIVE"
-            # violations_list = _get_agreement_violations(agreement.agreement_id, "GT_Performance")
-
-            # if len(violations_list):
-            #     violations[agreement.agreement_id] = float(violations_list[0]["actualValue"])*100
-            # else:
-            #     violations[agreement.agreement_id] = 100
-
         template_env = {}
        # write something of our own instead
        # more general variables expected in the template
@@ -215,8 +207,8 @@ class ContactForm(forms.Form):
     cc_myself = forms.BooleanField(required=False)
 
 
-def _get_agreements_client():
-    return restclient.Factory.agreements()
+def _get_agreements_client(path=""):
+    return restclient.Factory.agreements(path)
 
 
 def _get_violations_client():
@@ -235,10 +227,10 @@ def _get_agreement(agreement_id):
     agreement, response = agreements_client.getbyid(agreement_id)
     return agreement
 
-def _get_enforcement(agreement_id):
+def _get_enforcement(agreement_id, testbed):
 
     enforcements_client = _get_enforcements_client()
-    enforcement, response = enforcements_client.getbyagreement(agreement_id)
+    enforcement, response = enforcements_client.getbyagreement(agreement_id, testbed)
     return enforcement
 
 def _get_filter_from_form(form):
@@ -310,18 +302,13 @@ def agreement_details(request, agreement_id):
     return render_to_response ('violations_template.html', context, context_instance=RequestContext(request))
     #return render(request, 'agreement_detail.html', context)
 
-
-def _get_agreements_client():
-    return restclient.Factory.agreements()
-
-
 def _get_agreement(agreement_id):
 
     agreements_client = _get_agreements_client()
     agreement, response = agreements_client.getbyid(agreement_id)
     return agreement
 
-def _get_agreements(agreement_id, provider_id=None, consumer_id=None, filter_=None):
+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:
@@ -329,6 +316,9 @@ def _get_agreements(agreement_id, provider_id=None, consumer_id=None, filter_=No
             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")
@@ -339,7 +329,8 @@ def _get_agreements(agreement_id, provider_id=None, consumer_id=None, filter_=No
     annotator = wsag_helper.AgreementAnnotator()
     for agreement in agreements:
         id_ = agreement.agreement_id
-        status = _get_agreement_status(id_)
+        testbed = agreement.context.provider
+        status = _get_agreement_status(id_, testbed)
         annotator.annotate_agreement(agreement, status)
 
     if filter_ is not None:
@@ -356,16 +347,16 @@ def _get_agreements_by_consumer(consumer_id):
     agreements, response = agreements_client.getbyconsumer(consumer_id)
     return agreements
 
-def _get_agreement_status(agreement_id):
+def _get_agreement_status(agreement_id, testbed):
 
     agreements_client = _get_agreements_client()
-    status, response = agreements_client.getstatus(agreement_id)
+    status, response = agreements_client.getstatus(agreement_id, testbed)
     return status
 
-def _get_agreement_violations(agreement_id, term=None):
+def _get_agreement_violations(agreement_id, testbed, term=None):
 
     violations_client = _get_violations_client()
-    violations, response = violations_client.getbyagreement(agreement_id, term)
+    violations, response = violations_client.getbyagreement(agreement_id, testbed, term)
     return violations