SLA and Service Directory code added
[unfold.git] / sla / slaclient / wsag_model.py
diff --git a/sla/slaclient/wsag_model.py b/sla/slaclient/wsag_model.py
new file mode 100755 (executable)
index 0000000..1c9bd41
--- /dev/null
@@ -0,0 +1,233 @@
+from datetime import datetime
+
+"""Contains the bean models for the SlaManager xml/json types
+"""
+
+
+class Agreement(object):
+
+    class Context(object):
+        def __init__(self):
+            self.expirationtime = datetime.now()
+            self.service = ""
+            self.initiator = ""
+            self.responder = ""
+            self.provider = ""
+            self.consumer = ""
+
+        def __repr__(self):
+            s = "<Context(" + \
+                "expirationtime={}, provider={}, consumer={}, service={})>"
+            return s.format(
+                repr(self.expirationtime),
+                repr(self.provider),
+                repr(self.consumer),
+                repr(self.service))
+            
+        def service_formatted(self):
+            return self.service.replace('_', ' ')
+
+        def testbed_formatted(self):
+            return self.template_id.replace('Service', ' - ')
+
+    class Property(object):
+        def __init__(self):
+            self.servicename = ""
+            self.name = ""
+            self.metric = ""
+            self.location = ""
+
+        def __repr__(self):
+            str_ = "<Property(name={}, servicename={}, metric={}, location={})>"
+            return str_.format(
+                repr(self.name),
+                repr(self.servicename),
+                repr(self.metric),
+                repr(self.location))
+
+    class GuaranteeTerm(object):
+
+        class GuaranteeScope(object):
+            def __init__(self):
+                self.servicename = ""
+                self.scope = ""
+
+            def __repr__(self):
+                return "<GuaranteeScope(servicename={}, scope={}>)".format(
+                    repr(self.servicename),
+                    repr(self.scope)
+                )
+
+        class ServiceLevelObjective(object):
+            def __init__(self):
+                self.kpiname = ""
+                self.customservicelevel = ""
+
+            def __repr__(self):
+                s = "<ServiceLevelObjective(kpiname={}, customservicelevel={})>"
+                return s.format(
+                    repr(self.kpiname),
+                    repr(self.customservicelevel)
+                )
+
+        def __init__(self):
+            self.name = ""
+            self.scopes = []        # item: GuaranteeScope
+            """:type : list[Agreement.GuaranteeTerm.GuaranteeScope]"""
+            self.servicelevelobjective = \
+                Agreement.GuaranteeTerm.ServiceLevelObjective()
+
+        def __repr__(self):
+            s = "<GuaranteeTerm(scopes={}, servicelevelobjective={})>"
+            return s.format(
+                repr(self.scopes),
+                repr(self.servicelevelobjective)
+            )
+
+    def __init__(self):
+        """Simple bean model for a ws-agreement agreement/template
+        """
+        self.context = Agreement.Context()
+        self.agreement_id = ""
+        self.descriptionterms = {}
+        self.variables = {}         # key: Property.name / value: Property
+        """:type : dict[str,Agreement.Property]"""
+        self.guaranteeterms = {}    # key: GT.name / value: GT
+        """:type : dict[str,Agreement.GuaranteeTerm]"""
+
+    def __repr__(self):
+        s = ("<Agreement(agreement_id={}, context={}, descriptionterms={}, " +
+             "variables={}, guaranteeterms={}>")
+        return s.format(
+            repr(self.agreement_id),
+            repr(self.context),
+            repr(self.descriptionterms),
+            repr(self.variables),
+            repr(self.guaranteeterms)
+        )
+
+
+class Template(Agreement):
+    #egarrido this code has been copied from xifi and has not beeing tested
+    def __init__(self):
+        super(Template, self).__init__()
+        self.template_id = ""
+
+    def __repr__(self):
+        s = ("<Template(template_id={}, context={}, descriptionterms={}, " +
+             "variables={}, guaranteeterms={}>")
+        return s.format(
+            repr(self.template_id),
+            repr(self.context),
+            repr(self.descriptionterms),
+            repr(self.variables),
+            repr(self.guaranteeterms)
+        )
+
+
+class Enforcement(object):
+    def __init__(self):
+        """Simple bean model for an enforcement"""
+        self.agreement_id = ""
+        self.enabled = ""
+
+    def __repr__(self):
+        return ("<Enforcement(agreement_id={}, enabled={})>".format(
+                self.agreement_id,
+                self.enabled)
+        )
+
+class AgreementStatus(object):
+
+    class StatusEnum:
+        VIOLATED = "VIOLATED"
+        FULFILLED = "FULFILLED"
+        NON_DETERMINED = "NON_DETERMINED"
+
+    class GuaranteeTermStatus(object):
+        def __init__(self):
+            self.name = ""
+            self.status = ""
+
+        def __repr__(self):
+            s = "<GuaranteeTermStatus(name='{}' status='{}')>"
+            return s.format(self.name, self.status)
+
+    def __init__(self):
+        self.agreement_id = ""
+        self.guaranteestatus = ""
+        self.guaranteeterms = []
+
+    def __repr__(self):
+        return (
+            "<AgreementStatus( agreement_id={}, guaranteestatus={}, " +
+            "guaranteeterms={})>").format(
+                self.agreement_id,
+                self.guaranteestatus,
+                repr(self.guaranteeterms))
+
+    @staticmethod
+    def json_decode(json_obj):
+        o = AgreementStatus()
+        o.agreement_id = json_obj["AgreementId"]
+        o.guaranteestatus = json_obj["guaranteestatus"]
+
+        for term in json_obj["guaranteeterms"]:
+            t = AgreementStatus.GuaranteeTermStatus()
+            t.name = term["name"]
+            t.status = term["status"]
+            o.guaranteeterms.append(t)
+        return o
+
+
+class Violation(object):
+    def __init__(self):
+        """Simple bean model for a violation"""
+        self.uuid = ""
+        self.contract_uuid = ""
+        self.service_scope = ""
+        self.metric_name = ""
+        self.datetime = datetime.now()
+        self.actual_value = 0
+
+    def __repr__(self):
+        return ("<Violation(uuid={}, agremeent_id={}, service_scope={}, " +
+            "metric_name={}, datetime={}, actual_value={})>".format(
+                self.uuid,
+                self.contract_uuid,
+                self.service_scope,
+                self.metric_name,
+                self.datetime,
+                self.actual_value)
+        )
+
+
+class Provider(object):
+    def __init__(self):
+        """Simple bean model for a provider"""
+        self.uuid = ""
+        self.name = ""
+
+    def __repr__(self):
+        return ("<Provider(uuid={}, name={})>".format(
+                self.uuid,
+                self.name)
+        )
+    def to_xml(self):
+        xml = "<provider><uuid>{}</uuid><name>{}</name></provider>""".format(
+            self.uuid,
+            self.name
+        )
+        return xml
+
+    @staticmethod
+    def from_dict(d):
+        """Creates a Provider object from a dict structure (e.g.
+        a deserialized json string)
+
+        Usage:
+        json_obj = json.loads(json_data)
+        out = wsag_model.Provider.from_dict(json_obj)
+        """
+        result = Provider(d["uuid"], d["name"])
+        return result