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.
This commit is contained in:
parent
c48f29c159
commit
48bcd5248f
|
@ -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"
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
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
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Peek
|
||||
module Views
|
||||
class Tracing < View
|
||||
def results
|
||||
{
|
||||
tracing_url: Gitlab::Tracing.tracing_url
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,66 @@
|
|||
# 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
|
Loading…
Reference in New Issue