Sha256: 867613d364f278679103226b204d985b860ed2078724ca7a3ea16c98b9605b18

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

module Mercy
  class Report
    class Error < Report::ActiveRecord
      ALLOWED_PARAMETERS=[:period, :threshold]
      DEFAULT_OPTION = {
        external_key: :id,
        threshold: 0.02,
        period: 1.day,
        scope: :with_error,
        base_scope: :all,
        uniq: false
      }

      expose :threshold, type: :float
      expose :scope, :external_key, :uniq, :limit, case: :snake

      def initialize(options)
        super(self.class::DEFAULT_OPTION.merge(options))
      end

      def percentage
        @percentage ||= fetch_percentage
      end

      def scoped
        @scoped ||= fetch_scoped(last_entries, scope)
      end

      def error?
        @error ||= percentage > threshold
      end

      def as_json
        {
          ids: ids,
          percentage: percentage,
          status: status
        }
      end

      private

      def ids
        relation = scoped
        relation = relation.distinct if uniq
        relation = relation.limit(limit) if limit

        relation.pluck(external_key)
      end

      def fetch_percentage
        if (scope.is_a?(Symbol))
          last_entries.percentage(*(scope.to_s.split('.').map(&:to_sym)))
        else
          last_entries.percentage(scope)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mercy-1.6.0 lib/mercy/report/error.rb
mercy-1.5.0 lib/mercy/report/error.rb