Update to 4.6.8

This commit is contained in:
Tarrien committed 2026-09-18 04:41:16 -04:00
1 parent 3ddb709b8e
commit 150ca70fa8
4 files changed
+1336

No files matched your search

+1083
View File
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,32 @@
# frozen_string_literal: true
class Api::V1::Admin::MeasuresController < Api::BaseController
include Authorization
include Admin::PermissionsConcern
before_action -> { authorize_if_got_token! :'admin:read' }
before_action :set_measures
after_action :verify_authorized
def create
authorize :dashboard, :index?
render json: @measures, each_serializer: REST::Admin::MeasureSerializer
end
private
def set_measures
@measures = Admin::Metrics::Measure.retrieve(
params.require(:keys),
<<<<<<< HEAD
params[:start_at],
params[:end_at],
=======
params.require(:start_at),
params.require(:end_at),
>>>>>>> 5d7e3bbd17 (Merge commit from fork)
params
)
end
end
@@ -0,0 +1,91 @@
# frozen_string_literal: true
class Admin::Metrics::Dimension::BaseDimension
CACHE_TTL = 5.minutes.freeze
def self.with_params?
false
end
attr_reader :loaded
alias loaded? loaded
def initialize(start_at, end_at, limit, params)
@start_at = start_at&.to_datetime
@end_at = end_at&.to_datetime
@limit = limit&.to_i
@params = params
@loaded = false
<<<<<<< HEAD
if @start_at.present? && @end_at.present?
@start_at = [@start_at, @end_at - 2.years].max
else
@start_at = nil
@end_at = nil
end
=======
@start_at = [@start_at, @end_at - 2.years].max if @start_at.present? && @end_at.present?
>>>>>>> 5d7e3bbd17 (Merge commit from fork)
end
def key
raise NotImplementedError
end
def cache_key
["metrics/dimension/#{key}", @start_at, @end_at, @limit, canonicalized_params].join(';')
end
def data
load
end
def self.model_name
self.class.name
end
def read_attribute_for_serialization(key)
send(key) if respond_to?(key)
end
protected
def load
unless loaded?
@values = Rails.cache.fetch(cache_key, expires_in: CACHE_TTL) { perform_query }
@loaded = true
end
@values
end
def perform_query
raise NotImplementedError
end
def time_period
(@start_at..@end_at)
end
def params
{}
end
def canonicalized_params
params.to_h.to_a.sort_by { |k, _v| k.to_s }.map { |k, v| "#{k}=#{v}" }.join(';')
end
def earliest_status_id
snowflake_id(@start_at.beginning_of_day)
end
def latest_status_id
snowflake_id(@end_at.end_of_day)
end
def snowflake_id(datetime)
Mastodon::Snowflake.id_at(datetime, with_random: false)
end
end
@@ -0,0 +1,130 @@
# frozen_string_literal: true
class Admin::Metrics::Measure::BaseMeasure
CACHE_TTL = 5.minutes.freeze
def self.with_params?
false
end
attr_reader :loaded
alias loaded? loaded
def initialize(start_at, end_at, params)
@start_at = start_at.to_datetime
@end_at = end_at.to_datetime
@params = params
@loaded = false
<<<<<<< HEAD
if @start_at.present? && @end_at.present?
@start_at = [@start_at, @end_at - 2.years].max
else
@start_at = nil
@end_at = nil
end
=======
@start_at = [@start_at, @end_at - 2.years].max
>>>>>>> 5d7e3bbd17 (Merge commit from fork)
end
def cache_key
["metrics/measure/#{key}", @start_at, @end_at, canonicalized_params].join(';')
end
def key
raise NotImplementedError
end
def unit
nil
end
def total_in_time_range?
true
end
def total
load[:total]
end
def previous_total
load[:previous_total]
end
def data
load[:data]
end
def self.model_name
self.class.name
end
def read_attribute_for_serialization(key)
send(key) if respond_to?(key)
end
protected
def load
unless loaded?
@values = Rails.cache.fetch(cache_key, expires_in: CACHE_TTL) { perform_queries }.with_indifferent_access
@loaded = true
end
@values
end
def perform_queries
{
total: perform_total_query,
previous_total: perform_previous_total_query,
data: perform_data_query,
}
end
def perform_total_query
raise NotImplementedError
end
def perform_previous_total_query
raise NotImplementedError
end
def perform_data_query
raise NotImplementedError
end
def time_period
(@start_at.to_date..@end_at.to_date)
end
def previous_time_period
((@start_at.to_date - (length_of_period + 1))..(@end_at.to_date - (length_of_period + 1)))
end
def length_of_period
@length_of_period ||= @end_at.to_date - @start_at.to_date
end
def params
{}
end
def canonicalized_params
params.to_h.to_a.sort_by { |k, _v| k.to_s }.map { |k, v| "#{k}=#{v}" }.join(';')
end
def earliest_status_id
snowflake_id(@start_at.beginning_of_day)
end
def latest_status_id
snowflake_id(@end_at.end_of_day)
end
def snowflake_id(datetime)
Mastodon::Snowflake.id_at(datetime, with_random: false)
end
end