From 274e9d0fd5b51eb18e330d1b95b2b2ac437c2b63 Mon Sep 17 00:00:00 2001
From: Andrew Newdigate <andrew@gitlab.com>
Date: Fri, 23 Aug 2019 10:10:35 +0000
Subject: [PATCH] Add cache tracing and Redis tracing

This change adds Distributed Tracing support for two new types of events

1. Redis Calls
1. ActiveSupport (Rails) Caching Operations

The intention is to help application developers and infrastructure
SREs to understand the pressure that caching operations can have on
the application when running at scale.

The Redis and Caching spans can be viewed in the Jaeger UI by clicking
the "Trace" link in the performance bar when running on GDK.
---
 Gemfile                                        | 2 +-
 Gemfile.lock                                   | 7 ++++---
 changelogs/unreleased/labkit-cache-tracing.yml | 5 +++++
 config/initializers/tracing.rb                 | 4 ++++
 4 files changed, 14 insertions(+), 4 deletions(-)
 create mode 100644 changelogs/unreleased/labkit-cache-tracing.yml

diff --git a/Gemfile b/Gemfile
index 31fdbf376e280..112bce4a6f4f8 100644
--- a/Gemfile
+++ b/Gemfile
@@ -295,7 +295,7 @@ gem 'sentry-raven', '~> 2.9'
 gem 'premailer-rails', '~> 1.9.7'
 
 # LabKit: Tracing and Correlation
-gem 'gitlab-labkit', '~> 0.4.2'
+gem 'gitlab-labkit', '~> 0.5'
 
 # I18n
 gem 'ruby_parser', '~> 3.8', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index d8873a6288958..a1f195c65bce2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -335,12 +335,13 @@ GEM
     gitaly (1.58.0)
       grpc (~> 1.0)
     github-markup (1.7.0)
-    gitlab-labkit (0.4.2)
+    gitlab-labkit (0.5.2)
       actionpack (~> 5)
       activesupport (~> 5)
       grpc (~> 1.19)
       jaeger-client (~> 0.10)
       opentracing (~> 0.4)
+      redis (> 3.0.0, < 5.0.0)
     gitlab-license (1.0.0)
     gitlab-markup (1.7.0)
     gitlab-sidekiq-fetcher (0.5.1)
@@ -742,7 +743,7 @@ GEM
     rails-dom-testing (2.0.3)
       activesupport (>= 4.2.0)
       nokogiri (>= 1.6)
-    rails-html-sanitizer (1.0.4)
+    rails-html-sanitizer (1.2.0)
       loofah (~> 2.2, >= 2.2.2)
     rails-i18n (5.1.1)
       i18n (>= 0.7, < 2)
@@ -1135,7 +1136,7 @@ DEPENDENCIES
   gettext_i18n_rails_js (~> 1.3)
   gitaly (~> 1.58.0)
   github-markup (~> 1.7.0)
-  gitlab-labkit (~> 0.4.2)
+  gitlab-labkit (~> 0.5)
   gitlab-license (~> 1.0)
   gitlab-markup (~> 1.7.0)
   gitlab-sidekiq-fetcher (= 0.5.1)
diff --git a/changelogs/unreleased/labkit-cache-tracing.yml b/changelogs/unreleased/labkit-cache-tracing.yml
new file mode 100644
index 0000000000000..7e58e1b88dd49
--- /dev/null
+++ b/changelogs/unreleased/labkit-cache-tracing.yml
@@ -0,0 +1,5 @@
+---
+title: Add Redis interceptor tracing
+merge_request: 30238
+author:
+type: other
diff --git a/config/initializers/tracing.rb b/config/initializers/tracing.rb
index 3c8779f238f37..5b55a06692e21 100644
--- a/config/initializers/tracing.rb
+++ b/config/initializers/tracing.rb
@@ -21,9 +21,13 @@
     end
   end
 
+  # Instrument Redis
+  Labkit::Tracing::Redis.instrument
+
   # Instrument Rails
   Labkit::Tracing::Rails::ActiveRecordSubscriber.instrument
   Labkit::Tracing::Rails::ActionViewSubscriber.instrument
+  Labkit::Tracing::Rails::ActiveSupportSubscriber.instrument
 
   # In multi-processed clustered architectures (puma, unicorn) don't
   # start tracing until the worker processes are spawned. This works
-- 
GitLab