diff --git a/app/jobs/concerns/recursive_rollup.rb b/app/jobs/concerns/recursive_rollup.rb index b3327a73..5ba9dd8b 100644 --- a/app/jobs/concerns/recursive_rollup.rb +++ b/app/jobs/concerns/recursive_rollup.rb @@ -15,14 +15,33 @@ module RecursiveRollup # @param :interval [String] # @param :operation [Symbol] # @param :dimensions [Hash] - # @param :new_name [String] # @param :beginning [Time] # @return [Rollup] - def recursive_rollup(name:, interval_previous:, interval:, dimensions:, beginning:, operation: :sum, new_name: nil) - Rollup.where(name: name, interval: interval_previous, dimensions: dimensions.to_json) + def recursive_rollup(name:, interval_previous:, interval:, dimensions:, beginning:, operation: :sum) + Rollup.where(name: name, interval: interval_previous, dimensions: dimensions) .where('time >= ?', beginning.try(:"beginning_of_#{interval}")) .group(*dimensions_to_jsonb_query(dimensions)) - .rollup(new_name || name, interval: interval, update: true) do |rollup| + .rollup(name, interval: interval, update: true) do |rollup| + rollup.try(operation, :value) + end + end + + # Genera un nuevo rollup a partir de uno anterior. + # + # @param :name [String] + # @param :new_name [String] + # @param :interval_previous [String] + # @param :interval [String] + # @param :operation [Symbol] + # @param :dimensions [Hash] + # @param :beginning [Time] + # @return [Rollup] + def square_rollup(name:, new_name:, interval:, dimensions:, beginning:, operation: :sum) + Rollup.where(name: name, interval: interval_previous) + .where_dimensions(**dimensions) + .where('time >= ?', beginning.try(:"beginning_of_#{interval}")) + .group(*dimensions_to_jsonb_query(dimensions)) + .rollup(new_name, interval: interval, update: true) do |rollup| rollup.try(operation, :value) end end diff --git a/app/jobs/uri_collection_job.rb b/app/jobs/uri_collection_job.rb index 310984a0..5de95d43 100644 --- a/app/jobs/uri_collection_job.rb +++ b/app/jobs/uri_collection_job.rb @@ -62,23 +62,21 @@ class UriCollectionJob < PeriodicJob end # Reducir todas las visitas a cantidad de visitas por host - recursive_rollup(name: 'host|uri', - new_name: 'host', - interval_previous: starting_interval, - interval: starting_interval, - dimensions: host_dimensions, - beginning: beginning) + square_rollup(name: 'host|uri', + new_name: 'host', + interval: starting_interval, + dimensions: host_dimensions, + beginning: beginning) # Acumular por mes y año reduce_rollup('host', beginning, **host_dimensions) columns.each do |column| - recursive_rollup(name: "host|uri|#{column}", - new_name: "host|#{column}", - interval_previous: starting_interval, - interval: starting_interval, - dimensions: host_dimensions, - beginning: beginning) + square_rollup(name: "host|uri|#{column}", + new_name: "host|#{column}", + interval: starting_interval, + dimensions: host_dimensions, + beginning: beginning) reduce_rollup("host|#{column}", beginning, **host_dimensions) end