summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyasonik <syasonik@gitlab.com>2019-08-06 17:21:48 +0300
committersyasonik <syasonik@gitlab.com>2019-08-06 17:21:48 +0300
commit3ab57bf12a6c9345b19c73eb18c9a89e5ad9d71b (patch)
tree795225fba7dd722fcc3bd13d10eae51699275def
parent982b8a7041be5efd2905c81e9c9a07cfe26bfc8b (diff)
downloadgitlab-ce-3ab57bf12a6c9345b19c73eb18c9a89e5ad9d71b.tar.gz
Refactor query regex
-rw-r--r--lib/banzai/filter/inline_metrics_filter.rb6
-rw-r--r--lib/gitlab/metrics/dashboard/url.rb17
-rw-r--r--spec/lib/gitlab/metrics/dashboard/url_spec.rb7
3 files changed, 20 insertions, 10 deletions
diff --git a/lib/banzai/filter/inline_metrics_filter.rb b/lib/banzai/filter/inline_metrics_filter.rb
index 29f526d3421..e54136f776e 100644
--- a/lib/banzai/filter/inline_metrics_filter.rb
+++ b/lib/banzai/filter/inline_metrics_filter.rb
@@ -34,11 +34,7 @@ module Banzai
def query_params(params)
return {} unless params['query']
- CGI.parse(params['query'][1..-1]).map do |key, value|
- target = value.length == 1 ? value.first : value
-
- [key.to_sym, target]
- end.to_h
+ Gitlab::Metrics::Dashboard::Url.parse_query(params['query'][1..-1])
end
# Search params for selecting metrics links. A few
diff --git a/lib/gitlab/metrics/dashboard/url.rb b/lib/gitlab/metrics/dashboard/url.rb
index 83d0a1cdf49..0324135f284 100644
--- a/lib/gitlab/metrics/dashboard/url.rb
+++ b/lib/gitlab/metrics/dashboard/url.rb
@@ -21,14 +21,27 @@ module Gitlab
\/(?<environment>\d+)
\/metrics
(?<query>
- \?[%.+a-zA-Z0-9_=-]+
- (&[%.+a-zA-Z0-9_=-]+)*
+ \?[a-zA-Z0-9%.()+_=-]+
+ (&[a-zA-Z0-9%.()+_=-]+)*
)?
(?<anchor>\#[a-z0-9_-]+)?
)
}x
end
+ # Parses query params out from full string into hash.
+ # If multiple values are given for a parameter, they
+ # will be captured in an array.
+ #
+ # Ex) 'title=Title&group=Group' --> { title: 'Title', group: Group }
+ def parse_query(query_string)
+ CGI.parse(query_string).map do |key, value|
+ target = value.length == 1 ? value.first : value
+
+ [key.to_sym, target]
+ end.to_h
+ end
+
# Builds a metrics dashboard url based on the passed in arguments
def build_dashboard_url(*args)
Gitlab::Routing.url_helpers.metrics_dashboard_namespace_project_environment_url(*args)
diff --git a/spec/lib/gitlab/metrics/dashboard/url_spec.rb b/spec/lib/gitlab/metrics/dashboard/url_spec.rb
index edd11bf8023..e0dc6d98efc 100644
--- a/spec/lib/gitlab/metrics/dashboard/url_spec.rb
+++ b/spec/lib/gitlab/metrics/dashboard/url_spec.rb
@@ -13,8 +13,9 @@ describe Gitlab::Metrics::Dashboard::Url do
'foo',
'bar',
1,
- start: 123345456,
- dashboard: 'config%2Fprometheus%2Fcommon_metrics.yml',
+ start: '2019-08-02T05:43:09.000Z',
+ dashboard: 'config/prometheus/common_metrics.yml',
+ group: 'awesome group',
anchor: 'title'
)
@@ -23,7 +24,7 @@ describe Gitlab::Metrics::Dashboard::Url do
'namespace' => 'foo',
'project' => 'bar',
'environment' => '1',
- 'query' => '?dashboard=config%252Fprometheus%252Fcommon_metrics.yml&start=123345456',
+ 'query' => '?dashboard=config%2Fprometheus%2Fcommon_metrics.yml&group=awesome+group&start=2019-08-02T05%3A43%3A09.000Z',
'anchor' => '#title'
}