From 90fb2b85154d98a482d01ce418196f3a3929fe25 Mon Sep 17 00:00:00 2001 From: cuihaikuo Date: Fri, 30 Dec 2016 16:57:33 +0800 Subject: [PATCH] Count total file number and storage occupation --- common/rpc-service.c | 12 ++++++++ include/seafile-rpc.h | 6 ++++ python/seafile/rpcclient.py | 8 ++++++ python/seaserv/api.py | 6 ++++ server/repo-mgr.c | 55 +++++++++++++++++++++++++++++++++++++ server/repo-mgr.h | 6 ++++ server/seaf-server.c | 10 +++++++ 7 files changed, 103 insertions(+) diff --git a/common/rpc-service.c b/common/rpc-service.c index 3b59c7d..e76fd71 100644 --- a/common/rpc-service.c +++ b/common/rpc-service.c @@ -5036,4 +5036,16 @@ seafile_get_shared_groups_for_subdir (const char *repo_id, return ret; } +gint64 +seafile_get_total_file_number (GError **error) +{ + return seaf_get_total_file_number (error); +} + +gint64 +seafile_get_total_storage (GError **error) +{ + return seaf_get_total_storage (error); +} + #endif /* SEAFILE_SERVER */ diff --git a/include/seafile-rpc.h b/include/seafile-rpc.h index c834e55..baa6f57 100644 --- a/include/seafile-rpc.h +++ b/include/seafile-rpc.h @@ -1026,4 +1026,10 @@ seafile_generate_magic_and_random_key(int enc_version, const char* repo_id, const char *passwd, GError **error); + +gint64 +seafile_get_total_file_number (GError **error); + +gint64 +seafile_get_total_storage (GError **error); #endif diff --git a/python/seafile/rpcclient.py b/python/seafile/rpcclient.py index 10e7bbe..8342f80 100644 --- a/python/seafile/rpcclient.py +++ b/python/seafile/rpcclient.py @@ -952,3 +952,11 @@ class SeafServerThreadedRpcClient(ccnet.RpcClientBase): @searpc_func("object", ["int", "string", "string"]) def generate_magic_and_random_key(enc_version, repo_id, password): pass + + @searpc_func("int64", []) + def get_total_file_number(): + pass + + @searpc_func("int64", []) + def get_total_storage(): + pass diff --git a/python/seaserv/api.py b/python/seaserv/api.py index e1b573b..0c95913 100644 --- a/python/seaserv/api.py +++ b/python/seaserv/api.py @@ -630,6 +630,12 @@ class SeafileAPI(object): def empty_repo_trash_by_owner(self, owner): return seafserv_threaded_rpc.empty_repo_trash_by_owner(owner) + def get_total_file_number (self): + return seafserv_threaded_rpc.get_total_file_number() + + def get_total_storage (self): + return seafserv_threaded_rpc.get_total_storage() + seafile_api = SeafileAPI() class CcnetAPI(object): diff --git a/server/repo-mgr.c b/server/repo-mgr.c index 1110d18..b9e74fe 100644 --- a/server/repo-mgr.c +++ b/server/repo-mgr.c @@ -3541,3 +3541,58 @@ out: return ret; } + +gboolean +get_total_file_number_cb (SeafDBRow *row, void *vdata) +{ + gint64 *data = (gint64 *)vdata; + gint64 count = seaf_db_row_get_column_int64 (row, 0); + *data += count; + + return TRUE; +} + +gint64 +seaf_get_total_file_number (GError **error) +{ + gint64 count = 0; + int ret = seaf_db_statement_foreach_row (seaf->db, + "SELECT file_count FROM RepoFileCount", + get_total_file_number_cb, + &count, 0); + if (ret < 0) { + seaf_warning ("Failed to get total file number.\n"); + g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, + "Failed to get total file number from db."); + return -1; + } + + return count; +} + +gboolean +get_total_storage_cb(SeafDBRow *row, void *vdata) +{ + gint64 *data = (gint64 *)vdata; + gint64 size = seaf_db_row_get_column_int64 (row, 0); + *data += size; + return TRUE; +} + +gint64 +seaf_get_total_storage (GError **error) +{ + gint64 size = 0; + int ret = seaf_db_statement_foreach_row (seaf->db, + "SELECT size FROM RepoSize", + get_total_storage_cb, + &size, 0); + if (ret < 0) { + seaf_warning ("Failed to get total storage occupation.\n"); + g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, + "Failed to get total storage occupation from db."); + return -1; + } + + return size; +} diff --git a/server/repo-mgr.h b/server/repo-mgr.h index 1aa1143..306f73e 100644 --- a/server/repo-mgr.h +++ b/server/repo-mgr.h @@ -772,4 +772,10 @@ seaf_repo_manager_edit_repo (const char *repo_id, const char *description, const char *user, GError **error); + +gint64 +seaf_get_total_file_number (GError **error); + +gint64 +seaf_get_total_storage (GError **error); #endif diff --git a/server/seaf-server.c b/server/seaf-server.c index 6042836..045b882 100644 --- a/server/seaf-server.c +++ b/server/seaf-server.c @@ -353,6 +353,16 @@ static void start_rpc_service (CcnetClient *client, int cloud_mode) "get_deleted", searpc_signature_objlist__string_int_string_string_int()); + searpc_server_register_function ("seafserv-threaded-rpcserver", + seafile_get_total_file_number, + "get_total_file_number", + searpc_signature_int__void()); + + searpc_server_register_function ("seafserv-threaded-rpcserver", + seafile_get_total_storage, + "get_total_storage", + searpc_signature_int__void()); + /* share repo to user */ searpc_server_register_function ("seafserv-threaded-rpcserver", seafile_add_share,