class ActiveHashcash::Reputation::IPv4Range
Constants
- MIN_PREFIX
Public Class Methods
# File app/models/active_hashcash/reputation/ipv4_range.rb, line 55 def self.delete_zero_scores where(anonymous_score: 0, abuse_score: 0, attack_score: 0).delete_all end
# File app/models/active_hashcash/reputation/ipv4_range.rb, line 35 def self.reset_score(name, entries) column = :"#{name}_score" entries.uniq! { |ip, _| ip } transaction do where(column => 1..).update_all(column => 0) entries.each_slice(10_000) { |batch| upsert_score(column, batch) } end end
# File app/models/active_hashcash/reputation/ipv4_range.rb, line 28 def self.scores(ip) abuse, anonymous, attack = by_address(ip).pick(Arel.sql("max(abuse_score), max(anonymous_score), max(attack_score)")) {abuse: abuse || 0, anonymous: anonymous || 0, attack: attack || 0} rescue IPAddr::InvalidAddressError {abuse: 0, anonymous: 0, attack: 0} end
# File app/models/active_hashcash/reputation/ipv4_range.rb, line 44 def self.upsert_score(column, entries) upsert_all( entries.map do |ip, value| range = ip.to_range {first_address: range.first.hton, last_address: range.last.hton, column => value} end, record_timestamps: false, update_only: [column] ) end