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



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

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_in 1.minute, event.id
  event
end

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



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

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.to_s,
    "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



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

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.to_s,
    "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



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

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.to_s,
    "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



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

def self. parent_event_id, user_id, remote_ip, referer, timestamp = Time.now.to_i
  event_data = {
    "user_id"      => user_id.to_s,
    "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.to_s
  event
end

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



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

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



113
114
115
# File 'lib/traffic_mansion/queue.rb', line 113

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

.find_parent_by_user(user_id) ⇒ Object



94
95
96
# File 'lib/traffic_mansion/queue.rb', line 94

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



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

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

.update_user_id_for_visit(visit_event_id, user_id) ⇒ Object



98
99
100
101
102
103
# File 'lib/traffic_mansion/queue.rb', line 98

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

Instance Method Details

#parent?Boolean

Returns:

  • (Boolean)


127
128
129
# File 'lib/traffic_mansion/queue.rb', line 127

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

#processObject



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

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



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

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



172
173
174
# File 'lib/traffic_mansion/queue.rb', line 172

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

#update_from_parentObject



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

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



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

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