-
+
{{ user.bio }}
-
+
{{ user.organization }}
{{ user.location }}
```
diff --git a/lib/gitlab/metrics/requests_rack_middleware.rb b/lib/gitlab/metrics/requests_rack_middleware.rb
index 26aa0910047..46477587934 100644
--- a/lib/gitlab/metrics/requests_rack_middleware.rb
+++ b/lib/gitlab/metrics/requests_rack_middleware.rb
@@ -3,6 +3,18 @@
module Gitlab
module Metrics
class RequestsRackMiddleware
+ HTTP_METHODS = {
+ "delete" => %w(200 202 204 303 400 401 403 404 410 422 500 503),
+ "get" => %w(200 204 301 302 303 304 307 400 401 403 404 410 412 422 429 500 503),
+ "head" => %w(200 204 301 302 303 304 400 401 403 404 410 429 500 503),
+ "options" => %w(200 404),
+ "patch" => %w(200 202 204 400 403 404 409 416 422 500),
+ "post" => %w(200 201 202 204 301 302 303 304 400 401 403 404 406 409 410 412 413 415 422 429 500 503),
+ "propfind" => %w(404),
+ "put" => %w(200 202 204 400 401 403 404 405 406 409 410 415 422 500),
+ "report" => %w(404)
+ }.freeze
+
def initialize(app)
@app = app
end
@@ -20,6 +32,14 @@ module Gitlab
{}, [0.05, 0.1, 0.25, 0.5, 0.7, 1, 2.5, 5, 10, 25])
end
+ def self.initialize_http_request_duration_seconds
+ HTTP_METHODS.each do |method, statuses|
+ statuses.each do |status|
+ http_request_duration_seconds.get({ method: method, status: status })
+ end
+ end
+ end
+
def call(env)
method = env['REQUEST_METHOD'].downcase
started = Time.now.to_f
diff --git a/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb b/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb
index 44c5e0b4196..819739ac535 100644
--- a/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb
+++ b/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb
@@ -3,11 +3,8 @@
module QA
context 'Manage with IP rate limits', :requires_admin do
describe 'Users API' do
- before(:context) do
- @api_client = Runtime::API::Client.new(:gitlab, ip_limits: true)
- end
-
- let(:request) { Runtime::API::Request.new(@api_client, '/users') }
+ let(:api_client) { Runtime::API::Client.new(:gitlab, ip_limits: true) }
+ let(:request) { Runtime::API::Request.new(api_client, '/users') }
it 'GET /users' do
5.times do
diff --git a/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb b/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb
index ce8425cb3d1..ac5db53ad40 100644
--- a/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb
+++ b/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb
@@ -8,7 +8,7 @@ module QA
describe 'Compare archives of different user projects with the same name and check they\'re different' do
include Support::Api
- before(:all) do
+ before do
@project_name = "project-archive-download-#{SecureRandom.hex(8)}"
@archive_types = %w(tar.gz tar.bz2 tar zip)
@users = {
diff --git a/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap b/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap
index 11d65ced180..b29d093130a 100644
--- a/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap
+++ b/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap
@@ -11,7 +11,6 @@ exports[`JumpToNextDiscussionButton matches the snapshot 1`] = `
title=""
>
diff --git a/spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap b/spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap
index fd1cfdb1b04..1f93336e755 100644
--- a/spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap
+++ b/spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap
@@ -14,7 +14,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
>
@@ -40,7 +39,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
@@ -68,7 +66,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
>
@@ -104,7 +101,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
@@ -132,7 +128,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
>
@@ -158,7 +153,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
@@ -186,7 +180,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
>
@@ -222,7 +215,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
diff --git a/spec/frontend/sidebar/__snapshots__/todo_spec.js.snap b/spec/frontend/sidebar/__snapshots__/todo_spec.js.snap
index e680c917611..abcdf600a67 100644
--- a/spec/frontend/sidebar/__snapshots__/todo_spec.js.snap
+++ b/spec/frontend/sidebar/__snapshots__/todo_spec.js.snap
@@ -14,7 +14,7 @@ exports[`SidebarTodo template renders component container element with proper da
type="button"
>
{
({ isTodo, iconClass, label, icon }) => {
createComponent({ isTodo });
- expect(wrapper.find(Icon).props('cssClasses')).toStrictEqual(iconClass);
+ expect(
+ wrapper
+ .find(Icon)
+ .classes()
+ .join(' '),
+ ).toStrictEqual(iconClass);
expect(wrapper.find(Icon).props('name')).toStrictEqual(icon);
expect(wrapper.find('button').text()).toBe(label);
},
diff --git a/spec/frontend/vue_shared/components/changed_file_icon_spec.js b/spec/frontend/vue_shared/components/changed_file_icon_spec.js
index d0586f9e63f..d5861b18318 100644
--- a/spec/frontend/vue_shared/components/changed_file_icon_spec.js
+++ b/spec/frontend/vue_shared/components/changed_file_icon_spec.js
@@ -28,10 +28,7 @@ describe('Changed file icon', () => {
const findIcon = () => wrapper.find(Icon);
const findIconName = () => findIcon().props('name');
- const findIconClasses = () =>
- findIcon()
- .props('cssClasses')
- .split(' ');
+ const findIconClasses = () => findIcon().classes();
const findTooltipText = () => wrapper.attributes('data-original-title');
it('with isCentered true, adds center class', () => {
diff --git a/spec/frontend/vue_shared/components/file_icon_spec.js b/spec/frontend/vue_shared/components/file_icon_spec.js
index 328eec0a80a..f8f68a6a77a 100644
--- a/spec/frontend/vue_shared/components/file_icon_spec.js
+++ b/spec/frontend/vue_shared/components/file_icon_spec.js
@@ -49,7 +49,7 @@ describe('File Icon component', () => {
});
expect(findIcon().exists()).toBe(false);
- expect(wrapper.find(Icon).props('cssClasses')).toContain('folder-icon');
+ expect(wrapper.find(Icon).classes()).toContain('folder-icon');
});
it('should render a loading icon', () => {
diff --git a/spec/javascripts/vue_shared/components/icon_spec.js b/spec/javascripts/vue_shared/components/icon_spec.js
index 45eef2ad737..7390798afa8 100644
--- a/spec/javascripts/vue_shared/components/icon_spec.js
+++ b/spec/javascripts/vue_shared/components/icon_spec.js
@@ -12,8 +12,6 @@ describe('Sprite Icon Component', function() {
icon = mountComponent(IconComponent, {
name: 'commit',
size: 32,
- cssClasses: 'extraclasses',
- tabIndex: '0',
});
});
@@ -47,10 +45,8 @@ describe('Sprite Icon Component', function() {
it('should properly render img css', function() {
const { classList } = icon.$el;
const containsSizeClass = classList.contains('s32');
- const containsCustomClass = classList.contains('extraclasses');
expect(containsSizeClass).toBe(true);
- expect(containsCustomClass).toBe(true);
});
it('`name` validator should return false for non existing icons', () => {
@@ -60,9 +56,5 @@ describe('Sprite Icon Component', function() {
it('`name` validator should return false for existing icons', () => {
expect(Icon.props.name.validator('commit')).toBe(true);
});
-
- it('should contain `tabindex` attribute on svg element when `tabIndex` prop is defined', () => {
- expect(icon.$el.getAttribute('tabindex')).toBe('0');
- });
});
});
diff --git a/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb b/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
index c29db3a93ec..66ea390a2bf 100644
--- a/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
+++ b/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
@@ -63,5 +63,19 @@ describe Gitlab::Metrics::RequestsRackMiddleware do
expect { subject.call(env) }.to raise_error(StandardError)
end
end
+
+ describe '.initialize_http_request_duration_seconds' do
+ it "sets labels" do
+ expected_labels = []
+ described_class::HTTP_METHODS.each do |method, statuses|
+ statuses.each do |status|
+ expected_labels << { method: method, status: status }
+ end
+ end
+
+ described_class.initialize_http_request_duration_seconds
+ expect(described_class.http_request_duration_seconds.values.keys).to include(*expected_labels)
+ end
+ end
end
end