summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
commit0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch)
tree40874799472fa07416f17b50a398ac33b7771905 /packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
parentupdate deps (diff)
downloadsharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip
refactoring
Resolve #7779
Diffstat (limited to 'packages/backend/src/server/api/endpoints/admin/get-table-stats.ts')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/get-table-stats.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts b/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
new file mode 100644
index 0000000000..bce813232b
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
@@ -0,0 +1,45 @@
+import define from '../../define';
+import { getConnection } from 'typeorm';
+
+export const meta = {
+ requireCredential: true as const,
+ requireModerator: true,
+
+ tags: ['admin'],
+
+ params: {
+ },
+
+ res: {
+ type: 'object' as const,
+ optional: false as const, nullable: false as const,
+ example: {
+ migrations: {
+ count: 66,
+ size: 32768
+ },
+ }
+ }
+};
+
+export default define(meta, async () => {
+ const sizes = await
+ getConnection().query(`
+ SELECT relname AS "table", reltuples as "count", pg_total_relation_size(C.oid) AS "size"
+ FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
+ WHERE nspname NOT IN ('pg_catalog', 'information_schema')
+ AND C.relkind <> 'i'
+ AND nspname !~ '^pg_toast';`)
+ .then(recs => {
+ const res = {} as Record<string, { count: number; size: number; }>;
+ for (const rec of recs) {
+ res[rec.table] = {
+ count: parseInt(rec.count, 10),
+ size: parseInt(rec.size, 10),
+ };
+ }
+ return res;
+ });
+
+ return sizes;
+});