SLA code updated and new image for SmartSantander Application Service added
authorjavier <javier.garcial.external@atos.net>
Tue, 17 Jun 2014 16:33:59 +0000 (18:33 +0200)
committerjavier <javier.garcial.external@atos.net>
Tue, 17 Jun 2014 16:33:59 +0000 (18:33 +0200)
portal/static/img/servicedirectory/smartsantander.png
sla/slaclient/restclient.py
sla/slaclient/wsag_model.py
sla/slicetabsla.py
sla/templates/slice-tab-sla.html

index 806e459..7319762 100755 (executable)
Binary files a/portal/static/img/servicedirectory/smartsantander.png and b/portal/static/img/servicedirectory/smartsantander.png differ
index 9d1306b..c00ca2f 100755 (executable)
@@ -281,19 +281,10 @@ class Agreements(object):
         path = _buildpath_(agreementid, "guaranteestatus")
         r = self.res.client.get(path, headers={'accept': 'application/json'})
 
-        print "---- JSON Response ----"
-        print r.text
-
         json_obj = r.json()
-        print "-- json_obj() --"
-        print type(json_obj)
-        print json_obj
         
         status = wsag_model.AgreementStatus.json_decode(json_obj)
 
-        print "---- STATUS ----"
-        print status
-
         return status, r
     
     def create(self, agreement):
index 1c9bd41..f141d6a 100755 (executable)
@@ -30,6 +30,11 @@ class Agreement(object):
         def testbed_formatted(self):
             return self.template_id.replace('Service', ' - ')
 
+        def time_formatted(self):
+            import dateutil.parser
+            time = dateutil.parser.parse(self.expirationtime)
+            return time.strftime('%d-%m-%Y at %H:%M:%S')
+
     class Property(object):
         def __init__(self):
             self.servicename = ""
@@ -187,7 +192,7 @@ class Violation(object):
         self.contract_uuid = ""
         self.service_scope = ""
         self.metric_name = ""
-        self.datetime = datetime.now()
+        self.datetime = datetime.utcnow()
         self.actual_value = 0
 
     def __repr__(self):
@@ -201,6 +206,11 @@ class Violation(object):
                 self.actual_value)
         )
 
+    def format_time(self):
+        # return datetime.strptime(self.datetime.datetime.utcnow,'%Y-%m-%d %H:%M:%S')
+        # return str(datetime.fromtimestamp(self.datetime))
+        return str(self.datetime)
+
 
 class Provider(object):
     def __init__(self):
index 6b350d4..1965540 100755 (executable)
@@ -92,6 +92,7 @@ class SLAView (FreeAccessView, ThemeView):
         consumer_id = None
         agreement_id = None
         enforcements = {}
+        violations = {}
 
         filter_ = None
         form = FilterForm(request.GET)
@@ -100,15 +101,21 @@ class SLAView (FreeAccessView, ThemeView):
              filter_ = _get_filter_from_form(form)
 
         consumer_id = _get_consumer_id(request)
-
+        
         agreements = _get_agreements(agreement_id, consumer_id=consumer_id, filter_=filter_)
-
+        
         for agreement in agreements:
             enf = _get_enforcement(agreement.agreement_id)
-            enforcements[agreement.agreement_id] = enf.enabled
-        
-        for key, value in enforcements.items():
-            print key + ": " + value
+            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
@@ -118,6 +125,7 @@ class SLAView (FreeAccessView, ThemeView):
         template_env['username'] = request.user
         template_env['slicename'] = slicename
         template_env['enforcements'] = enforcements
+        template_env['last_violation_list'] = violations
        
        # the prelude object in page contains a summary of the requirements() for all plugins
        # define {js,css}_{files,chunks}
@@ -224,12 +232,17 @@ def agreement_term_violations(request, agreement_id, guarantee_name):
         # If page is out of range (e.g. 9999), deliver first page.
         violation_page = paginator.page(1)
     
+    print "\n******************"
+    print violations[-1]
+    print "******************\n"
+
     context = {
         'agreement_id': agreement_id,
         'guarantee_term': agreement.guaranteeterms[guarantee_name],
         'violations': violation_page,
         'agreement': agreement,
         'slicename': slicename,
+        'last_violation': violations[-1].actual_value
     }
     
     context.update(prelude_env)
index c605b6d..f09aa8d 100755 (executable)
@@ -2,7 +2,7 @@
 <div class="col-md-2">
 </div>
 
- <div class="col-md-8">
+ <div class="col-md-9">
    <div class="row" id="agreements">
     <table class="table dataTable" id="sla_table" >
         <thead>
                  <dd>{{ a.agreement_id|default:"&nbsp;" }}</dd>
                  <dt>Provider</dt>
                  <dd>{{ a.context.provider|default:"&nbsp;" }}</dd>
-                 <dt>Consumer</dt>
+                 <dt>Experimenter</dt>
                  <dd>{{ a.context.consumer|default:"&nbsp;" }}</dd>
                  <dt>Service</dt>
                  <dd>Testbed guarantees 0.99 Uptime rate for 0.99 rate of the resources during the sliver lifetime</dd>
                  <dt>Testbed</dt>
                  <dd>{{ a.context.testbed_formatted }}</dd>
                  <dt>Accepted on:</dt>
