From d6c434108cb6e8eca37e4a132004282634004283 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 30 Dec 2021 15:10:24 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- app/models/packages/package.rb | 2 +- .../error_tracking/collect_error_service.rb | 21 ++++++++++++++++--- app/views/profiles/chat_names/index.html.haml | 3 ++- ...te_project_namespace_on_project_create.yml | 2 +- locale/gitlab.pot | 3 +++ .../packages/go/package_finder_spec.rb | 2 +- .../packages/maven/package_finder_spec.rb | 2 +- .../packages/npm/package_finder_spec.rb | 2 +- .../packages/nuget/package_finder_spec.rb | 2 +- .../go_two_exception_event.json | 1 + spec/models/packages/package_spec.rb | 9 ++++++-- spec/requests/api/generic_packages_spec.rb | 21 +++++++++++++++++++ .../collect_error_service_spec.rb | 19 +++++++++++++++++ 13 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 spec/fixtures/error_tracking/go_two_exception_event.json diff --git a/app/models/packages/package.rb b/app/models/packages/package.rb index 962a1057a22..ba6196cfc8d 100644 --- a/app/models/packages/package.rb +++ b/app/models/packages/package.rb @@ -7,7 +7,7 @@ class Packages::Package < ApplicationRecord include Gitlab::Utils::StrongMemoize DISPLAYABLE_STATUSES = [:default, :error].freeze - INSTALLABLE_STATUSES = [:default].freeze + INSTALLABLE_STATUSES = [:default, :hidden].freeze enum package_type: { maven: 1, diff --git a/app/services/error_tracking/collect_error_service.rb b/app/services/error_tracking/collect_error_service.rb index 304e3898ee5..50508c9810a 100644 --- a/app/services/error_tracking/collect_error_service.rb +++ b/app/services/error_tracking/collect_error_service.rb @@ -2,6 +2,8 @@ module ErrorTracking class CollectErrorService < ::BaseService + include Gitlab::Utils::StrongMemoize + def execute # Error is a way to group events based on common data like name or cause # of exception. We need to keep a sane balance here between taking too little @@ -43,16 +45,29 @@ module ErrorTracking end def exception - event['exception']['values'].first + strong_memoize(:exception) do + # Find the first exception that has a stacktrace since the first + # exception may not provide adequate context (e.g. in the Go SDK). + entries = event['exception']['values'] + entries.find { |x| x.key?('stacktrace') } || entries.first + end + end + + def stacktrace_frames + strong_memoize(:stacktrace_frames) do + exception.dig('stacktrace', 'frames') + end end def actor return event['transaction'] if event['transaction'] - # Some SDK do not have transaction attribute. + # Some SDKs do not have a transaction attribute. # So we build it by combining function name and module name from # the last item in stacktrace. - last_line = exception.dig('stacktrace', 'frames').last + return unless stacktrace_frames.present? + + last_line = stacktrace_frames.last "#{last_line['function']}(#{last_line['module']})" end diff --git a/app/views/profiles/chat_names/index.html.haml b/app/views/profiles/chat_names/index.html.haml index 782850afcda..54c34228800 100644 --- a/app/views/profiles/chat_names/index.html.haml +++ b/app/views/profiles/chat_names/index.html.haml @@ -9,7 +9,8 @@ = _('You can see your chat accounts.') .col-lg-8 - %h5.gl-mt-0 Active chat names (#{@chat_names.size}) + %h5.gl-mt-0 + = sprintf(_('Active chat names (%{count})'), { count: @chat_names.size }) - if @chat_names.present? .table-responsive diff --git a/config/feature_flags/development/create_project_namespace_on_project_create.yml b/config/feature_flags/development/create_project_namespace_on_project_create.yml index 3fbf929ca2e..0d6ea8b2784 100644 --- a/config/feature_flags/development/create_project_namespace_on_project_create.yml +++ b/config/feature_flags/development/create_project_namespace_on_project_create.yml @@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/344954 milestone: '14.5' type: development group: group::workspace -default_enabled: false +default_enabled: true diff --git a/locale/gitlab.pot b/locale/gitlab.pot index eb592509a9d..513b76477d1 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -1952,6 +1952,9 @@ msgstr "" msgid "Active Sessions" msgstr "" +msgid "Active chat names (%{count})" +msgstr "" + msgid "Activity" msgstr "" diff --git a/spec/finders/packages/go/package_finder_spec.rb b/spec/finders/packages/go/package_finder_spec.rb index dbcb8255d47..b928336f958 100644 --- a/spec/finders/packages/go/package_finder_spec.rb +++ b/spec/finders/packages/go/package_finder_spec.rb @@ -59,7 +59,7 @@ RSpec.describe Packages::Go::PackageFinder do let(:version_name) { version.name } before do - package.update_column(:status, 1) + package.update_column(:status, :error) end it { is_expected.to eq(nil) } diff --git a/spec/finders/packages/maven/package_finder_spec.rb b/spec/finders/packages/maven/package_finder_spec.rb index 38fc3b7cce4..8b45dbdad51 100644 --- a/spec/finders/packages/maven/package_finder_spec.rb +++ b/spec/finders/packages/maven/package_finder_spec.rb @@ -39,7 +39,7 @@ RSpec.describe ::Packages::Maven::PackageFinder do let(:param_path) { package.maven_metadatum.path } before do - package.update_column(:status, 1) + package.update_column(:status, :error) end it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } diff --git a/spec/finders/packages/npm/package_finder_spec.rb b/spec/finders/packages/npm/package_finder_spec.rb index 230d267e508..7fabb3eed86 100644 --- a/spec/finders/packages/npm/package_finder_spec.rb +++ b/spec/finders/packages/npm/package_finder_spec.rb @@ -52,7 +52,7 @@ RSpec.describe ::Packages::Npm::PackageFinder do context 'with an uninstallable package' do before do - package.update_column(:status, 1) + package.update_column(:status, :error) end it { is_expected.to be_empty } diff --git a/spec/finders/packages/nuget/package_finder_spec.rb b/spec/finders/packages/nuget/package_finder_spec.rb index 045dba295ac..415bf796a72 100644 --- a/spec/finders/packages/nuget/package_finder_spec.rb +++ b/spec/finders/packages/nuget/package_finder_spec.rb @@ -36,7 +36,7 @@ RSpec.describe Packages::Nuget::PackageFinder do context 'with an uninstallable package' do before do - package1.update_column(:status, 1) + package1.update_column(:status, :error) end it { is_expected.to contain_exactly(package2) } diff --git a/spec/fixtures/error_tracking/go_two_exception_event.json b/spec/fixtures/error_tracking/go_two_exception_event.json new file mode 100644 index 00000000000..97ed8372a27 --- /dev/null +++ b/spec/fixtures/error_tracking/go_two_exception_event.json @@ -0,0 +1 @@ +{"contexts":{"device":{"arch":"amd64","num_cpu":16},"os":{"name":"darwin"},"runtime":{"go_maxprocs":16,"go_numcgocalls":1,"go_numroutines":2,"name":"go","version":"go1.16.10"}},"event_id":"f92492349cda4ceaba1aab9dac55a412","level":"error","platform":"go","release":"v0.12.0-1-g6b72962","sdk":{"name":"sentry.go","version":"0.12.0","integrations":["ContextifyFrames","Environment","IgnoreErrors","Modules"],"packages":[{"name":"sentry-go","version":"0.12.0"}]},"server_name":"jet.fios-router.home","user":{},"modules":{"github.com/getsentry/sentry-go":"(devel)","golang.org/x/sys":"v0.0.0-20211007075335-d3039528d8ac"},"exception":[{"type":"*errors.errorString","value":"unsupported protocol scheme \"\""},{"type":"*url.Error","value":"Get \"foobar\": unsupported protocol scheme \"\"","stacktrace":{"frames":[{"function":"main","module":"main","abs_path":"/Users/stanhu/github/sentry-go/example/basic/main.go","lineno":54,"pre_context":["\t// Set the timeout to the maximum duration the program can afford to wait.","\tdefer sentry.Flush(2 * time.Second)","","\tresp, err := http.Get(os.Args[1])","\tif err != nil {"],"context_line":"\t\tsentry.CaptureException(err)","post_context":["\t\tlog.Printf(\"reported to Sentry: %s\", err)","\t\treturn","\t}","\tdefer resp.Body.Close()",""],"in_app":true}]}}],"timestamp":"2021-12-25T22:32:06.191665-08:00"} diff --git a/spec/models/packages/package_spec.rb b/spec/models/packages/package_spec.rb index 44ba6e0e2fd..923ec173368 100644 --- a/spec/models/packages/package_spec.rb +++ b/spec/models/packages/package_spec.rb @@ -839,6 +839,7 @@ RSpec.describe Packages::Package, type: :model do end context 'status scopes' do + let_it_be(:default_package) { create(:maven_package, :default) } let_it_be(:hidden_package) { create(:maven_package, :hidden) } let_it_be(:processing_package) { create(:maven_package, :processing) } let_it_be(:error_package) { create(:maven_package, :error) } @@ -856,11 +857,15 @@ RSpec.describe Packages::Package, type: :model do describe '.installable' do subject { described_class.installable } - it 'does not include non-displayable packages', :aggregate_failures do + it 'does not include non-installable packages', :aggregate_failures do is_expected.not_to include(error_package) - is_expected.not_to include(hidden_package) is_expected.not_to include(processing_package) end + + it 'includes installable packages', :aggregate_failures do + is_expected.to include(default_package) + is_expected.to include(hidden_package) + end end describe '.with_status' do diff --git a/spec/requests/api/generic_packages_spec.rb b/spec/requests/api/generic_packages_spec.rb index 2d85d7b9583..1836233594d 100644 --- a/spec/requests/api/generic_packages_spec.rb +++ b/spec/requests/api/generic_packages_spec.rb @@ -574,6 +574,27 @@ RSpec.describe API::GenericPackages do end end + context 'with package status' do + where(:package_status, :expected_status) do + :default | :success + :hidden | :success + :error | :not_found + end + + with_them do + before do + project.add_developer(user) + package.update!(status: package_status) + end + + it "responds with #{params[:expected_status]}" do + download_file(personal_access_token_header) + + expect(response).to have_gitlab_http_status(expected_status) + end + end + end + context 'event tracking' do let(:snowplow_gitlab_standard_context) { { project: project, namespace: project.namespace, user: user } } diff --git a/spec/services/error_tracking/collect_error_service_spec.rb b/spec/services/error_tracking/collect_error_service_spec.rb index 52d095148c8..facb7b01e61 100644 --- a/spec/services/error_tracking/collect_error_service_spec.rb +++ b/spec/services/error_tracking/collect_error_service_spec.rb @@ -92,6 +92,25 @@ RSpec.describe ErrorTracking::CollectErrorService do expect(event.environment).to eq 'Accumulate' expect(event.payload).to eq parsed_event end + + context 'with two exceptions' do + let(:parsed_event) { Gitlab::Json.parse(fixture_file('error_tracking/go_two_exception_event.json')) } + + it 'reports using second exception', :aggregate_failures do + subject.execute + + event = ErrorTracking::ErrorEvent.last + error = event.error + + expect(error.name).to eq '*url.Error' + expect(error.description).to eq(%(Get \"foobar\": unsupported protocol scheme \"\")) + expect(error.platform).to eq 'go' + expect(error.actor).to eq('main(main)') + + expect(event.description).to eq(%(Get \"foobar\": unsupported protocol scheme \"\")) + expect(event.payload).to eq parsed_event + end + end end end end