--- /dev/null
+# -*- coding: utf-8 -*-\r
+"""Builds templates/agreements based on input data (in json format), submitting\r
+to sla manager.\r
+\r
+It is intended as backend service for a rest interface.\r
+\r
+The json input must work together with the templates to form a valid template\r
+ or agreement for Xifi (be careful!)\r
+\r
+This (very simple) service is coupled to the way xifi is interpreting\r
+ws-agreement.\r
+\r
+\r
+"""\r
+import json\r
+import jsonparser\r
+from sla.slaclient import wsag_model\r
+from sla.slaclient import restclient\r
+from sla.slaclient.templates.fed4fire.django.factory import Factory as TemplateFactory\r
+import sla.slaclient.templates.fed4fire as fed4fire\r
+from time import localtime, strftime\r
+import uuid\r
+class ServiceContext(object):\r
+ def __init__(self, restfactory = None, templatefactory=None):\r
+ """\r
+ :type restfactory: restclient.Factory\r
+ """\r
+ self.restfactory = restfactory\r
+ self.templatefactory = templatefactory\r
+\r
+\r
+def createprovider(json_data, context):\r
+ """Creates a provider in the SlaManager.\r
+ :type json_data:str\r
+ :type context: ServiceContext\r
+\r
+ An example input is:\r
+ {\r
+ "uuid": "f4c993580-03fe-41eb-8a21-a56709f9370f",\r
+ "name": "provider"\r
+ }\r
+ """\r
+ json_obj = json.loads(json_data)\r
+ p = wsag_model.Provider.from_dict(json_obj)\r
+ provider_client = context.restfactory.providers()\r
+ provider_client.create(p)\r
+\r
+\r
+def createtemplate(json_data, context):\r
+ """Creates a template in the SlaManager\r
+\r
+ An example input is:\r
+ {\r
+ "template_id" : "template-id",\r
+ "template_name" : "template-name",\r
+ "provider" : "provider-1",\r
+ "service_id" : "service-id",\r
+ "expiration_time" : "2014-03-28T13:55:00Z",\r
+ "service_properties" : [\r
+ {\r
+ "name" : "uptime",\r
+ "servicename" : "service-a",\r
+ "metric" : "xs:double",\r
+ "location" : "//service-a/uptime"\r
+ }\r
+ ]\r
+ }\r
+\r
+ :type json_data:str\r
+ :type context: ServiceContext\r
+ """\r
+ data = jsonparser.templateinput_from_json(json_data)\r
+ slatemplate = sla.slaclient.templates.fed4fire.render_slatemplate(data)\r
+ client = context.restfactory.templates()\r
+ client.create(slatemplate)\r
+\r
+\r
+def createagreement(json_data, context):\r
+ """Creates an agreement in the SlaManager.\r
+\r
+ The template with template_id is retrieved and the properties and some\r
+ context info is copied to the agreement.\r
+\r
+ An example input is:\r
+ {\r
+ "template_id" : "template-id",\r
+ "agreement_id" : "agreement-id",\r
+ "expiration_time" : "2014-03-28T13:55:00Z",\r
+ "consumer" : "consumer-a",\r
+ "guarantees" : [\r
+ {\r
+ "name" : "uptime",\r
+ "bounds" : [ "0", "1" ]\r
+ }\r
+ ]\r
+ }\r
+ :type json_data:str\r
+ :type context: ServiceContext\r
+ """\r
+ client_templates = context.restfactory.templates()\r
+\r
+ # Builds AgreementInput from json\r
+ data = jsonparser.agreementinput_from_json(json_data)\r
+ # Read template from manager\r
+ slatemplate, request = client_templates.getbyid(data.template_id)\r
+ # Copy (overriding if necessary) from template to AgreementInput\r
+ final_data = data.from_template(slatemplate)\r
+ slaagreement = fed4fire.render_slaagreement(final_data)\r
+\r
+ client_agreements = context.restfactory.agreements()\r
+ return client_agreements.create(slaagreement)\r
+ \r
+\r
+def createagreementsimplified(template_id, user, expiration_time):\r
+ context = ServiceContext(\r
+ restclient.Factory(),\r
+ TemplateFactory()\r
+ )\r
+ \r
+ agreement = {\r
+ "agreement_id": str(uuid.uuid4()),\r
+ "template_id": template_id,\r
+ "expiration_time": expiration_time,\r
+ "consumer": user,\r
+ }\r
+ \r
+ json_data = json.dumps(agreement)\r
+\r
+ return createagreement(json_data, context)\r
+ \r
+def main():\r
+ createagreementsimplified("iMindsServiceWiLab2", "virtualwall", "2014-04-34T23:12:12")\r
+\r
+\r
+if __name__ == "__main__":\r
+ main()\r
+ \r
+ \r