Software /
code /
prosody
Comparison
plugins/mod_http_file_share.lua @ 11999:9d2eab56f124
mod_http_file_share: Keep track of total storage use across restarts
The value needs to be known in order to determine if additional uploads
can be accepted.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 03 Dec 2021 08:21:29 +0100 |
parent | 11998:99be6874340b |
child | 12003:121c0401f83e |
comparison
equal
deleted
inserted
replaced
11998:99be6874340b | 11999:9d2eab56f124 |
---|---|
26 | 26 |
27 module:add_identity("store", "file", module:get_option_string("name", "HTTP File Upload")); | 27 module:add_identity("store", "file", module:get_option_string("name", "HTTP File Upload")); |
28 module:add_feature(namespace); | 28 module:add_feature(namespace); |
29 | 29 |
30 local uploads = module:open_store("uploads", "archive"); | 30 local uploads = module:open_store("uploads", "archive"); |
31 local persist_stats = module:open_store("upload_stats", "map"); | |
31 -- id, <request>, time, owner | 32 -- id, <request>, time, owner |
32 | 33 |
33 local secret = module:get_option_string(module.name.."_secret", require"util.id".long()); | 34 local secret = module:get_option_string(module.name.."_secret", require"util.id".long()); |
34 local external_base_url = module:get_option_string(module.name .. "_base_url"); | 35 local external_base_url = module:get_option_string(module.name .. "_base_url"); |
35 local file_size_limit = module:get_option_number(module.name .. "_size_limit", 10 * 1024 * 1024); -- 10 MB | 36 local file_size_limit = module:get_option_number(module.name .. "_size_limit", 10 * 1024 * 1024); -- 10 MB |
70 | 71 |
71 local measure_upload_cache_size = module:measure("upload_cache", "amount"); | 72 local measure_upload_cache_size = module:measure("upload_cache", "amount"); |
72 local measure_quota_cache_size = module:measure("quota_cache", "amount"); | 73 local measure_quota_cache_size = module:measure("quota_cache", "amount"); |
73 local measure_total_storage_usage = nil; | 74 local measure_total_storage_usage = nil; |
74 if total_storage_limit then | 75 if total_storage_limit then |
76 local total, err = persist_stats:get(nil, "total"); | |
77 if not err then total_storage_usage = tonumber(total) or 0; end | |
75 measure_total_storage_usage = module:measure("total_storage", "amount", { unit = "bytes" }); | 78 measure_total_storage_usage = module:measure("total_storage", "amount", { unit = "bytes" }); |
76 end | 79 end |
77 | 80 |
78 module:hook_global("stats-update", function () | 81 module:hook_global("stats-update", function () |
79 measure_upload_cache_size(upload_cache:count()); | 82 measure_upload_cache_size(upload_cache:count()); |
511 end | 514 end |
512 | 515 |
513 if total_storage_usage then | 516 if total_storage_usage then |
514 total_storage_usage = total_storage_usage - size_sum; | 517 total_storage_usage = total_storage_usage - size_sum; |
515 module:log("debug", "Global quota %s / %s", B(total_storage_usage), B(total_storage_limit)); | 518 module:log("debug", "Global quota %s / %s", B(total_storage_usage), B(total_storage_limit)); |
519 persist_stats:set(nil, "total", total_storage_usage); | |
516 end | 520 end |
517 | 521 |
518 if #obsolete_uploads == 0 then | 522 if #obsolete_uploads == 0 then |
519 module:log("debug", "No metadata to remove"); | 523 module:log("debug", "No metadata to remove"); |
520 else | 524 else |
545 end | 549 end |
546 | 550 |
547 module:log("info", "Uploaded files total: %s in %d files", B(sum), count); | 551 module:log("info", "Uploaded files total: %s in %d files", B(sum), count); |
548 total_storage_usage = sum; | 552 total_storage_usage = sum; |
549 module:log("debug", "Global quota %s / %s", B(total_storage_usage), B(total_storage_limit)); | 553 module:log("debug", "Global quota %s / %s", B(total_storage_usage), B(total_storage_limit)); |
554 persist_stats:set(nil, "total", sum); | |
550 summary_done(); | 555 summary_done(); |
551 end); | 556 end); |
552 | 557 |
553 end | 558 end |
554 | 559 |