Sha256: 266dc7487261c06b742f9f726f3d9db4b3950718be26122b3d720c1a46569e07

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

module RailsPerformance
  module Reports
    class BaseReport
      attr_reader :db, :group, :sort, :title

      def initialize(db, group: nil, sort: nil, title: nil)
        @db = db
        @group = group
        @sort = sort
        @title = title

        set_defaults
      end

      def collect
        db.group_by(group).each_with_object([]) do |(k, v), res|
          res << yield(k, v)
        end
      end

      def set_defaults
      end

      def self.time_in_app_time_zone(time)
        app_time_zone = ::Rails.application.config.time_zone
        if app_time_zone.present?
          time.in_time_zone(app_time_zone)
        else
          time
        end
      end

      def calculate_data
        now = Time.current
        stop = Time.at(60 * (now.to_i / 60))
        offset = RailsPerformance::Reports::BaseReport.time_in_app_time_zone(now).utc_offset
        current = stop - RailsPerformance.duration

        @data = []
        all = {}

        # read current values
        db.group_by(group).each do |(k, v)|
          yield(all, k, v)
        end

        # add blank columns
        while current <= stop
          key = current.strftime(RailsPerformance::FORMAT)
          views = all[key].presence || 0
          @data << [(current.to_i + offset) * 1000, views.round(2)]
          current += 1.minute
        end

        # sort by time
        @data.sort!
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails_performance-1.3.0 lib/rails_performance/reports/base_report.rb