recolectar estadísticas una vez por hora
This commit is contained in:
parent
0342455955
commit
306d1ed983
1 changed files with 66 additions and 0 deletions
66
app/jobs/stat_collection_job.rb
Normal file
66
app/jobs/stat_collection_job.rb
Normal file
|
@ -0,0 +1,66 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Genera resúmenes de información para poder mostrar estadísticas y se
|
||||
# corre regularmente a sí misma.
|
||||
class StatCollectionJob < ApplicationJob
|
||||
class CrontabException < StandardError; end
|
||||
|
||||
# Descartar y notificar si pasó algo más.
|
||||
#
|
||||
# XXX: En realidad deberíamos seguir reintentando?
|
||||
discard_on(Exception) do |_, error|
|
||||
ExceptionNotifier.notify_exception error
|
||||
end
|
||||
|
||||
# Correr indefinidamente una vez por hora.
|
||||
#
|
||||
# XXX: El orden importa, si el descarte viene después, nunca se va a
|
||||
# reintentar.
|
||||
retry_on(StatCollectionJob::CrontabException, wait: 1.hour, attempts: Float::INFINITY)
|
||||
|
||||
COLUMNS = %i[uri].freeze
|
||||
|
||||
def perform(once: false)
|
||||
Stat::INTERVALS.each do |interval|
|
||||
options = { interval: interval }
|
||||
|
||||
# Visitas por hostname
|
||||
AccessLog.completed_requests.group(:host).rollup('host', **options)
|
||||
|
||||
combined_columns **options
|
||||
stats_by_site **options
|
||||
end
|
||||
|
||||
# Registrar que se hicieron todas las recolecciones
|
||||
Stat.create!
|
||||
|
||||
raise CrontabException unless once
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Combinación de columnas
|
||||
def combined_columns(**options)
|
||||
COLUMNS.each do |column|
|
||||
AccessLog.completed_requests.group(:host, column).rollup("hostname|#{column}", **options)
|
||||
end
|
||||
end
|
||||
|
||||
# Uso de recursos por cada sitio.
|
||||
#
|
||||
# XXX: En realidad se agrupan por el deploy_id, que siempre será el
|
||||
# del DeployLocal.
|
||||
def stats_by_site(**options)
|
||||
Site.find_each do |site|
|
||||
site.build_stats.jekyll.group(:deploy_id).rollup('builds', **options)
|
||||
|
||||
site.build_stats.jekyll.group(:deploy_id).rollup('space_used', **options) do |rollup|
|
||||
rollup.average(:bytes)
|
||||
end
|
||||
|
||||
site.build_stats.jekyll.group(:deploy_id).rollup('build_time', **options) do |rollup|
|
||||
rollup.average(:seconds)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue