Log user's storage size in Redis
This commit is contained in:
parent
fa1f7bccba
commit
995ba52886
@ -159,6 +159,7 @@ module RemoteStorage
|
||||
if update_metadata_object(user, directory, key, metadata)
|
||||
if metadata_changed?(existing_metadata, metadata)
|
||||
update_dir_objects(user, directory, timestamp, checksum_for(data))
|
||||
log_size_difference(user, existing_metadata["s"], metadata[:s])
|
||||
end
|
||||
|
||||
server.headers["ETag"] = %Q("#{res.headers[:etag]}")
|
||||
@ -168,6 +169,11 @@ module RemoteStorage
|
||||
end
|
||||
end
|
||||
|
||||
def log_size_difference(user, old_size, new_size)
|
||||
delta = new_size.to_i - old_size.to_i
|
||||
redis.incrby "rs:s:#{user}", delta
|
||||
end
|
||||
|
||||
def checksum_for(data)
|
||||
Digest::MD5.hexdigest(data)
|
||||
end
|
||||
@ -182,6 +188,7 @@ module RemoteStorage
|
||||
end
|
||||
|
||||
do_delete_request(url)
|
||||
log_size_difference(user, existing_metadata["s"], 0)
|
||||
delete_metadata_objects(user, directory, key)
|
||||
delete_dir_objects(user, directory)
|
||||
|
||||
|
@ -74,6 +74,36 @@ describe "App" do
|
||||
root_items.must_equal ["food/"]
|
||||
end
|
||||
|
||||
context "logging usage size" do
|
||||
before do
|
||||
@put_stub = OpenStruct.new(headers: {
|
||||
etag: "bla",
|
||||
last_modified: "Fri, 04 Mar 2016 12:20:18 GMT"
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
it "logs the complete size when creating new objects" do
|
||||
RestClient.stub :put, @put_stub do
|
||||
put "/phil/food/aguacate", "1234567890"
|
||||
end
|
||||
|
||||
size_log = redis.get "rs:s:phil"
|
||||
size_log.must_equal "10"
|
||||
end
|
||||
|
||||
it "logs the size difference when updating existing objects" do
|
||||
RestClient.stub :put, @put_stub do
|
||||
put "/phil/food/camaron", "1234567890"
|
||||
put "/phil/food/aguacate", "1234567890"
|
||||
put "/phil/food/aguacate", "123"
|
||||
end
|
||||
|
||||
size_log = redis.get "rs:s:phil"
|
||||
size_log.must_equal "13"
|
||||
end
|
||||
end
|
||||
|
||||
describe "objects in root dir" do
|
||||
before do
|
||||
put_stub = OpenStruct.new(headers: {
|
||||
@ -289,6 +319,17 @@ describe "App" do
|
||||
end
|
||||
end
|
||||
|
||||
it "decreases the size log by size of deleted object" do
|
||||
RestClient.stub :delete, "" do
|
||||
RemoteStorage::Swift.stub_any_instance :etag_for, "rootetag" do
|
||||
delete "/phil/food/aguacate"
|
||||
end
|
||||
end
|
||||
|
||||
size_log = redis.get "rs:s:phil"
|
||||
size_log.must_equal "8"
|
||||
end
|
||||
|
||||
it "deletes the metadata object in redis" do
|
||||
RestClient.stub :delete, "" do
|
||||
RemoteStorage::Swift.stub_any_instance :etag_for, "rootetag" do
|
||||
|
Loading…
x
Reference in New Issue
Block a user