-                 <dd>{{ a.context.expirationtime|default:"&nbsp;" }}</dd>
+                 <dd>{{ a.context.time_formatted|default:"&nbsp;" }}</dd>
                        </div>
                        <div class="modal-footer">
                                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <tr>
                        {% if a.guaranteestatus == "VIOLATED" %}
                        <td class="glyphicon glyphicon-remove-sign" style="color:red;"></td>
-               {% else %}
+               {% elif a.guaranteestatus == "FULFILLED" %}
                <td class="glyphicon glyphicon-ok-sign" style="color:green;"></td>
+          {% else %}
+          <td></td>
                {% endif %}
-               <td>{{ a.context.template_id }}</td>
-            <td>{{ a.context.expirationtime }}</td>
-            <td>
-                {% with a.agreement_id as key %}
-                {% if enforcements.key == false %}
-                  Disabled
-                {% else %}
-                  Enabled
-                {% endif %}
-                {% endwith %}
-            </td>
-            <!-- <td>{{slicename}}</td> -->
-            <td>
-                <!-- <a class="agreement-detail" href="{% url "agreement_details" a.agreement_id %}" data-toggle="modal" data-target="#agreementModal">View Agreement</a> -->
-                <!-- <a class="agreement-detail" href="#" data-agreement="{{ a.agreement_id }}">View Agreement</a> -->
-                <a class="agreement-detail" data-toggle="modal" data-target="#agreementModal{{a.agreement_id}}">View Agreement</a>
-            </td>
+                 <td>{{ a.context.template_id }}</td>
+          <td>{{ a.context.time_formatted }}</td>
+          
+          {% with a.agreement_id as key %}
+          
+          <td>
+              <!-- <a class="agreement-detail" href="{% url "agreement_details" a.agreement_id %}" data-toggle="modal" data-target="#agreementModal">View Agreement</a> -->
+              <!-- <a class="agreement-detail" href="#" data-agreement="{{ a.agreement_id }}">View Agreement</a> -->
+              <a class="agreement-detail" data-toggle="modal" data-target="#agreementModal{{a.agreement_id}}">View Agreement</a>
+          </td>
+
+          {% for k,v in enforcements.items %}
+            {% if key == k %}
+              <td>
+              {% if v == "ACTIVE" %}
+                In progress
+              {% elif v == "UNACTIVE" %}
+                Disabled
+              {% endif %}
+              </td>
+
+              {% if a.guaranteestatus == "VIOLATED" and v == "UNACTIVE" %}
+              <td style="font-weight: bold">
+                Result: 99% uptime for
+                {% for vi, value in last_violation_list.items %}
+                  {% if a.agreement_id == vi %}
+                      {{ value }}%
+                  {% endif %}
+                {% endfor %}
+                resources
+              </td>
+              {% elif a.guaranteestatus == "FULFILLED" and v == "UNACTIVE" %}
+              <td style="font-weight: bold">
+                Result: 99% uptime for
+                {% for vi, value in last_violation_list.items %}
+                  {% if a.agreement_id == vi %}
+                      {{ value }}%
+                  {% endif %}
+                {% endfor %}
+                resources
+              </td>
+              {% endif %}
+            {% endif %}
 
-            {% for tname,t in a.guaranteeterms.items %}
+          {% endfor %}
+          
+          <!-- <td>{{slicename}}</td> -->
+
+          
+
+          
+              
+
+            {% endwith %}
+            <!-- {% for tname,t in a.guaranteeterms.items %}
             <td> {{ t.servicelevelobjective.kpiname }}</td>
             <td>
                 {% if t.status == "VIOLATED" %}
 
-                  <!-- <a class="violation-detail" href="{% url "agreement_term_violations" a.agreement_id t.name %}" data-toggle="modal" data-target="#violationModal">View Violations</a>
+                  <a class="violation-detail" href="{% url "agreement_term_violations" a.agreement_id t.name %}" data-toggle="modal" data-target="#violationModal">View Violations</a>
                   <a class="violation-detail" href="#"
                                        data-agreement="{{ a.agreement_id }}" 
-                                       data-violation="{{ t.name }}">View Violations</a> -->
-                  <a class="violation-detail" href="#" data-agreement="{{ a.agreement_id }}" data-violation="{{ t.name }}">View Violations</a>
+                                       data-violation="{{ t.name }}">View Violations</a>
+                  <a class="violation-detail" href="#" data-agreement="{{ a.agreement_id }}" data-violation="{{ t.name }}">{{last_violation_list}}</a>
+                  {{ t.name }}
 
                 {% endif %}
             </td>
             <td id="status" style="display:none;">
                 {{ a.statusclass }}
             </td>
-            {% endfor %}
+            {% endfor %} -->
+
+
+            
         </tr>
         
-        {% empty %}
+        
         {% endfor %}
         </tbody>