Class: TrafficMansion::Queue

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document, Mongoid::Timestamps
Defined in:
lib/traffic_mansion/queue.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.add(type, parent_event_id = nil, data = {}) ⇒ Object



82
83
84
85
86
87
# File 'lib/traffic_mansion/queue.rb', line 82

def self.add type, parent_event_id = nil, data = {}
  user_id = data["user_id"]
  event = TrafficMansion::Queue.create :type => type, :parent_event_id => parent_event_id, :user_id => user_id, :data => data
  TrafficMansion::QueueProcessor.perform_async event.id
  event
end

.add_rebill(user_id, payment_id, amount, product_code, remote_ip, referer, timestamp = Time.now.to_i) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/traffic_mansion/queue.rb', line 53

def self.add_rebill user_id, payment_id, amount, product_code, remote_ip, referer, timestamp = Time.now.to_i
  event_data = {
    "user_id"      => user_id,
    "timestamp"    => timestamp,
    "transaction"  => payment_id,
    "amount"       => amount,
    "product_code" => product_code,
    "remote_addr"  => remote_ip,
    "http_referer" => referer
  }
  TrafficMansion::Queue::add "rebill", nil, event_data
end

.add_refund(user_id, payment_id, amount, product_code, transaction_type, remote_ip, referer, timestamp = Time.now.to_i) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/traffic_mansion/queue.rb', line 66

def self.add_refund user_id, payment_id, amount, product_code, transaction_type, remote_ip, referer, timestamp = Time.now.to_i
  event_data = {
    "user_id"        => user_id,
    "timestamp"      => timestamp,
    "transaction"    => payment_id,
    "amount"         => amount,
    "product_code"   => product_code,
    "remote_addr"    => remote_ip,
    "http_referer"   => referer,
    "is_rebill"      => transaction_type.to_s == "rebill" ? 1 : 0,
    "refund_transid" => payment_id,
    "penalty"        => 0, # normally it's not used anymore, but, who knows?...
  }
  TrafficMansion::Queue::add "refund", nil, event_data
end

.add_sale(user_id, payment_id, amount, product_code, remote_ip, referer, timestamp = Time.now.to_i) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/traffic_mansion/queue.rb', line 40

def self.add_sale user_id, payment_id, amount, product_code, remote_ip, referer, timestamp = Time.now.to_i
  event_data = {
    "user_id"      => user_id,
    "timestamp"    => timestamp,
    "transaction"  => payment_id,
    "amount"       => amount,
    "product_code" => product_code,
    "remote_addr"  => remote_ip,
    "http_referer" => referer
  }
  TrafficMansion::Queue::add "sale", nil, event_data
end

.add_signup(parent_event_id, user_id, remote_ip, referer, timestamp = Time.now.to_i) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/traffic_mansion/queue.rb', line 30

def self. parent_event_id, user_id, remote_ip, referer, timestamp = Time.now.to_i
  event_data = {
    "user_id"      => user_id,
    "timestamp"    => timestamp,
    "remote_addr"  => remote_ip,
    "http_referer" => referer
  }
  TrafficMansion::Queue::add "signup", parent_event_id, event_data
end

.add_unique_visit(campaign_id, remote_ip, referer, timestamp = Time.now.to_i) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/traffic_mansion/queue.rb', line 20

def self.add_unique_visit campaign_id, remote_ip, referer, timestamp = Time.now.to_i
  event_data = {
    "campaign_id"  => campaign_id,
    "timestamp"    => timestamp,
    "remote_addr"  => remote_ip,
    "http_referer" => referer
  }
  TrafficMansion::Queue::add "visit", nil, event_data
end

.find_parent_by_user(user_id) ⇒ Object



89
90
91
# File 'lib/traffic_mansion/queue.rb', line 89

def self.find_parent_by_user user_id
  TrafficMansion::Queue.where(:user_id => user_id, :type => "signup").first
end

Instance Method Details

#parent?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/traffic_mansion/queue.rb', line 103

def parent?
  self.type == "visit"
end

#processObject



93
94
95
96
97
98
99
100
101
# File 'lib/traffic_mansion/queue.rb', line 93

def process
  if !parent? && parent_event_id.nil?
    update_parent_event_id
  end
  if parent_event_id.present?
    update_from_parent
  end
  track
end

#trackObject



127
128
129
130
131
132
133
134
135
136
137
# File 'lib/traffic_mansion/queue.rb', line 127

def track
  tracker = TrafficMansion::Tracker.new data
  res = tracker.send type, data
  if res.success?
    self.result = res.get_response
    self.processed = true
    save!
  else
    raise "Tracking failed with result: #{res.get_error}"
  end
end

#update_from_parentObject



117
118
119
120
121
122
123
124
125
# File 'lib/traffic_mansion/queue.rb', line 117

def update_from_parent
  parent_event = TrafficMansion::Queue.find_by_id parent_event_id
  if parent_event && parent_event.processed
    self.data["visit_id"] = parent_event.data["visit_id"].present? ? parent_event.data["visit_id"] : parent_event.result["visit_id"]
    save!
  else
    raise "Parent was not processed yet!"
  end
end

#update_parent_event_idObject



107
108
109
110
111
112
113
114
115
# File 'lib/traffic_mansion/queue.rb', line 107

def update_parent_event_id
  parent_event = TrafficMansion::Queue.find_parent_by_user self.user_id
  if parent_event
    self.parent_event_id = parent_event.id
    save!
  else
    raise "Could not find a parent event!"
  end
end