summaryrefslogtreecommitdiff
path: root/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb')
-rw-r--r--spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb61
1 files changed, 61 insertions, 0 deletions
diff --git a/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb b/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb
index f200c636aac..a772b911d8a 100644
--- a/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb
+++ b/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb
@@ -175,3 +175,64 @@ describe Metrics::Dashboard::GrafanaMetricEmbedService do
end
end
end
+
+describe Metrics::Dashboard::GrafanaUidParser do
+ let_it_be(:grafana_integration) { create(:grafana_integration) }
+ let_it_be(:project) { grafana_integration.project }
+
+ subject { described_class.new(grafana_url, project).parse }
+
+ context 'with a Grafana-defined uid' do
+ let(:grafana_url) { grafana_integration.grafana_url + '/d/XDaNK6amz/?panelId=1' }
+
+ it { is_expected.to eq 'XDaNK6amz' }
+ end
+
+ context 'with a user-defined uid' do
+ let(:grafana_url) { grafana_integration.grafana_url + '/d/pgbouncer-main/pgbouncer-overview?panelId=1' }
+
+ it { is_expected.to eq 'pgbouncer-main' }
+ end
+
+ context 'when a uid is not present' do
+ let(:grafana_url) { grafana_integration.grafana_url }
+
+ it { is_expected.to be nil }
+ end
+
+ context 'when the url starts with unrelated content' do
+ let(:grafana_url) { 'js:' + grafana_integration.grafana_url }
+
+ it { is_expected.to be nil }
+ end
+end
+
+describe Metrics::Dashboard::DatasourceNameParser do
+ include GrafanaApiHelpers
+
+ let(:grafana_url) { valid_grafana_dashboard_link('https://gitlab.grafana.net') }
+ let(:grafana_dashboard) { JSON.parse(fixture_file('grafana/dashboard_response.json'), symbolize_names: true) }
+
+ subject { described_class.new(grafana_url, grafana_dashboard).parse }
+
+ it { is_expected.to eq 'GitLab Omnibus' }
+
+ context 'when the panelId is missing from the url' do
+ let(:grafana_url) { 'https:/gitlab.grafana.net/d/jbdbks/' }
+
+ it { is_expected.to be nil }
+ end
+
+ context 'when the panel is not present' do
+ # We're looking for panelId of 8, but only 6 is present
+ let(:grafana_dashboard) { { dashboard: { panels: [{ id: 6 }] } } }
+
+ it { is_expected.to be nil }
+ end
+
+ context 'when the dashboard panel does not have a datasource' do
+ let(:grafana_dashboard) { { dashboard: { panels: [{ id: 8 }] } } }
+
+ it { is_expected.to be nil }
+ end
+end