SLA and Service Directory code added
[unfold.git] / sla / slaclient / service / fed4fire / fed4fireservice.py
diff --git a/sla/slaclient/service/fed4fire/fed4fireservice.py b/sla/slaclient/service/fed4fire/fed4fireservice.py
new file mode 100755 (executable)
index 0000000..caecf26
--- /dev/null
@@ -0,0 +1,138 @@
+# -*- 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