Fix performance of user-focused queries in admin dashboard (#39929)
This commit is contained in:
parent
c5ec0a4da5
commit
ecc63c6cf7
@ -27,7 +27,7 @@ class Admin::Metrics::Measure::NewUsersMeasure < Admin::Metrics::Measure::BaseMe
|
|||||||
WITH new_users AS (
|
WITH new_users AS (
|
||||||
SELECT users.id
|
SELECT users.id
|
||||||
FROM users
|
FROM users
|
||||||
WHERE date_trunc('day', users.created_at)::date = axis.period
|
WHERE users.account_id >= (date_part('epoch', date_trunc('day', axis.period)::date) * 1000)::bigint << 16 AND users.account_id < ((date_part('epoch', date_trunc('day', axis.period)::date + ('1 day')::interval)) * 1000)::bigint << 16
|
||||||
)
|
)
|
||||||
SELECT count(*) FROM new_users
|
SELECT count(*) FROM new_users
|
||||||
) AS value
|
) AS value
|
||||||
|
|||||||
@ -76,7 +76,7 @@ class Admin::Metrics::Retention
|
|||||||
WITH new_users AS (
|
WITH new_users AS (
|
||||||
SELECT users.id
|
SELECT users.id
|
||||||
FROM users
|
FROM users
|
||||||
WHERE date_trunc(:frequency, users.created_at)::date = axis.cohort_period
|
WHERE users.account_id >= (date_part('epoch', date_trunc(:frequency, axis.cohort_period)::date) * 1000)::bigint << 16 AND users.account_id < ((date_part('epoch', date_trunc(:frequency, axis.cohort_period)::date + ('1' || :frequency)::interval)) * 1000)::bigint << 16
|
||||||
),
|
),
|
||||||
retained_users AS (
|
retained_users AS (
|
||||||
SELECT users.id
|
SELECT users.id
|
||||||
|
|||||||
@ -12,9 +12,17 @@ RSpec.describe Admin::Metrics::Measure::NewUsersMeasure do
|
|||||||
describe '#data' do
|
describe '#data' do
|
||||||
context 'with user records' do
|
context 'with user records' do
|
||||||
before do
|
before do
|
||||||
3.times { Fabricate :user, created_at: 2.days.ago }
|
travel_to 2.days.ago do
|
||||||
2.times { Fabricate :user, created_at: 1.day.ago }
|
# We specify the `id` because `travel_to` doesn't affect the database
|
||||||
Fabricate :user, created_at: 0.days.ago
|
3.times { Fabricate :account, id: Mastodon::Snowflake.id_at(Time.now.utc) }
|
||||||
|
end
|
||||||
|
|
||||||
|
travel_to 1.day.ago do
|
||||||
|
# We specify the `id` because `travel_to` doesn't affect the database
|
||||||
|
2.times { Fabricate :account, id: Mastodon::Snowflake.id_at(Time.now.utc) }
|
||||||
|
end
|
||||||
|
|
||||||
|
Fabricate :user
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns correct user counts' do
|
it 'returns correct user counts' do
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user