jam-cloud/ruby/lib/jam_ruby/models/score.rb

63 lines
2.7 KiB
Ruby

require 'ipaddr'
module JamRuby
class Score < ActiveRecord::Base
MAX_YELLOW_LATENCY = 40
self.table_name = 'scores'
attr_accessible :alocidispid, :anodeid, :aaddr, :auserid, :alatencytestid, :blocidispid, :bnodeid, :baddr, :buserid, :blatencytestid, :score, :score_dt, :scorer, :scoring_data
default_scope order('score_dt desc')
def self.createx(alocidispid, anodeid, aaddr, blocidispid, bnodeid, baddr, score, score_dt = Time.now, score_data = nil, user_info = {})
score_dt = Time.new.utc if score_dt.nil?
score = score.ceil
raise "score must be positive" if score <= 0
ascore = Score.create(alocidispid: alocidispid, anodeid: anodeid, aaddr: aaddr, auserid: user_info[:auserid], alatencytestid: user_info[:alatencytestid], blocidispid: blocidispid, bnodeid: bnodeid, baddr: baddr, buserid: user_info[:buserid], blatencytestid: user_info[:blatencytestid], score: score, scorer: 0, score_dt: score_dt, scoring_data: score_data)
bscore = Score.create(alocidispid: blocidispid, anodeid: bnodeid, aaddr: baddr, auserid: user_info[:buserid], blatencytestid: user_info[:blatencytestid], blocidispid: alocidispid, bnodeid: anodeid, baddr: aaddr, buserid: user_info[:auserid], blatencytestid: user_info[:alatencytestid], score: score, scorer: 1, score_dt: score_dt) if alocidispid != blocidispid
return [ascore, bscore]
end
def self.deletex(alocidispid, blocidispid)
Score.where(alocidispid: alocidispid, blocidispid: blocidispid).delete_all
Score.where(alocidispid: blocidispid, blocidispid: alocidispid).delete_all if alocidispid != blocidispid
end
def self.findx(alocidispid, blocidispid)
s = Score.where(alocidispid: alocidispid, blocidispid: blocidispid).first
return -1 if s.nil?
return s.score
end
def self.score_conns(c1, c2, score)
user_info = {}
if c1.user_id
user_info[:auserid] = c1.user_id
else
user_info[:alatencytestid] = c1.latency_tester.id
end
if c2.user_id
user_info[:buserid] = c2.user_id
else
user_info[:blatencytestid] = c2.latency_tester.id
end
self.createx(c1.locidispid, c1.client_id, c1.addr, c2.locidispid, c2.client_id, c2.addr, score, nil, user_info)
end
# locid is a geoiplocation or geoipblock locid.
# coid is a jamisp coid
def self.compute_locidispid(locid, coid)
locid * 1000000 + coid
end
# if you have the right models in hand, this will compute a valid locidispid
def self.create_locidispid(geoiplocation_or_geoipblock, jamisp_or_jamcompany)
compute_locidispid(geoiplocation_or_geoipblock.locid, jamisp_or_jamcompany.coid)
end
end
end