feat: implement system statistics tracking, commit management controllers, and associated database migrations
All checks were successful
Build and Release / release (push) Successful in 1m49s
All checks were successful
Build and Release / release (push) Successful in 1m49s
This commit is contained in:
1
db/migrations/0000014_system_statistics.down.sql
Normal file
1
db/migrations/0000014_system_statistics.down.sql
Normal file
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS system_statistics CASCADE;
|
||||
28
db/migrations/0000014_system_statistics.up.sql
Normal file
28
db/migrations/0000014_system_statistics.up.sql
Normal file
@@ -0,0 +1,28 @@
|
||||
CREATE TABLE IF NOT EXISTS system_statistics (
|
||||
id UUID PRIMARY KEY DEFAULT uuidv7(),
|
||||
date DATE UNIQUE NOT NULL,
|
||||
|
||||
-- Cumulative stats
|
||||
total_users INT NOT NULL DEFAULT 0,
|
||||
total_projects INT NOT NULL DEFAULT 0,
|
||||
total_commits INT NOT NULL DEFAULT 0,
|
||||
total_submissions INT NOT NULL DEFAULT 0,
|
||||
total_medias INT NOT NULL DEFAULT 0,
|
||||
total_wikis INT NOT NULL DEFAULT 0,
|
||||
total_entities INT NOT NULL DEFAULT 0,
|
||||
total_geometries INT NOT NULL DEFAULT 0,
|
||||
total_storage_bytes BIGINT NOT NULL DEFAULT 0,
|
||||
|
||||
-- Daily stats
|
||||
new_users INT NOT NULL DEFAULT 0,
|
||||
new_projects INT NOT NULL DEFAULT 0,
|
||||
new_commits INT NOT NULL DEFAULT 0,
|
||||
new_submissions INT NOT NULL DEFAULT 0,
|
||||
new_medias INT NOT NULL DEFAULT 0,
|
||||
new_wikis INT NOT NULL DEFAULT 0,
|
||||
new_entities INT NOT NULL DEFAULT 0,
|
||||
new_geometries INT NOT NULL DEFAULT 0,
|
||||
new_storage_bytes BIGINT NOT NULL DEFAULT 0,
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
62
db/query/statistic.sql
Normal file
62
db/query/statistic.sql
Normal file
@@ -0,0 +1,62 @@
|
||||
-- name: UpsertSystemStatistics :one
|
||||
INSERT INTO system_statistics (
|
||||
date,
|
||||
total_users, total_projects, total_commits, total_submissions, total_medias, total_wikis, total_entities, total_geometries, total_storage_bytes,
|
||||
new_users, new_projects, new_commits, new_submissions, new_medias, new_wikis, new_entities, new_geometries, new_storage_bytes
|
||||
) VALUES (
|
||||
$1,
|
||||
(SELECT COUNT(*)::INT FROM users),
|
||||
(SELECT COUNT(*)::INT FROM projects),
|
||||
(SELECT COUNT(*)::INT FROM commits),
|
||||
(SELECT COUNT(*)::INT FROM submissions),
|
||||
(SELECT COUNT(*)::INT FROM medias),
|
||||
(SELECT COUNT(*)::INT FROM wikis),
|
||||
(SELECT COUNT(*)::INT FROM entities),
|
||||
(SELECT COUNT(*)::INT FROM geometries),
|
||||
COALESCE((SELECT SUM(size)::BIGINT FROM medias), 0),
|
||||
|
||||
(SELECT COUNT(*)::INT FROM users WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
(SELECT COUNT(*)::INT FROM projects WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
(SELECT COUNT(*)::INT FROM commits WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
(SELECT COUNT(*)::INT FROM submissions WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
(SELECT COUNT(*)::INT FROM medias WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
(SELECT COUNT(*)::INT FROM wikis WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
(SELECT COUNT(*)::INT FROM entities WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
(SELECT COUNT(*)::INT FROM geometries WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'),
|
||||
COALESCE((SELECT SUM(size)::BIGINT FROM medias WHERE created_at >= $1::DATE AND created_at < $1::DATE + INTERVAL '1 day'), 0)
|
||||
)
|
||||
ON CONFLICT (date) DO UPDATE SET
|
||||
total_users = EXCLUDED.total_users,
|
||||
total_projects = EXCLUDED.total_projects,
|
||||
total_commits = EXCLUDED.total_commits,
|
||||
total_submissions = EXCLUDED.total_submissions,
|
||||
total_medias = EXCLUDED.total_medias,
|
||||
total_wikis = EXCLUDED.total_wikis,
|
||||
total_entities = EXCLUDED.total_entities,
|
||||
total_geometries = EXCLUDED.total_geometries,
|
||||
total_storage_bytes = EXCLUDED.total_storage_bytes,
|
||||
new_users = EXCLUDED.new_users,
|
||||
new_projects = EXCLUDED.new_projects,
|
||||
new_commits = EXCLUDED.new_commits,
|
||||
new_submissions = EXCLUDED.new_submissions,
|
||||
new_medias = EXCLUDED.new_medias,
|
||||
new_wikis = EXCLUDED.new_wikis,
|
||||
new_entities = EXCLUDED.new_entities,
|
||||
new_geometries = EXCLUDED.new_geometries,
|
||||
new_storage_bytes = EXCLUDED.new_storage_bytes
|
||||
RETURNING *;
|
||||
|
||||
-- name: SearchSystemStatistics :many
|
||||
SELECT * FROM system_statistics
|
||||
WHERE
|
||||
(sqlc.narg('start_date')::DATE IS NULL OR date >= sqlc.narg('start_date')::DATE) AND
|
||||
(sqlc.narg('end_date')::DATE IS NULL OR date <= sqlc.narg('end_date')::DATE)
|
||||
ORDER BY date DESC;
|
||||
|
||||
-- name: GetSystemStatisticsByDate :one
|
||||
SELECT * FROM system_statistics WHERE date = $1 LIMIT 1;
|
||||
|
||||
-- name: GetSystemStatisticsByIDs :many
|
||||
SELECT * FROM system_statistics WHERE id = ANY($1::UUID[]);
|
||||
|
||||
|
||||
@@ -182,3 +182,29 @@ CREATE TABLE IF NOT EXISTS rag_chunks (
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_statistics (
|
||||
id UUID PRIMARY KEY DEFAULT uuidv7(),
|
||||
date DATE UNIQUE NOT NULL,
|
||||
|
||||
total_users INT NOT NULL DEFAULT 0,
|
||||
total_projects INT NOT NULL DEFAULT 0,
|
||||
total_commits INT NOT NULL DEFAULT 0,
|
||||
total_submissions INT NOT NULL DEFAULT 0,
|
||||
total_medias INT NOT NULL DEFAULT 0,
|
||||
total_wikis INT NOT NULL DEFAULT 0,
|
||||
total_entities INT NOT NULL DEFAULT 0,
|
||||
total_geometries INT NOT NULL DEFAULT 0,
|
||||
total_storage_bytes BIGINT NOT NULL DEFAULT 0,
|
||||
|
||||
new_users INT NOT NULL DEFAULT 0,
|
||||
new_projects INT NOT NULL DEFAULT 0,
|
||||
new_commits INT NOT NULL DEFAULT 0,
|
||||
new_submissions INT NOT NULL DEFAULT 0,
|
||||
new_medias INT NOT NULL DEFAULT 0,
|
||||
new_wikis INT NOT NULL DEFAULT 0,
|
||||
new_entities INT NOT NULL DEFAULT 0,
|
||||
new_geometries INT NOT NULL DEFAULT 0,
|
||||
new_storage_bytes BIGINT NOT NULL DEFAULT 0,
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user