aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_storage/service
diff options
context:
space:
mode:
Diffstat (limited to 'lib/active_storage/service')
-rw-r--r--lib/active_storage/service/disk_service.rb49
-rw-r--r--lib/active_storage/service/gcs_service.rb38
-rw-r--r--lib/active_storage/service/s3_service.rb38
3 files changed, 93 insertions, 32 deletions
diff --git a/lib/active_storage/service/disk_service.rb b/lib/active_storage/service/disk_service.rb
index f6c4fd8c4b..e2d9191189 100644
--- a/lib/active_storage/service/disk_service.rb
+++ b/lib/active_storage/service/disk_service.rb
@@ -11,37 +11,60 @@ class ActiveStorage::Service::DiskService < ActiveStorage::Service
end
def upload(key, io, checksum: nil)
- IO.copy_stream(io, make_path_for(key))
- ensure_integrity_of(key, checksum) if checksum
+ instrument :upload, key, checksum: checksum do
+ IO.copy_stream(io, make_path_for(key))
+ ensure_integrity_of(key, checksum) if checksum
+ end
end
def download(key)
if block_given?
- File.open(path_for(key)) do |file|
- while data = file.binread(64.kilobytes)
- yield data
+ instrument :streaming_download, key do
+ File.open(path_for(key)) do |file|
+ while data = file.binread(64.kilobytes)
+ yield data
+ end
end
end
else
- File.binread path_for(key)
+ instrument :download, key do
+ File.binread path_for(key)
+ end
end
end
def delete(key)
- File.delete path_for(key) rescue Errno::ENOENT # Ignore files already deleted
+ instrument :delete, key do
+ begin
+ File.delete path_for(key)
+ rescue Errno::ENOENT
+ # Ignore files already deleted
+ end
+ end
end
def exist?(key)
- File.exist? path_for(key)
+ instrument :exist, key do |payload|
+ answer = File.exist? path_for(key)
+ payload[:exist] = answer
+ answer
+ end
end
def url(key, expires_in:, disposition:, filename:)
- verified_key_with_expiration = ActiveStorage::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in)
+ instrument :url, key do |payload|
+ verified_key_with_expiration = ActiveStorage::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in)
- if defined?(Rails) && defined?(Rails.application)
- Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration, disposition: disposition, filename: filename)
- else
- "/rails/blobs/#{verified_key_with_expiration}/#{filename}?disposition=#{disposition}"
+ generated_url =
+ if defined?(Rails) && defined?(Rails.application)
+ Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration, disposition: disposition, filename: filename)
+ else
+ "/rails/blobs/#{verified_key_with_expiration}/#{filename}?disposition=#{disposition}"
+ end
+
+ payload[:url] = generated_url
+
+ generated_url
end
end
diff --git a/lib/active_storage/service/gcs_service.rb b/lib/active_storage/service/gcs_service.rb
index e09fa484ff..bca4ab5331 100644
--- a/lib/active_storage/service/gcs_service.rb
+++ b/lib/active_storage/service/gcs_service.rb
@@ -10,29 +10,47 @@ class ActiveStorage::Service::GCSService < ActiveStorage::Service
end
def upload(key, io, checksum: nil)
- bucket.create_file(io, key, md5: checksum)
- rescue Google::Cloud::InvalidArgumentError
- raise ActiveStorage::IntegrityError
+ instrument :upload, key, checksum: checksum do
+ begin
+ bucket.create_file(io, key, md5: checksum)
+ rescue Google::Cloud::InvalidArgumentError
+ raise ActiveStorage::IntegrityError
+ end
+ end
end
# FIXME: Add streaming when given a block
def download(key)
- io = file_for(key).download
- io.rewind
- io.read
+ instrument :download, key do
+ io = file_for(key).download
+ io.rewind
+ io.read
+ end
end
def delete(key)
- file_for(key)&.delete
+ instrument :delete, key do
+ file_for(key)&.delete
+ end
end
def exist?(key)
- file_for(key).present?
+ instrument :exist, key do |payload|
+ answer = file_for(key).present?
+ payload[:exist] = answer
+ answer
+ end
end
def url(key, expires_in:, disposition:, filename:)
- file_for(key).signed_url(expires: expires_in) + "&" +
- { "response-content-disposition" => "#{disposition}; filename=\"#{filename}\"" }.to_query
+ instrument :url, key do |payload|
+ generated_url = file_for(key).signed_url(expires: expires_in) + "&" +
+ { "response-content-disposition" => "#{disposition}; filename=\"#{filename}\"" }.to_query
+
+ payload[:url] = generated_url
+
+ generated_url
+ end
end
private
diff --git a/lib/active_storage/service/s3_service.rb b/lib/active_storage/service/s3_service.rb
index 09886ca863..53890751ee 100644
--- a/lib/active_storage/service/s3_service.rb
+++ b/lib/active_storage/service/s3_service.rb
@@ -10,30 +10,50 @@ class ActiveStorage::Service::S3Service < ActiveStorage::Service
end
def upload(key, io, checksum: nil)
- object_for(key).put(body: io, content_md5: checksum)
- rescue Aws::S3::Errors::BadDigest
- raise ActiveStorage::IntegrityError
+ instrument :upload, key, checksum: checksum do
+ begin
+ object_for(key).put(body: io, content_md5: checksum)
+ rescue Aws::S3::Errors::BadDigest
+ raise ActiveStorage::IntegrityError
+ end
+ end
end
def download(key)
if block_given?
- stream(key, &block)
+ instrument :streaming_download, key do
+ stream(key, &block)
+ end
else
- object_for(key).get.body.read.force_encoding(Encoding::BINARY)
+ instrument :download, key do
+ object_for(key).get.body.read.force_encoding(Encoding::BINARY)
+ end
end
end
def delete(key)
- object_for(key).delete
+ instrument :delete, key do
+ object_for(key).delete
+ end
end
def exist?(key)
- object_for(key).exists?
+ instrument :exist, key do |payload|
+ answer = object_for(key).exists?
+ payload[:exist] = answer
+ answer
+ end
end
def url(key, expires_in:, disposition:, filename:)
- object_for(key).presigned_url :get, expires_in: expires_in,
- response_content_disposition: "#{disposition}; filename=\"#{filename}\""
+ instrument :url, key do |payload|
+ generated_url = object_for(key).presigned_url :get, expires_in: expires_in,
+ response_content_disposition: "#{disposition}; filename=\"#{filename}\""
+
+ payload[:url] = generated_url
+
+ generated_url
+ end
end
private