1 from datetime import datetime
2 from dateutil import tz
5 """Contains the bean models for the SlaManager xml/json types
9 class Agreement(object):
11 class Context(object):
13 self.expirationtime = datetime.now()
22 "expirationtime={}, provider={}, consumer={}, service={})>"
24 repr(self.expirationtime),
29 def service_formatted(self):
30 return self.service.replace('_', ' ')
32 def testbed_formatted(self):
33 return self.template_id.replace('Service', ' - ')
35 def time_formatted(self):
36 from_zone = tz.tzutc()
37 to_zone = tz.tzlocal()
38 time = dateutil.parser.parse(self.expirationtime)
39 time = time.replace(tzinfo=from_zone)
40 time = time.astimezone(to_zone)
41 return time.strftime('%d-%m-%Y at %H:%M:%S')
43 class Property(object):
51 str_ = "<Property(name={}, servicename={}, \
52 metric={}, location={})>"
55 repr(self.servicename),
59 class GuaranteeTerm(object):
61 class GuaranteeScope(object):
67 return "<GuaranteeScope(servicename={}, scope={}>)".format(
68 repr(self.servicename),
72 class ServiceLevelObjective(object):
75 self.customservicelevel = ""
78 s = "<ServiceLevelObjective(kpiname={}, \
79 customservicelevel={})>"
82 repr(self.customservicelevel)
87 self.scopes = [] # item: GuaranteeScope
88 """:type : list[Agreement.GuaranteeTerm.GuaranteeScope]"""
89 self.servicelevelobjective = \
90 Agreement.GuaranteeTerm.ServiceLevelObjective()
93 s = "<GuaranteeTerm(scopes={}, servicelevelobjective={})>"
96 repr(self.servicelevelobjective)
100 """Simple bean model for a ws-agreement agreement/template
102 self.context = Agreement.Context()
103 self.agreement_id = ""
104 self.descriptionterms = {}
105 self.variables = {} # key: Property.name / value: Property
106 """:type : dict[str,Agreement.Property]"""
107 self.guaranteeterms = {} # key: GT.name / value: GT
108 """:type : dict[str,Agreement.GuaranteeTerm]"""
111 s = ("<Agreement(agreement_id={}, context={}, descriptionterms={}, " +
112 "variables={}, guaranteeterms={}>")
114 repr(self.agreement_id),
116 repr(self.descriptionterms),
117 repr(self.variables),
118 repr(self.guaranteeterms)
122 class Template(Agreement):
124 super(Template, self).__init__()
125 self.template_id = ""
128 s = ("<Template(template_id={}, context={}, descriptionterms={}, " +
129 "variables={}, guaranteeterms={}>")
131 repr(self.template_id),
133 repr(self.descriptionterms),
134 repr(self.variables),
135 repr(self.guaranteeterms)
139 class Enforcement(object):
141 """Simple bean model for an enforcement"""
142 self.agreement_id = ""
146 return ("<Enforcement(agreement_id={}, enabled={})>".format(
152 class AgreementStatus(object):
155 VIOLATED = "VIOLATED"
156 FULFILLED = "FULFILLED"
157 NON_DETERMINED = "NON_DETERMINED"
159 class GuaranteeTermStatus(object):
165 s = "<GuaranteeTermStatus(name='{}' status='{}')>"
166 return s.format(self.name, self.status)
169 self.agreement_id = ""
170 self.guaranteestatus = ""
171 self.guaranteeterms = []
175 "<AgreementStatus( agreement_id={}, guaranteestatus={}, " +
176 "guaranteeterms={})>").format(
178 self.guaranteestatus,
179 repr(self.guaranteeterms))
182 def json_decode(json_obj):
183 o = AgreementStatus()
184 o.agreement_id = json_obj["AgreementId"]
185 o.guaranteestatus = json_obj["guaranteestatus"]
187 for term in json_obj["guaranteeterms"]:
188 t = AgreementStatus.GuaranteeTermStatus()
189 t.name = term["name"]
190 t.status = term["status"]
191 o.guaranteeterms.append(t)
195 class Violation(object):
197 """Simple bean model for a violation"""
199 self.contract_uuid = ""
200 self.service_scope = ""
201 self.service_name = ""
202 self.metric_name = ""
203 self.datetime = datetime.utcnow()
204 self.actual_value = 0
207 return ("<Violation(uuid={}, datetime={}, contract_uuid={}, \
208 service_name={}, service_scope={}, metric_name={}, \
209 actual_value={})>\n".format(
219 def format_time(self):
220 # return str(datetime.fromtimestamp(self.datetime))
221 return str(self.datetime)
224 class Provider(object):
226 """Simple bean model for a provider"""
231 return ("<Provider(uuid={}, name={})>".format(
237 xml = "<provider><uuid>{}</uuid><name>{}</name></provider>""".format(
245 """Creates a Provider object from a dict structure (e.g.
246 a deserialized json string)
249 json_obj = json.loads(json_data)
250 out = wsag_model.Provider.from_dict(json_obj)
252 result = Provider(d["uuid"], d["name"])