Commit 68d36e31 authored by Robert Speicher's avatar Robert Speicher

Merge branch '33751-track-usage-and-adoption-of-conan-repository' into 'master'

Track API events for Conan Repository with Snowplow

See merge request gitlab-org/gitlab!21202
parents b178a781 ac53e239
...@@ -19,4 +19,5 @@ class Packages::ConanFileMetadatum < ApplicationRecord ...@@ -19,4 +19,5 @@ class Packages::ConanFileMetadatum < ApplicationRecord
RECIPE_FILES = %w[conanfile.py conanmanifest.txt].freeze RECIPE_FILES = %w[conanfile.py conanmanifest.txt].freeze
PACKAGE_FILES = %w[conaninfo.txt conanmanifest.txt conan_package.tgz].freeze PACKAGE_FILES = %w[conaninfo.txt conanmanifest.txt conan_package.tgz].freeze
PACKAGE_BINARY = 'conan_package.tgz'
end end
...@@ -187,6 +187,8 @@ module API ...@@ -187,6 +187,8 @@ module API
delete do delete do
authorize!(:destroy_package, project) authorize!(:destroy_package, project)
track_event('delete_package')
package.destroy package.destroy
end end
end end
...@@ -373,6 +375,8 @@ module API ...@@ -373,6 +375,8 @@ module API
package_file = ::Packages::PackageFileFinder package_file = ::Packages::PackageFileFinder
.new(package, "#{params[:file_name]}", conan_file_type: file_type).execute! .new(package, "#{params[:file_name]}", conan_file_type: file_type).execute!
track_event('pull_package') if params[:file_name] == ::Packages::ConanFileMetadatum::PACKAGE_BINARY
present_carrierwave_file!(package_file.file) present_carrierwave_file!(package_file.file)
end end
...@@ -384,6 +388,8 @@ module API ...@@ -384,6 +388,8 @@ module API
current_package = package || ::Packages::Conan::CreatePackageService.new(project, current_user, params).execute current_package = package || ::Packages::Conan::CreatePackageService.new(project, current_user, params).execute
track_event('push_package') if params[:file_name] == ::Packages::ConanFileMetadatum::PACKAGE_BINARY && params['file.size'].positive?
# conan sends two upload requests, the first has no file, so we skip record creation if file.size == 0 # conan sends two upload requests, the first has no file, so we skip record creation if file.size == 0
::Packages::Conan::CreatePackageFileService.new(current_package, uploaded_file, params.merge(conan_file_type: file_type)).execute unless params['file.size'] == 0 ::Packages::Conan::CreatePackageFileService.new(current_package, uploaded_file, params.merge(conan_file_type: file_type)).execute unless params['file.size'] == 0
rescue ObjectStorage::RemoteStoreError => e rescue ObjectStorage::RemoteStoreError => e
......
...@@ -434,6 +434,8 @@ describe API::ConanPackages do ...@@ -434,6 +434,8 @@ describe API::ConanPackages do
project.add_maintainer(user) project.add_maintainer(user)
end end
it_behaves_like 'a gitlab tracking event', described_class.name, 'delete_package'
it 'deletes a package' do it 'deletes a package' do
expect { subject }.to change { Packages::Package.count }.from(2).to(1) expect { subject }.to change { Packages::Package.count }.from(2).to(1)
end end
...@@ -546,6 +548,12 @@ describe API::ConanPackages do ...@@ -546,6 +548,12 @@ describe API::ConanPackages do
it_behaves_like 'an internal project with packages' it_behaves_like 'an internal project with packages'
it_behaves_like 'a private project with packages' it_behaves_like 'a private project with packages'
it_behaves_like 'a project is not found' it_behaves_like 'a project is not found'
context 'tracking the conan_package.tgz download' do
let(:package_file) { package.package_files.find_by(file_name: ::Packages::ConanFileMetadatum::PACKAGE_BINARY) }
it_behaves_like 'a gitlab tracking event', described_class.name, 'pull_package'
end
end end
end end
...@@ -783,6 +791,11 @@ describe API::ConanPackages do ...@@ -783,6 +791,11 @@ describe API::ConanPackages do
it_behaves_like 'rejects invalid recipe' it_behaves_like 'rejects invalid recipe'
it_behaves_like 'uploads a package file' it_behaves_like 'uploads a package file'
context 'tracking the conan_package.tgz upload' do
let(:file_name) { ::Packages::ConanFileMetadatum::PACKAGE_BINARY }
it_behaves_like 'a gitlab tracking event', described_class.name, 'push_package'
end
end end
def temp_file(package_tmp) def temp_file(package_tmp)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment