5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-28 17:26:23 +00:00
panel/app/jobs/stat_collection_job.rb

55 lines
1.3 KiB
Ruby
Raw Permalink Normal View History

# frozen_string_literal: true
# Genera resúmenes de información para poder mostrar estadísticas y se
# corre regularmente a sí misma.
2022-04-23 18:06:00 +00:00
class StatCollectionJob < PeriodicJob
2022-04-23 23:32:20 +00:00
include RecursiveRollup
STAT_NAME = 'stat_collection_job'
def perform(site:, once: true)
@site = site
2022-04-23 23:33:58 +00:00
beginning = beginning_of_interval
2022-04-30 17:39:31 +00:00
stat = site.stats.create! name: STAT_NAME
2022-04-23 23:33:02 +00:00
scope.rollup('builds', **options)
scope.rollup('space_used', **options) do |rollup|
rollup.average(:bytes)
end
scope.rollup('build_time', **options) do |rollup|
rollup.average(:seconds)
end
dimensions = { site_id: site.id }
reduce_rollup(name: 'builds', operation: :sum, dimensions: dimensions)
reduce_rollup(name: 'space_used', operation: :average, dimensions: dimensions)
reduce_rollup(name: 'build_time', operation: :average, dimensions: dimensions)
2022-04-23 23:33:02 +00:00
stat.touch
run_again! unless once
end
private
# Los registros a procesar
#
# @return [ActiveRecord::Relation]
def scope
@scope ||= site.build_stats.jekyll.where('build_stats.created_at >= ?', beginning_of_interval).group(:site_id)
end
# Las opciones por defecto
#
# @return [Hash]
def options
@options ||= { interval: starting_interval, update: true }
end
2022-04-26 21:50:11 +00:00
def stat_name
STAT_NAME
end
end