Update to 4.6.8
This commit is contained in:
1 parent
3ddb709b8e
commit
150ca70fa8
4 files changed
+1336
No files matched your search
+1083
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
|
||||
Reference in new issue
Block a user