From c290cae3e6704c3ee43a748d21c2b142c67602d2 Mon Sep 17 00:00:00 2001
From: Kálmán Viktor <kviktor@cloud.bme.hu>
Date: Wed, 18 Jun 2014 14:26:36 +0200
Subject: [PATCH] dashboard: merge same activites

---
 circle/dashboard/templates/dashboard/vm-detail/_activity-timeline.html |  1 +
 circle/dashboard/views.py                                              |  5 +++--
 circle/vm/models/instance.py                                           | 17 +++++++++++++++++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/circle/dashboard/templates/dashboard/vm-detail/_activity-timeline.html b/circle/dashboard/templates/dashboard/vm-detail/_activity-timeline.html
index 06593f8..82f1345 100644
--- a/circle/dashboard/templates/dashboard/vm-detail/_activity-timeline.html
+++ b/circle/dashboard/templates/dashboard/vm-detail/_activity-timeline.html
@@ -6,6 +6,7 @@
 </span> 
 <strong{% if user.is_superuser and a.result %} title="{{ a.result }}"{% endif %}>
   {% if user.is_superuser %}<a href="{{ a.get_absolute_url }}">{% endif %}
+    {% if a.times > 1 %}({{ a.times }}x){% endif %}
     {{ a.get_readable_name }}{% if user.is_superuser %}</a>{% endif %}
 </strong>
 {{ a.started|date:"Y-m-d H:i" }}{% if a.user %}, 
diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py
index 7b269d7..dde36c5 100644
--- a/circle/dashboard/views.py
+++ b/circle/dashboard/views.py
@@ -270,7 +270,8 @@ class VmDetailView(CheckedDetailView):
         })
 
         # activity data
-        context['activities'] = self.object.get_activities(self.request.user)
+        context['activities'] = self.object.get_merged_activities(
+            self.request.user)
 
         context['vlans'] = Vlan.get_objects_with_level(
             'user', self.request.user
@@ -2103,7 +2104,7 @@ def vm_activity(request, pk):
     if only_status == "false":  # instance activity
         context = {
             'instance': instance,
-            'activities': instance.get_activities(request.user),
+            'activities': instance.get_merged_activities(request.user),
             'ops': get_operations(instance, request.user),
         }
 
diff --git a/circle/vm/models/instance.py b/circle/vm/models/instance.py
index 6ff8da1..9a04226 100644
--- a/circle/vm/models/instance.py
+++ b/circle/vm/models/instance.py
@@ -927,6 +927,23 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel, OperatedMixin,
                                                   user=user)
         return acts
 
+    def get_merged_activities(self, user=None):
+        acts = list(self.get_activities(user))
+        merged_acts = []
+        latest = None
+
+        for a in acts:
+            if (latest == a.activity_code and
+                    merged_acts[-1].result == a.result and
+                    (merged_acts[-1].finished - a.finished).days < 7):
+                merged_acts[-1].times += 1
+            else:
+                merged_acts.append(a)
+                merged_acts[-1].times = 1
+            latest = a.activity_code
+
+        return merged_acts
+
     def get_screenshot(self, timeout=5):
         queue_name = self.get_remote_queue_name('vm')
         return vm_tasks.screenshot.apply_async(args=[self.vm_name],
--
libgit2 0.26.0