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



85
86
87
88
89
90
# File 'lib/traffic_mansion/queue.rb', line 85

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



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/traffic_mansion/queue.rb', line 56

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



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/traffic_mansion/queue.rb', line 69

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



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/traffic_mansion/queue.rb', line 43

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



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

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
  }
  event = TrafficMansion::Queue::add "signup", parent_event_id, event_data
  TrafficMansion::Queue::update_user_id_for_visit parent_event_id, user_id
  event
end

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



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

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_not_processedObject



111
112
113
# File 'lib/traffic_mansion/queue.rb', line 111

def self.find_not_processed
  where(:processed => false)
end

.find_parent_by_user(user_id) ⇒ Object



92
93
94
# File 'lib/traffic_mansion/queue.rb', line 92

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

.find_user_tracked_data(user_id) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/traffic_mansion/queue.rb', line 103

def self.find_user_tracked_data user_id
  visit = TrafficMansion::Queue.where(:type => "visit", :user_id => user_id, :processed => true).first
  if visit && visit.result.present?
    return visit.result
  end
  nil
end

.update_user_id_for_visit(visit_event_id, user_id) ⇒ Object



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

def self.update_user_id_for_visit visit_event_id, user_id
  visit = TrafficMansion::Queue.where(:id => visit_event_id).first
  if visit
    visit.set :user_id, user_id
  end
end

Instance Method Details

#parent?Boolean

Returns:

  • (Boolean)


125
126
127
# File 'lib/traffic_mansion/queue.rb', line 125

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

#processObject



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

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



157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/traffic_mansion/queue.rb', line 157

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

#update_error(error) ⇒ Object



170
171
172
# File 'lib/traffic_mansion/queue.rb', line 170

def update_error error
  self.set :last_error, error.to_s
end

#update_from_parentObject



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/traffic_mansion/queue.rb', line 141

def update_from_parent
  parent_event = TrafficMansion::Queue.find_by_id parent_event_id
  if !parent_event
    error = "Could not find a parent event!"
    raise error
  end
  if 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
    error = "Parent was not processed yet!"
    update_error error
    raise error
  end
end

#update_parent_event_idObject



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

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
    error = "Could not find a parent event!"
    update_error error
    raise error
  end
end