Sha256: e2345773621cc49f4d94f8ca179d3ac3115e5ba1e4a32716c18bc49b385bab57

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

module Bidu
  module House
    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
        }

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

        def initialize(options)
          super(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.uniq 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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bidu-house-1.2.0 lib/bidu/house/report/error.rb