summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Bernloehr <Heiko.Bernloehr@FreeIT.de>2020-02-19 18:14:54 +0100
committerHeiko Bernlöhr <Heiko.Bernloehr@FreeIT.de>2020-06-10 19:00:31 +0200
commit03902471f6931a9e09c9f67d5a0339eeec1d6786 (patch)
tree6ba929827f1e11efef3efb6a48dc3b353b4f8d21
parent55a59acde87f0f278f88f6fb235052fd62c77496 (diff)
downloadecs-03902471f6931a9e09c9f67d5a0339eeec1d6786.tar.gz
ecs-03902471f6931a9e09c9f67d5a0339eeec1d6786.zip
Rework of Limit participants view of receiver-/sender messages and events.
The old implementation consumes too much memory because of reading all messages into an array.
-rw-r--r--app/views/admin/participants/show.html.haml120
1 files changed, 78 insertions, 42 deletions
diff --git a/app/views/admin/participants/show.html.haml b/app/views/admin/participants/show.html.haml
index 1be8b40..d2f8255 100644
--- a/app/views/admin/participants/show.html.haml
+++ b/app/views/admin/participants/show.html.haml
@@ -97,99 +97,135 @@
|
= link_to 'Back', admin_participants_path
+
- eventsm = 10
-- events = Event.for_participant(@participant,-1).uniq
-- eventsl=events.length
-- if eventsl>eventsm then events = events[0,eventsm/2] + events[-(eventsm/2),eventsm/2] end
-- unless events.blank?
+- events_count = Event.for_participant(@participant,-1).uniq.count
+- if events_count < eventsm or events_count < 5
+ - events_first = Event.for_participant(@participant,-1).uniq
+-else
+ - events_first = Event.for_participant(@participant,-1).uniq.uniq.limit(eventsm/2)
+ - events_last = Event.for_participant(@participant,-1).uniq.limit(eventsm/2).offset(events_count-(eventsm/2))
+ - events_diff = events_last - events_first
+- unless events_first.blank?
%p
.show-output-width.table-border
.table-header
- - if eventsl>eventsm then
- %label.table-resource-label Unprocessed Events (total number: #{eventsl}):
+ - if events_count > 0 then
+ %label.table-resource-label Unprocessed Events (total number: #{events_count}):
- else
%label.table-resource-label Unprocessed Events:
-
+
%table.list(width="100%")
%tr(align="left")
%th Id:
%th Message-Id:
%th Event-Type:
%th Date:
- - events.each_with_index do |event,number|
- - if eventsl>eventsm and number==(eventsm/2) then
- %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
- %td= "..."
- %td= "..."
- %td= "..."
- %td= "..."
+ - events_first.each do |event|
%tr{:class => [cycle('list-line-odd', 'list-line-even')]}
%td= event.id
%td= event.message.id
%td= event.ev_type.name
%td= event.updated_at
+ - unless events_diff.blank?
+ - if events_count > 2*(eventsm/2)
+ %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
+ %td= "..."
+ %td= "..."
+ %td= "..."
+ %td= "..."
+ - events_last.each do |event|
+ %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
+ %td= event.id
+ %td= event.message.id
+ %td= event.ev_type.name
+ %td= event.updated_at
+
- msgsm = 10
-- messages = Message.for_participant_receiver(@participant).for_not_removed.uniq
-- msgsl = messages.length
-- if msgsl>msgsm then messages = messages[0,msgsm/2] + messages[-(msgsm/2),msgsm/2] end
-- unless messages.blank?
+- messages_count = Message.for_participant_receiver(@participant).for_not_removed.uniq.count
+- if messages_count < msgsm or messages_count < 5
+ - messages_first = Message.for_participant_receiver(@participant).for_not_removed.uniq
+-else
+ - messages_first = Message.for_participant_receiver(@participant).for_not_removed.uniq.limit(msgsm/2)
+ - messages_last = Message.for_participant_receiver(@participant).for_not_removed.uniq.limit(msgsm/2).offset(messages_count-(msgsm/2))
+ - messages_diff = messages_last - messages_first
+- unless messages_first.blank?
%p
.show-output-width.table-border
.table-header
- - if msgsl>msgsm then
- %label.table-resource-label Received Messages (total number: #{msgsl}):
+ - if messages_count > 0 then
+ %label.table-resource-label Received Messages (total number: #{messages_count}):
- else
%label.table-resource-label Received Messages:
-
+
%table.list(width="100%")
%tr(align="left")
%th Id:
%th Resource:
%th Content-Type:
%th Date:
- - messages.each_with_index do |msg,number|
- - if msgsl>msgsm and number==(msgsm/2) then
- %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
- %td= "..."
- %td= "..."
- %td= "..."
- %td= "..."
+ - messages_first.each do |msg|
%tr{:class => [cycle('list-line-odd', 'list-line-even')]}
%td= msg.id
%td= msg.ressource.namespace+'/'+msg.ressource.ressource
%td= msg.content_type
%td= msg.created_at
+ - unless messages_diff.blank?
+ - if messages_count > 2*(msgsm/2)
+ %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
+ %td= "..."
+ %td= "..."
+ %td= "..."
+ %td= "..."
+ - messages_last.each do |msg|
+ %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
+ %td= msg.id
+ %td= msg.ressource.namespace+'/'+msg.ressource.ressource
+ %td= msg.content_type
+ %td= msg.created_at
+
- msgsm = 10
-- messages = Message.for_participant_sender(@participant).for_not_removed.uniq
-- msgsl = messages.length
-- if msgsl>msgsm then messages = messages[0,msgsm/2] + messages[-(msgsm/2),msgsm/2] end
-- unless messages.blank?
+- messages_count = Message.for_participant_sender(@participant).for_not_removed.uniq.count
+- if messages_count < msgsm or messages_count < 5
+ - messages_first = Message.for_participant_sender(@participant).for_not_removed.uniq
+-else
+ - messages_first = Message.for_participant_sender(@participant).for_not_removed.uniq.limit(msgsm/2)
+ - messages_last = Message.for_participant_sender(@participant).for_not_removed.uniq.limit(msgsm/2).offset(messages_count-(msgsm/2))
+ - messages_diff = messages_last - messages_first
+- unless messages_first.blank?
%p
.show-output-width.table-border
.table-header
- - if msgsl>msgsm then
- %label.table-resource-label Sent Messages (total number: #{msgsl}):
+ - if messages_count > 0 then
+ %label.table-resource-label Sent Messages (total number: #{messages_count}):
- else
%label.table-resource-label Sent Messages:
-
+
%table.list(width="100%")
%tr(align="left")
%th Id:
%th Resource:
%th Content-Type:
%th Date:
- - messages.each_with_index do |msg,number|
- - if msgsl>msgsm and number==(msgsm/2) then
- %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
- %td= "..."
- %td= "..."
- %td= "..."
- %td= "..."
+ - messages_first.each do |msg|
%tr{:class => [cycle('list-line-odd', 'list-line-even')]}
%td= msg.id
%td= msg.ressource.namespace+'/'+msg.ressource.ressource
%td= msg.content_type
%td= msg.created_at
+ - unless messages_diff.blank?
+ - if messages_count > 2*(msgsm/2)
+ %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
+ %td= "..."
+ %td= "..."
+ %td= "..."
+ %td= "..."
+ - messages_last.each do |msg|
+ %tr{:class => [cycle('list-line-odd', 'list-line-even')]}
+ %td= msg.id
+ %td= msg.ressource.namespace+'/'+msg.ressource.ressource
+ %td= msg.content_type
+ %td= msg.created_at