From 29eade9eb70a20388cd62388fd810d972d4b9863 Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Wed, 3 Aug 2016 09:29:12 -0400 Subject: [PATCH 01/11] Fixed undefined call & variable --- src/adapters/analytics/aol.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 24b1080d2ba..8bd4cb395d8 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -29,6 +29,8 @@ let auctionSchemaTemplate = template `;pubadid=${'pubadid'};hbauctionid=${'hbauc let winSchemaTemplate = template `;hbauctioneventts=${'hbauctioneventts'};pubadid=${'pubadid'};hbauctionid=${'hbauctionid'};hbwinner=${'hbwinner'};pubcpm=${'pubcpm'}`; let bidderSchemaTemplate = template `;hbbidder=${'hbbidder'};hbbid=${'hbbid'};hbstatus=${'hbstatus'};hbtime=${'hbtime'}`; +var _timedOutBidders = []; + export default utils.extend(adapter({ url: '', analyticsType @@ -46,7 +48,7 @@ export default utils.extend(adapter({ if (eventType === BID_TIMEOUT) { _timedOutBidders = args.bidderCode; } else { - _enqueue.call(this, { eventType, args }); + this.enqueue({ eventType, args }); } }); From e8d34bf336bc42aa12f65adc17070cfdd15f6d45 Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Wed, 3 Aug 2016 09:30:43 -0400 Subject: [PATCH 02/11] Changed AOL analytics to use bidder ids instead of string codes --- src/adapters/analytics/aol.js | 13 +++++++++---- src/adapters/analytics/aolPartnersIds.json | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 src/adapters/analytics/aolPartnersIds.json diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 8bd4cb395d8..726272b84ce 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -7,6 +7,7 @@ import { ajax } from 'src/ajax'; import CONSTANTS from 'src/constants.json'; import adapter from 'AnalyticsAdapter'; +import BIDDERS_IDS_MAP from './aolPartnersIds.json'; const events = require('src/events'); const utils = require('../../utils'); @@ -64,7 +65,7 @@ export default utils.extend(adapter({ track({ eventType, args }) { switch (eventType) { case AUCTION_COMPLETED: - let bidsReceived = args.bidResponses; + let bidsReceived = args.bidsReceived; let adUnitsConf = args.adUnits; for (let bid of bidsReceived) { @@ -145,7 +146,7 @@ export default utils.extend(adapter({ return { pubadid: '', // Is this the ad unit code? hbauctionid: generateAuctionId(aolParams.placement), - hbwinner: adUnit.winner.bidderCode || '', + hbwinner: getBidderId(adUnit.winner.bidderCode), hbprice: adUnit.winner.cpm || '', hbcur: '', pubapi: '' @@ -158,14 +159,14 @@ export default utils.extend(adapter({ hbauctioneventts: auctionParams.hbauctioneventts, pubadid: '', // Is this the ad unit code? hbauctionid: auctionParams.hbauctionid, - hbwinner: adUnit.winner.bidderCode || '', + hbwinner: getBidderId(adUnit.winner.bidderCode), pubcpm: adUnit.winner.cpm } }, getBidderSchema(bid) { return { - hbbidder: bid.bidderCode || '', + hbbidder: getBidderId(bid.bidderCode), hbbid: bid.cpm || '', hbstatus: (bid.getStatusCode) ? bid.getStatusCode() : '', hbtime: bid.timeToRespond || '' @@ -220,3 +221,7 @@ function generateAuctionId(placementId) { placementId + Math.floor(Math.random() * 100000); } + +function getBidderId(bidderCode) { + return BIDDERS_IDS_MAP[bidderCode] || -1; +} diff --git a/src/adapters/analytics/aolPartnersIds.json b/src/adapters/analytics/aolPartnersIds.json new file mode 100644 index 00000000000..b1b91f49223 --- /dev/null +++ b/src/adapters/analytics/aolPartnersIds.json @@ -0,0 +1,17 @@ +{ + "aol": 1, + "adform": 2, + "appnexus": 3, + "brealtime": 4, + "index": 5, + "nginad": 6, + "openx": 7, + "pubmatic": 8, + "pulsepoint": 9, + "rubicon": 10, + "sonobi": 11, + "sovrn": 12, + "springserve": 13, + "triplelift": 14, + "yieldbot": 15 +} \ No newline at end of file From e044c0348769ac7a32c1c9c57e557b6346db93c5 Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Wed, 3 Aug 2016 09:36:15 -0400 Subject: [PATCH 03/11] Fixed CORS requests in AOL analytics --- src/adapters/analytics/aol.js | 4 ++-- src/ajax.js | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 726272b84ce..626f7aa2341 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -25,7 +25,7 @@ const EVENTS = { let adUnits = {}; -let baseSchemaTemplate = template `${'protocol'}://${'host'}${('port') ? `:${'port'}` : ``}/hbevent/${'tagversion'}/${'network'}/${ ('subnetwork')?`${'subnetwork'}/`:``}${'placement'}/${'site'}/${'eventid'}/hbeventts=${'hbeventts'}`; +let baseSchemaTemplate = template `${'protocol'}://${'host'}${('port') ? `:${'port'}` : ``}/hbevent/${'tagversion'}/${'network'}/${ ('subnetwork')?`${'subnetwork'}/`:``}${'placement'}/${'site'}/${'eventid'}/hbeventts=${'hbeventts'};cors=yes`; let auctionSchemaTemplate = template `;pubadid=${'pubadid'};hbauctionid=${'hbauctionid'};hbwinner=${'hbwinner'};hbprice=${'hbprice'};${ ('hbcur') ? `hbcur=${'hbcur'};` : ``}pubapi=${'pubapi'}`; let winSchemaTemplate = template `;hbauctioneventts=${'hbauctioneventts'};pubadid=${'pubadid'};hbauctionid=${'hbauctionid'};hbwinner=${'hbwinner'};pubcpm=${'pubcpm'}`; let bidderSchemaTemplate = template `;hbbidder=${'hbbidder'};hbbid=${'hbbid'};hbstatus=${'hbstatus'};hbtime=${'hbtime'}`; @@ -122,7 +122,7 @@ export default utils.extend(adapter({ }, reportEvent(url) { - ajax(url); + ajax(url, undefined, undefined, undefined, { skipDefaultHeaders: true }); }, getBaseSchema(eventId, adUnit) { diff --git a/src/ajax.js b/src/ajax.js index 782c9bcf7c0..fa7d7bd0b37 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -8,9 +8,12 @@ * @param callback object callback * @param data mixed data * @param x null Ajax request + * @param options + * @param options.skipDefaultHeaders set to true to skip adding default HTTP headers */ -export const ajax = function ajax(url, callback, data, x = null) { +export const ajax = function ajax(url, callback, data, x = null, + options = { skipDefaultHeaders: false }) { try { if (window.XMLHttpRequest) { x = new window.XMLHttpRequest('MSXML2.XMLHTTP.3.0'); @@ -22,8 +25,10 @@ export const ajax = function ajax(url, callback, data, x = null) { //x = new (window.XMLHttpRequest || window.ActiveXObject)('MSXML2.XMLHTTP.3.0'); x.open(data ? 'POST' : 'GET', url, 1); - x.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - x.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); + if (!options.skipDefaultHeaders) { + x.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + x.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); + } //x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); x.onreadystatechange = function () { From 1b1d27f7e9c766bd1510b0a83af031ef51d080d2 Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Wed, 3 Aug 2016 14:44:02 -0400 Subject: [PATCH 04/11] Fixed required fields for AOL analytics requests --- src/adapters/analytics/aol.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 626f7aa2341..5b058e996bb 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -144,24 +144,24 @@ export default utils.extend(adapter({ getAuctionSchema(adUnit) { let aolParams = adUnit.aolParams; return { - pubadid: '', // Is this the ad unit code? + pubadid: adUnit.code, hbauctionid: generateAuctionId(aolParams.placement), hbwinner: getBidderId(adUnit.winner.bidderCode), hbprice: adUnit.winner.cpm || '', hbcur: '', - pubapi: '' - } + pubapi: aolParams.id + }; }, getWinSchema(adUnit) { let auctionParams = adUnit.auctionParams; return { + pubadid: adUnit.code, hbauctioneventts: auctionParams.hbauctioneventts, - pubadid: '', // Is this the ad unit code? hbauctionid: auctionParams.hbauctionid, hbwinner: getBidderId(adUnit.winner.bidderCode), pubcpm: adUnit.winner.cpm - } + }; }, getBidderSchema(bid) { From 3365a22af70eaf6aa6d7c6cae58fe35906a1d51e Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Thu, 4 Aug 2016 12:53:41 -0400 Subject: [PATCH 05/11] Fixed site requet parameter in AOL analytics --- src/adapters/analytics/aol.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 5b058e996bb..74ab775468f 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -134,8 +134,8 @@ export default utils.extend(adapter({ tagversion: '3.0', network: aolParams.network || '', subnetwork: aolParams.subnetwork || '', - placement: aolParams.placement , - site: aolParams.site || '', + placement: aolParams.placement, + site: aolParams.pageid || 0, eventid: eventId, hbeventts: Date.now() }; From 25e51e229d8388f7bfd155c5a83b592decdcecba Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Thu, 4 Aug 2016 13:08:38 -0400 Subject: [PATCH 06/11] Fixed hbstatus request parameter in AOL analytics --- src/adapters/analytics/aol.js | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 74ab775468f..87f48185224 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -168,7 +168,7 @@ export default utils.extend(adapter({ return { hbbidder: getBidderId(bid.bidderCode), hbbid: bid.cpm || '', - hbstatus: (bid.getStatusCode) ? bid.getStatusCode() : '', + hbstatus: getStatusCode(bid), hbtime: bid.timeToRespond || '' }; }, @@ -205,7 +205,7 @@ export default utils.extend(adapter({ }); function template(strings, ...keys) { - return (function(...values) { + return function(...values) { let dict = values[values.length - 1] || {}; let result = [strings[0]]; keys.forEach(function(key, i) { @@ -213,7 +213,7 @@ function template(strings, ...keys) { result.push(value, strings[i + 1]); }); return result.join(''); - }); + }; } function generateAuctionId(placementId) { @@ -225,3 +225,29 @@ function generateAuctionId(placementId) { function getBidderId(bidderCode) { return BIDDERS_IDS_MAP[bidderCode] || -1; } + +function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} + +function getStatusCode(bid) { + if (!isNumber(bid.cpm)) { + return 2; // VALID_OBF_BID + } + + var prebidStatus = (bid.getStatusCode) ? bid.getStatusCode() : null; + switch (prebidStatus) { + case null: + return -1; // INVALID + case 0: + return -1; // INVALID + case 1: + return 0; // VALID_BID + case 2: + return 1; // VALID_NO_BID + case 3: + return 3; // ERROR_TIMEOUT + default: + return -1; // INVALID + } +} From 68ef02e3cfcb3c6de5c65226473b9c7b13051d3a Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Thu, 4 Aug 2016 17:03:16 -0400 Subject: [PATCH 07/11] Updated list of bidder ids for AOL analytics --- src/adapters/analytics/aolPartnersIds.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/adapters/analytics/aolPartnersIds.json b/src/adapters/analytics/aolPartnersIds.json index b1b91f49223..7433d99d5f2 100644 --- a/src/adapters/analytics/aolPartnersIds.json +++ b/src/adapters/analytics/aolPartnersIds.json @@ -13,5 +13,13 @@ "sovrn": 12, "springserve": 13, "triplelift": 14, - "yieldbot": 15 -} \ No newline at end of file + "yieldbot": 15, + "aardvark": 16, + "brightcom": 17, + "wideorbit": 18, + "admedia": 19, + "pagescience": 20, + "sekindo": 21, + "kruxlink": 22, + "adequant": 23 +} From f0afd7ab18ce8233e5976a5956ca297a44333273 Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Fri, 5 Aug 2016 09:28:22 -0400 Subject: [PATCH 08/11] Fixed pubadid parameter in AOL analytics requests --- src/adapters/analytics/aol.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 87f48185224..6d76fcf932b 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -72,6 +72,7 @@ export default utils.extend(adapter({ let adUnit = adUnits[bid.adUnitCode]; if (!adUnit) { adUnit = { + code: bid.adUnitCode, bids: [], winner: { cpm: 0 @@ -146,7 +147,7 @@ export default utils.extend(adapter({ return { pubadid: adUnit.code, hbauctionid: generateAuctionId(aolParams.placement), - hbwinner: getBidderId(adUnit.winner.bidderCode), + hbwinner: getBidderId(adUnit.winner.bidder), hbprice: adUnit.winner.cpm || '', hbcur: '', pubapi: aolParams.id @@ -159,14 +160,14 @@ export default utils.extend(adapter({ pubadid: adUnit.code, hbauctioneventts: auctionParams.hbauctioneventts, hbauctionid: auctionParams.hbauctionid, - hbwinner: getBidderId(adUnit.winner.bidderCode), + hbwinner: getBidderId(adUnit.winner.bidder), pubcpm: adUnit.winner.cpm }; }, getBidderSchema(bid) { return { - hbbidder: getBidderId(bid.bidderCode), + hbbidder: getBidderId(bid.bidder), hbbid: bid.cpm || '', hbstatus: getStatusCode(bid), hbtime: bid.timeToRespond || '' From 6cf1573b2071ad958bca89047b0bb95911d87a23 Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Fri, 5 Aug 2016 10:46:24 -0400 Subject: [PATCH 09/11] Fixed paramters for AOL anaylitics to use seconds - fixed hbevents & hbauctionevents parameters --- src/adapters/analytics/aol.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index 6d76fcf932b..a55d424b1d7 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -138,7 +138,7 @@ export default utils.extend(adapter({ placement: aolParams.placement, site: aolParams.pageid || 0, eventid: eventId, - hbeventts: Date.now() + hbeventts: Math.floor(Date.now() / 1000) // Unix timestamp in seconds. }; }, From 36fa7a1ebacd976cc31beb21039af231752a7650 Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Mon, 8 Aug 2016 08:16:37 -0400 Subject: [PATCH 10/11] Replaced AJAX calls with pixels in AOL analytics --- src/adapters/analytics/aol.js | 3 ++- src/ajax.js | 11 +++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index a55d424b1d7..a733ec8d950 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -123,7 +123,8 @@ export default utils.extend(adapter({ }, reportEvent(url) { - ajax(url, undefined, undefined, undefined, { skipDefaultHeaders: true }); + var pixel = new Image(); + pixel.src = url; }, getBaseSchema(eventId, adUnit) { diff --git a/src/ajax.js b/src/ajax.js index fa7d7bd0b37..782c9bcf7c0 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -8,12 +8,9 @@ * @param callback object callback * @param data mixed data * @param x null Ajax request - * @param options - * @param options.skipDefaultHeaders set to true to skip adding default HTTP headers */ -export const ajax = function ajax(url, callback, data, x = null, - options = { skipDefaultHeaders: false }) { +export const ajax = function ajax(url, callback, data, x = null) { try { if (window.XMLHttpRequest) { x = new window.XMLHttpRequest('MSXML2.XMLHTTP.3.0'); @@ -25,10 +22,8 @@ export const ajax = function ajax(url, callback, data, x = null, //x = new (window.XMLHttpRequest || window.ActiveXObject)('MSXML2.XMLHTTP.3.0'); x.open(data ? 'POST' : 'GET', url, 1); - if (!options.skipDefaultHeaders) { - x.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - x.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - } + x.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + x.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); //x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); x.onreadystatechange = function () { From abfa80f5005229795b00b79bb343c12756c054bf Mon Sep 17 00:00:00 2001 From: Marian Rusnak Date: Mon, 8 Aug 2016 09:58:16 -0400 Subject: [PATCH 11/11] Auction id in requests in AOL analytics limited to 19 digits --- src/adapters/analytics/aol.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/adapters/analytics/aol.js b/src/adapters/analytics/aol.js index a733ec8d950..3376815cae5 100644 --- a/src/adapters/analytics/aol.js +++ b/src/adapters/analytics/aol.js @@ -219,9 +219,14 @@ function template(strings, ...keys) { } function generateAuctionId(placementId) { - return new Date().getTime().toString().substr(-7) + + return ( + // 7 digits from the current time (milliseconds within an hour). + new Date().getTime().toString().substr(-7) + + // Full placement id, 7 digits at the time of development. placementId + - Math.floor(Math.random() * 100000); + // Random number, 5 digits at the time of development. + Math.floor(Math.random() * 100000) + ).substr(0, 19); // Limit to 19 digits so it doesn't exceed the LONG type. } function getBidderId(bidderCode) {