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



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

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



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

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



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

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



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

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
# 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
  }
  TrafficMansion::Queue::add "signup", parent_event_id, event_data
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_parent_by_user(user_id) ⇒ Object



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

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)


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

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

#processObject



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

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



136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/traffic_mansion/queue.rb', line 136

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



149
150
151
# File 'lib/traffic_mansion/queue.rb', line 149

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

#update_from_parentObject



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/traffic_mansion/queue.rb', line 120

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



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

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