# frozen_string_literal: true # Asynchronously generate the statistics for the given period # This worker is triggered when enabling the statistics and with `rails fablab:es:generate_stats` class PeriodStatisticsWorker include Sidekiq::Worker # @param period {String|Integer} date string or number of days until current date def perform(period) days = date_to_days(period) Rails.logger.info "\n==> generating statistics for the last #{days} days <==\n" if days.zero? Statistics::BuilderService.generate_statistic(start_date: Time.current.beginning_of_day, end_date: Time.current.end_of_day) else days.times.each do |i| Statistics::BuilderService.generate_statistic(start_date: i.day.ago.beginning_of_day, end_date: i.day.ago.end_of_day) end end end def date_to_days(value) return value.to_i if number?(value) date = Date.parse(value.to_s) (Time.current.to_date - date).to_i end def number?(string) true if Float(string) rescue StandardError false end end