Add matching_day to measure report query helper

This commit is contained in:
Matt Jankowski 2025-07-28 11:25:50 -04:00
parent 4fa203e69e
commit cb92313c46
11 changed files with 16 additions and 10 deletions

View File

@ -37,7 +37,7 @@ class Admin::Metrics::Measure::InstanceAccountsMeasure < Admin::Metrics::Measure
WITH new_accounts AS ( WITH new_accounts AS (
SELECT accounts.id SELECT accounts.id
FROM accounts FROM accounts
WHERE date_trunc('day', accounts.created_at)::date = axis.period WHERE #{matching_day(Account, :created_at)}
AND #{account_domain_sql(params[:include_subdomains])} AND #{account_domain_sql(params[:include_subdomains])}
) )
SELECT count(*) FROM new_accounts SELECT count(*) FROM new_accounts

View File

@ -38,7 +38,7 @@ class Admin::Metrics::Measure::InstanceFollowersMeasure < Admin::Metrics::Measur
SELECT follows.id SELECT follows.id
FROM follows FROM follows
INNER JOIN accounts ON follows.account_id = accounts.id INNER JOIN accounts ON follows.account_id = accounts.id
WHERE date_trunc('day', follows.created_at)::date = axis.period WHERE #{matching_day(Follow, :created_at)}
AND #{account_domain_sql(params[:include_subdomains])} AND #{account_domain_sql(params[:include_subdomains])}
) )
SELECT count(*) FROM new_followers SELECT count(*) FROM new_followers

View File

@ -38,7 +38,7 @@ class Admin::Metrics::Measure::InstanceFollowsMeasure < Admin::Metrics::Measure:
SELECT follows.id SELECT follows.id
FROM follows FROM follows
INNER JOIN accounts ON follows.target_account_id = accounts.id INNER JOIN accounts ON follows.target_account_id = accounts.id
WHERE date_trunc('day', follows.created_at)::date = axis.period WHERE #{matching_day(Follow, :created_at)}
AND #{account_domain_sql(params[:include_subdomains])} AND #{account_domain_sql(params[:include_subdomains])}
) )
SELECT count(*) FROM new_follows SELECT count(*) FROM new_follows

View File

@ -47,7 +47,7 @@ class Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure < Admin::Metrics:
SELECT #{media_size_total} AS size SELECT #{media_size_total} AS size
FROM media_attachments FROM media_attachments
INNER JOIN accounts ON accounts.id = media_attachments.account_id INNER JOIN accounts ON accounts.id = media_attachments.account_id
WHERE date_trunc('day', media_attachments.created_at)::date = axis.period WHERE #{matching_day(MediaAttachment, :created_at)}
AND #{account_domain_sql(params[:include_subdomains])} AND #{account_domain_sql(params[:include_subdomains])}
) )
SELECT COALESCE(SUM(size), 0) FROM new_media_attachments SELECT COALESCE(SUM(size), 0) FROM new_media_attachments

View File

@ -38,7 +38,7 @@ class Admin::Metrics::Measure::InstanceReportsMeasure < Admin::Metrics::Measure:
SELECT reports.id SELECT reports.id
FROM reports FROM reports
INNER JOIN accounts ON accounts.id = reports.target_account_id INNER JOIN accounts ON accounts.id = reports.target_account_id
WHERE date_trunc('day', reports.created_at)::date = axis.period WHERE #{matching_day(Report, :created_at)}
AND #{account_domain_sql(params[:include_subdomains])} AND #{account_domain_sql(params[:include_subdomains])}
) )
SELECT count(*) FROM new_reports SELECT count(*) FROM new_reports

View File

@ -40,7 +40,7 @@ class Admin::Metrics::Measure::InstanceStatusesMeasure < Admin::Metrics::Measure
INNER JOIN accounts ON accounts.id = statuses.account_id INNER JOIN accounts ON accounts.id = statuses.account_id
WHERE statuses.id BETWEEN :earliest_status_id AND :latest_status_id WHERE statuses.id BETWEEN :earliest_status_id AND :latest_status_id
AND #{account_domain_sql(params[:include_subdomains])} AND #{account_domain_sql(params[:include_subdomains])}
AND date_trunc('day', statuses.created_at)::date = axis.period AND #{matching_day(Status, :created_at)}
) )
SELECT count(*) FROM new_statuses SELECT count(*) FROM new_statuses
) AS value ) AS value

View File

@ -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 #{matching_day(User, :created_at)}
) )
SELECT count(*) FROM new_users SELECT count(*) FROM new_users
) AS value ) AS value

View File

@ -27,7 +27,7 @@ class Admin::Metrics::Measure::OpenedReportsMeasure < Admin::Metrics::Measure::B
WITH new_reports AS ( WITH new_reports AS (
SELECT reports.id SELECT reports.id
FROM reports FROM reports
WHERE date_trunc('day', reports.created_at)::date = axis.period WHERE #{matching_day(Report, :created_at)}
) )
SELECT count(*) FROM new_reports SELECT count(*) FROM new_reports
) AS value ) AS value

View File

@ -23,6 +23,12 @@ module Admin::Metrics::Measure::QueryHelper
) )
end end
def matching_day(model, column)
<<~SQL.squish
DATE_TRUNC('day', #{model.table_name}.#{column})::date = axis.period
SQL
end
def account_domain_sql(include_subdomains) def account_domain_sql(include_subdomains)
if include_subdomains if include_subdomains
"accounts.domain IN (SELECT domain FROM instances WHERE reverse('.' || domain) LIKE reverse('.' || :domain::text))" "accounts.domain IN (SELECT domain FROM instances WHERE reverse('.' || domain) LIKE reverse('.' || :domain::text))"

View File

@ -27,7 +27,7 @@ class Admin::Metrics::Measure::ResolvedReportsMeasure < Admin::Metrics::Measure:
WITH resolved_reports AS ( WITH resolved_reports AS (
SELECT reports.id SELECT reports.id
FROM reports FROM reports
WHERE date_trunc('day', reports.action_taken_at)::date = axis.period WHERE #{matching_day(Report, :action_taken_at)}
) )
SELECT count(*) FROM resolved_reports SELECT count(*) FROM resolved_reports
) AS value ) AS value

View File

@ -35,7 +35,7 @@ class Admin::Metrics::Measure::TagServersMeasure < Admin::Metrics::Measure::Base
INNER JOIN accounts ON statuses.account_id = accounts.id INNER JOIN accounts ON statuses.account_id = accounts.id
WHERE statuses_tags.tag_id = :tag_id WHERE statuses_tags.tag_id = :tag_id
AND statuses.id BETWEEN :earliest_status_id AND :latest_status_id AND statuses.id BETWEEN :earliest_status_id AND :latest_status_id
AND date_trunc('day', statuses.created_at)::date = axis.period AND #{matching_day(Status, :created_at)}
) )
SELECT COUNT(*) FROM tag_servers SELECT COUNT(*) FROM tag_servers
) AS value ) AS value