summaryrefslogtreecommitdiff
path: root/lib/peek/views/detailed_view.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/peek/views/detailed_view.rb')
-rw-r--r--lib/peek/views/detailed_view.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/peek/views/detailed_view.rb b/lib/peek/views/detailed_view.rb
new file mode 100644
index 00000000000..f4ca1cb5075
--- /dev/null
+++ b/lib/peek/views/detailed_view.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+module Peek
+ module Views
+ class DetailedView < View
+ def results
+ {
+ duration: formatted_duration,
+ calls: calls,
+ details: details
+ }
+ end
+
+ def detail_store
+ ::Gitlab::SafeRequestStore["#{key}_call_details"] ||= []
+ end
+
+ private
+
+ def duration
+ detail_store.map { |entry| entry[:duration] }.sum # rubocop:disable CodeReuse/ActiveRecord
+ end
+
+ def calls
+ detail_store.count
+ end
+
+ def call_details
+ detail_store
+ end
+
+ def format_call_details(call)
+ call.merge(duration: (call[:duration] * 1000).round(3))
+ end
+
+ def details
+ call_details
+ .sort { |a, b| b[:duration] <=> a[:duration] }
+ .map(&method(:format_call_details))
+ end
+
+ def formatted_duration
+ ms = duration * 1000
+
+ if ms >= 1000
+ "%.2fms" % ms
+ else
+ "%.0fms" % ms
+ end
+ end
+ end
+ end
+end