summaryrefslogtreecommitdiff
path: root/src/server/api
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-06-18 16:49:58 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-06-18 16:49:58 +0900
commit4f284e1bc0a5d18eed5d6ad945ca23be2091238f (patch)
tree1adda0b08d5ea7d975e485bef04426f8ff941211 /src/server/api
parentBetter request interval (diff)
downloadsharkey-4f284e1bc0a5d18eed5d6ad945ca23be2091238f.tar.gz
sharkey-4f284e1bc0a5d18eed5d6ad945ca23be2091238f.tar.bz2
sharkey-4f284e1bc0a5d18eed5d6ad945ca23be2091238f.zip
Resolve #5063
Diffstat (limited to 'src/server/api')
-rw-r--r--src/server/api/endpoints/admin/get-table-stats.ts37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/server/api/endpoints/admin/get-table-stats.ts b/src/server/api/endpoints/admin/get-table-stats.ts
new file mode 100644
index 0000000000..1abea18492
--- /dev/null
+++ b/src/server/api/endpoints/admin/get-table-stats.ts
@@ -0,0 +1,37 @@
+import define from '../../define';
+import { getConnection } from 'typeorm';
+
+export const meta = {
+ requireCredential: false,
+
+ desc: {
+ 'en-US': 'Get table stats'
+ },
+
+ tags: ['meta'],
+
+ params: {
+ },
+};
+
+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;
+});