Module: Gitlab::Observability
Constant Summary collapse
- ACTION_TO_PERMISSION =
{ explore: :read_observability, datasources: :admin_observability, manage: :admin_observability, dashboards: :read_observability }.freeze
- EMBEDDABLE_PATHS =
%w[explore goto].freeze
Instance Method Summary collapse
-
#allowed?(user, group, permission = :admin_observability) ⇒ Boolean
Returns true if the user has the specified permission within the group.
-
#allowed_for_action?(user, group, action) ⇒ Boolean
Returns true if the user is allowed to perform an action within a group.
-
#build_full_url(group, unsanitized_observability_path, fallback_path) ⇒ Object
Builds the full Observability URL given a certan group and path.
-
#embeddable_url(url) ⇒ Object
Returns the embeddable Observability URL of a given URL.
- #enabled?(group = nil) ⇒ Boolean deprecated Deprecated.
- #oauth_url ⇒ Object
-
#observability_url ⇒ Object
Returns the GitLab Observability URL.
- #provisioning_url(project) ⇒ Object
Instance Method Details
#allowed?(user, group, permission = :admin_observability) ⇒ Boolean
Returns true if the user has the specified permission within the group
80 81 82 83 84 |
# File 'lib/gitlab/observability.rb', line 80 def allowed?(user, group, = :admin_observability) return false unless group && user observability_url.present? && Ability.allowed?(user, , group) end |
#allowed_for_action?(user, group, action) ⇒ Boolean
Returns true if the user is allowed to perform an action within a group
72 73 74 75 76 77 |
# File 'lib/gitlab/observability.rb', line 72 def allowed_for_action?(user, group, action) return false if action.nil? = ACTION_TO_PERMISSION.fetch(action.to_sym, :admin_observability) allowed?(user, group, ) end |
#build_full_url(group, unsanitized_observability_path, fallback_path) ⇒ Object
Builds the full Observability URL given a certan group and path
If unsanitized_observability_path is not valid or missing, fallbacks to fallback_path
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/gitlab/observability.rb', line 90 def build_full_url(group, unsanitized_observability_path, fallback_path) return unless group # When running Observability UI in standalone mode (i.e. not backed by Observability Backend) # the group-id is not required. !!This is only used for local dev!! base_url = ENV['STANDALONE_OBSERVABILITY_UI'] == 'true' ? observability_url : "#{observability_url}/-/#{group.id}" sanitized_path = if unsanitized_observability_path && sanitize(unsanitized_observability_path) != '' CGI.unescapeHTML(sanitize(unsanitized_observability_path)) else fallback_path || '/' end sanitized_path.prepend('/') if sanitized_path[0] != '/' "#{base_url}#{sanitized_path}" end |
#embeddable_url(url) ⇒ Object
Returns the embeddable Observability URL of a given URL
- Validates the URL
- Checks that the path is embeddable
- Converts the gitlab.com URL to observe.gitlab.com URL
e.g.
from: gitlab.com/groups/GROUP_PATH/-/observability/explore?observability_path=/explore
to observe.gitlab.com/-/GROUP_ID/explore
Returns nil if the URL is not a valid Observability URL or the path is not embeddable
57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/gitlab/observability.rb', line 57 def (url) uri = validate_url(url, Gitlab.config.gitlab.url) return unless uri group = group_from_observability_url(url) return unless group parsed_query = CGI.parse(uri.query.to_s).transform_values(&:first).symbolize_keys observability_path = parsed_query[:observability_path] return build_full_url(group, observability_path, '/') if (observability_path) end |
#enabled?(group = nil) ⇒ Boolean
Returns true if the GitLab Observability UI (GOUI) feature flag is enabled
38 39 40 41 42 |
# File 'lib/gitlab/observability.rb', line 38 def enabled?(group = nil) return Feature.enabled?(:observability_group_tab, group) if group Feature.enabled?(:observability_group_tab) end |
#oauth_url ⇒ Object
26 27 28 |
# File 'lib/gitlab/observability.rb', line 26 def oauth_url "#{Gitlab::Observability.observability_url}/v1/auth/start" end |
#observability_url ⇒ Object
Returns the GitLab Observability URL
18 19 20 21 22 23 24 |
# File 'lib/gitlab/observability.rb', line 18 def observability_url return ENV['OVERRIDE_OBSERVABILITY_URL'] if ENV['OVERRIDE_OBSERVABILITY_URL'] # TODO Make observability URL configurable https://gitlab.com/gitlab-org/opstrace/opstrace-ui/-/issues/80 return 'https://observe.staging.gitlab.com' if Gitlab.staging? 'https://observe.gitlab.com' end |
#provisioning_url(project) ⇒ Object
30 31 32 |
# File 'lib/gitlab/observability.rb', line 30 def provisioning_url(project) "#{Gitlab::Observability.observability_url}/v3/tenant/#{project.id}" end |