summaryrefslogtreecommitdiff
path: root/lib/peek/views/rugged.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/peek/views/rugged.rb')
-rw-r--r--lib/peek/views/rugged.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/peek/views/rugged.rb b/lib/peek/views/rugged.rb
new file mode 100644
index 00000000000..18b3f422852
--- /dev/null
+++ b/lib/peek/views/rugged.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+module Peek
+ module Views
+ class Rugged < DetailedView
+ def results
+ return {} unless calls > 0
+
+ super
+ end
+
+ private
+
+ def duration
+ ::Gitlab::RuggedInstrumentation.query_time
+ end
+
+ def calls
+ ::Gitlab::RuggedInstrumentation.query_count
+ end
+
+ def call_details
+ ::Gitlab::RuggedInstrumentation.list_call_details
+ end
+
+ def format_call_details(call)
+ super.merge(args: format_args(call[:args]))
+ end
+
+ def format_args(args)
+ args.map do |arg|
+ # ActiveSupport::JSON recursively calls as_json on all
+ # instance variables, and if that instance variable points to
+ # something that refers back to the same instance, we can wind
+ # up in an infinite loop. Currently this only seems to happen with
+ # Gitlab::Git::Repository and ::Repository.
+ if arg.instance_variables.present?
+ arg.to_s
+ else
+ arg
+ end
+ end
+ end
+ end
+ end
+end