是否可以通过Ruby on Rails应用程序监控Amazon S3资源使用情况?

时间:2010-03-07 19:45:32

标签: ruby-on-rails ruby amazon-s3

假设我有一个允许用户上传图像和文档的Web应用程序,我的应用程序将所有这些资产存储在S3上,有没有办法监控资源使用情况的PER用户帐户?

例如,如果用户帐户的存储空间限制为1GB,我该如何监控任何个人使用的限额?

此外(但这对我来说不是问题)如果该用户帐户的带宽限制为5GB,是否有可用的工具可以监控他们的S3带宽?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。您可以使用papreclip来管理文件上传(或任何其他有信誉的上传管理插件/ gem)。大多数这些工具使您可以访问上载文件的文件大小。您可以将这些文件与asset_uri(我想象您已经存储过)一起存储在数据库中,并检查用户是否可以上传另一个文件,只需将所有资产的所有大小与相应的user_id相加。

Users:
  id
  email_address
  first_name
  upload_limit

Assets:
  id
  user_id
  uri
  filesize
  filename

然后,要获取特定用户上传文件的总大小,您可以执行以下操作:

class User < ActiveRecord::Base
  has_many :assets

  #Check if the user can upload another file
  def can_upload?
    if Asset.sum('filesize', :conditions => 'user_id = #{self.id}') >= self.upload_limit
      return false
    else
      return true
    end
  end

  #See the user's used storage space
  def used_storage
    return Asset.sum('filesize', :conditions => 'user_id = #{self.id}')
  end

  #See how much space the user has remaining
  def available_storage
    if self.can_upload?
      return self.upload_limit - Asset.sum('filesize', :conditions => 'user_id = #{self.id}')
    else
      return 0
    end
  end
end

你可以看到我在这里使用ActiveRecord sum函数进行计算。您可以轻松使用地图或其他一些基于ruby的解决方案。