Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.25 KB | None | 0 0
  1. require 'json'
  2. require 'awesome_print'
  3. require 'open-uri'
  4. require 'mysql2'
  5. require 'net/ssh/gateway'
  6.  
  7. client = Mysql2::Client.new(
  8.     host: "somedomain.com",
  9.     username: 'username',
  10.     password: 'password',
  11.     database: 'db_name',
  12.     port: '3306'
  13. )
  14.  
  15. #Returns source_name. external_tracking_id for all active sources of chosen PP
  16. def get_active_sources(client, pp_id)
  17.   response = client.query("SELECT s.code, ptm.external_tracking_id
  18.    FROM runashop_pp.portal_tracking_map ptm
  19.    INNER JOIN runashop_pp.priceportal_sources pps ON ptm.source_id = pps.source_id
  20.    INNER JOIN runashop_pp.sources s on ptm.source_id = s.id
  21.    WHERE ptm.portal_id = #{pp_id}
  22.    AND pps.proportion != 0
  23.    AND pps.portal_id = #{pp_id};")
  24.  
  25.   hash = Hash.new
  26.   response.each{|row|
  27.     hash.store(row['code'],row['external_tracking_id'])
  28.   }
  29.   hash
  30. end
  31.  
  32. def insert(client, url, error)
  33.   client.query("INSERT INTO runashop_qa.external_trackings_errors (url, error)
  34.                VALUES ('#{url}', '#{error}');")
  35. end
  36.  
  37. #returns id, channel_value for active test projects
  38. active_test_projects = client.query("SELECT p.id, d.channel_value
  39.                                    FROM runashop_pp.portals p
  40.                                    INNER JOIN runashop_pp.domains d on p.id = d.portal_id
  41.                                    WHERE p.status = 'active'
  42.                                    AND p.name like '%.testpp.com'
  43.                                    AND p.name != 'berlin.testpp.com';")
  44.  
  45. def check_ext_id(project)
  46.   begin
  47.  
  48.     client = Mysql2::Client.new(
  49.         host: "somedomain.com",
  50.         username: 'username',
  51.         password: 'password',
  52.         database: 'db_name',
  53.         port: '3306'
  54.     )
  55.  
  56.     active_sources = get_active_sources(client, project['id'])
  57.     domain = project['channel_value']
  58.     url = 'http://pp2.' + domain + '/ipad%20red?wingman=on&format=json'
  59.     json = open(url, 'X-Requested-With' => 'XMLHttpRequest').read
  60.     parsed = JSON.parse(json)
  61.     outclick_links = parsed['debug_info']['out_clicks']
  62.     outclick_links.each{|outclick_src_name, outclick_link|
  63.       active_sources.each{|source_name, source_external_id|
  64.         if outclick_src_name == source_name
  65.           if outclick_link
  66.             if outclick_link.index(source_external_id)
  67.               puts "#{domain} - #{source_name} - #{source_external_id} - PASS"
  68.             end
  69.           else
  70.             puts "#{domain} - Outclick link for source #{source_name} is empty"
  71.             insert(client, domain, "External tracking id was not found for source #{source_name} in the outclick url")
  72.           end
  73.           active_sources.delete(outclick_src_name)
  74.         end
  75.       }
  76.     }
  77.     if active_sources.empty?
  78.       #do nothing all sources have outclicks
  79.     else
  80.       failed_sources = active_sources.keys.join(',')
  81.       puts "#{domain} - #{failed_sources} - FAIL"
  82.       insert(client, domain, "Outclick section didnt contain #{failed_sources}")
  83.     end
  84.   rescue Exception => ex
  85.     puts "#{domain} - #{ex} - FAIL"
  86.     insert(client, domain, ex)
  87.   ensure
  88.     client.close if client
  89.   end
  90. end
  91.  
  92. threads = []
  93.  
  94. active_test_projects.each{|project|
  95.   threads.push Thread.new{check_ext_id(project)}
  96. }
  97.  
  98. threads.each(&:join)
  99. client.close if client
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement