From 3a4354b6bfe461218ddd2c1bdb89f6051624d328 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Javier=20Garc=C3=ADa?= Date: Thu, 31 Jul 2014 11:47:25 +0200 Subject: [PATCH] Fixed SLA-Collector requests - Now works with different testbeds and independent slices --- myslice/settings.py | 2 +- sla/slaclient/restclient.py | 55 +++++++++++++++++++++++++------------ sla/slicetabsla.py | 53 +++++++++++++++-------------------- 3 files changed, 60 insertions(+), 50 deletions(-) diff --git a/myslice/settings.py b/myslice/settings.py index 1f5f662d..17effaca 100644 --- a/myslice/settings.py +++ b/myslice/settings.py @@ -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 = "" diff --git a/sla/slaclient/restclient.py b/sla/slaclient/restclient.py index 5d1641f7..602c9272 100755 --- a/sla/slaclient/restclient.py +++ b/sla/slaclient/restclient.py @@ -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) diff --git a/sla/slicetabsla.py b/sla/slicetabsla.py index b220af13..564079be 100755 --- a/sla/slicetabsla.py +++ b/sla/slicetabsla.py @@ -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 -- 2.43.0