Guest User

Untitled

a guest
Jul 22nd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. require 'restclient'
  2. require 'timeout'
  3. require 'carrot'
  4.  
  5. class Tracker
  6. def initialize(app)
  7. @app = app
  8.  
  9. @carrot = Carrot.new()
  10. @queue = @carrot.queue('track')
  11. end
  12.  
  13. def call(env)
  14. now = Time.now
  15.  
  16. track_id = nil
  17.  
  18. if c = env['HTTP_COOKIE'] and c =~ /_et=([a-z0-9]{32})/
  19. track_id = $1
  20. else
  21. track_id = Digest::MD5.hexdigest(["erovation.track", now.to_f, "omfg", rand(), rand()].join(":"))
  22. end
  23.  
  24. status, headers, body = @app.call(env)
  25.  
  26. track = {
  27. :id => track_id,
  28. :host => env['SERVER_NAME'],
  29. :remote_addr => env['REMOTE_ADDR'],
  30. :uri => env['REQUEST_URI'],
  31. :ref => env['HTTP_REFERER'],
  32. :status => status,
  33. :t => now.to_i,
  34. :uid => env['TRACK_UID'],
  35. :rid => env['TRACK_RID'],
  36. :info => env['TRACK_INFO']
  37. }
  38.  
  39. @queue.publish(track.to_json) rescue nil
  40.  
  41. res = Rack::Response.new(body, status, headers)
  42. res.set_cookie('_et', { :value => track_id, :path => "/" })
  43. res.finish
  44. end
  45. end
Add Comment
Please, Sign In to add comment