Commit 48bcd524 authored by Andrew Newdigate's avatar Andrew Newdigate

Provide a performance bar link to the Jaeger UI

Jaeger is a distributed tracing tool. This change adds a "Tracing" link
to the performance bar to directly link to a current request in Jaeger.

This is useful for two reasons: 1 - it provides affordance to developers
that the distributed tracing tool is available, so that it can quickly
be discovered. 2 - it allows developers to quickly find a specific trace
without having to manually navigate to a second user-interface.
parent c48f29c1
......@@ -134,6 +134,13 @@ export default {
>ms / <span title="Invoke Count">{{ currentRequest.details.gc.invokes }}</span> gc
</span>
</div>
<div
v-if="currentRequest.details && currentRequest.details.tracing"
id="peek-view-trace"
class="view"
>
<a :href="currentRequest.details.tracing.tracing_url"> trace </a>
</div>
<request-selector
v-if="currentRequest"
:current-request="currentRequest"
......
---
title: Provide a performance bar link to the Jaeger UI
merge_request: 24902
author:
type: other
......@@ -19,6 +19,7 @@ Peek.into Peek::Views::Gitaly
Peek.into Peek::Views::Rblineprof
Peek.into Peek::Views::Redis
Peek.into Peek::Views::GC
Peek.into Peek::Views::Tracing if Gitlab::Tracing.tracing_url_enabled?
# rubocop:disable Naming/ClassAndModuleCamelCase
class PEEK_DB_CLIENT
......
......@@ -13,5 +13,24 @@ module Gitlab
def self.connection_string
ENV['GITLAB_TRACING']
end
def self.tracing_url_template
ENV['GITLAB_TRACING_URL']
end
def self.tracing_url_enabled?
enabled? && tracing_url_template.present?
end
# This will provide a link into the distributed tracing for the current trace,
# if it has been captured.
def self.tracing_url
return unless tracing_url_enabled?
tracing_url_template % {
correlation_id: Gitlab::CorrelationId.current_id.to_s,
service: Gitlab.process_name
}
end
end
end
# frozen_string_literal: true
module Peek
module Views
class Tracing < View
def results
{
tracing_url: Gitlab::Tracing.tracing_url
}
end
end
end
end
# frozen_string_literal: true
require 'fast_spec_helper'
require 'rspec-parameterized'
describe Gitlab::Tracing do
using RSpec::Parameterized::TableSyntax
describe '.enabled?' do
where(:connection_string, :enabled_state) do
nil | false
"" | false
"opentracing://jaeger" | true
end
with_them do
it 'should return the correct state for .enabled?' do
expect(described_class).to receive(:connection_string).and_return(connection_string)
expect(described_class.enabled?).to eq(enabled_state)
end
end
end
describe '.tracing_url_enabled?' do
where(:enabled?, :tracing_url_template, :tracing_url_enabled_state) do
false | nil | false
false | "" | false
false | "http://localhost" | false
true | nil | false
true | "" | false
true | "http://localhost" | true
end
with_them do
it 'should return the correct state for .tracing_url_enabled?' do
expect(described_class).to receive(:enabled?).and_return(enabled?)
allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)
expect(described_class.tracing_url_enabled?).to eq(tracing_url_enabled_state)
end
end
end
describe '.tracing_url' do
where(:tracing_url_enabled?, :tracing_url_template, :correlation_id, :process_name, :tracing_url) do
false | "https://localhost" | "123" | "web" | nil
true | "https://localhost" | "123" | "web" | "https://localhost"
true | "https://localhost?service=%{service}" | "123" | "web" | "https://localhost?service=web"
true | "https://localhost?c=%{correlation_id}" | "123" | "web" | "https://localhost?c=123"
true | "https://localhost?c=%{correlation_id}&s=%{service}" | "123" | "web" | "https://localhost?c=123&s=web"
true | "https://localhost?c=%{correlation_id}" | nil | "web" | "https://localhost?c="
end
with_them do
it 'should return the correct state for .tracing_url' do
expect(described_class).to receive(:tracing_url_enabled?).and_return(tracing_url_enabled?)
allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)
allow(Gitlab::CorrelationId).to receive(:current_id).and_return(correlation_id)
allow(Gitlab).to receive(:process_name).and_return(process_name)
expect(described_class.tracing_url).to eq(tracing_url)
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment