Skip to content

Commit

Permalink
adxcgAnalyticsAdapter -cleaning up json data sent. (merged multiple l…
Browse files Browse the repository at this point in the history
…ocal commits) (#2909)
  • Loading branch information
adxcgcom authored and Rich Snapp committed Jul 31, 2018
1 parent db38f7b commit 7d008b4
Show file tree
Hide file tree
Showing 3 changed files with 280 additions and 92 deletions.
165 changes: 118 additions & 47 deletions modules/adxcgAnalyticsAdapter.js
@@ -1,4 +1,4 @@
import {ajax} from 'src/ajax';
import { ajax } from 'src/ajax';
import adapter from 'src/AnalyticsAdapter';
import adaptermanager from 'src/adaptermanager';
import CONSTANTS from 'src/constants.json';
Expand All @@ -7,83 +7,154 @@ import * as utils from 'src/utils';

const emptyUrl = '';
const analyticsType = 'endpoint';
const adxcgAnalyticsVersion = 'v1.05';

let initOptions;
let auctionTimestamp;
let events = {
bidRequests: [],
bidResponses: []
};
const adxcgAnalyticsVersion = 'v2.01';

var adxcgAnalyticsAdapter = Object.assign(adapter(
{
emptyUrl,
analyticsType
}), {
track({eventType, args}) {
if (typeof args !== 'undefined') {
if (eventType === CONSTANTS.EVENTS.BID_TIMEOUT) {
events.bidTimeout = args.map(item => item.bidder).filter(utils.uniques);
} else if (eventType === CONSTANTS.EVENTS.AUCTION_INIT) {
events.auctionInit = args;
auctionTimestamp = args.timestamp;
} else if (eventType === CONSTANTS.EVENTS.BID_REQUESTED) {
events.bidRequests.push(args);
} else if (eventType === CONSTANTS.EVENTS.BID_RESPONSE) {
events.bidResponses.push(mapBidResponse(args));
} else if (eventType === CONSTANTS.EVENTS.BID_WON) {
send({
bidWon: mapBidResponse(args)
});
}
}

if (eventType === CONSTANTS.EVENTS.AUCTION_END) {
send(events);
track ({eventType, args}) {
switch (eventType) {
case CONSTANTS.EVENTS.AUCTION_INIT:
adxcgAnalyticsAdapter.context.events.auctionInit = mapAuctionInit(args);
adxcgAnalyticsAdapter.context.auctionTimestamp = args.timestamp;
break;
case CONSTANTS.EVENTS.BID_REQUESTED:
adxcgAnalyticsAdapter.context.auctionId = args.auctionId;
adxcgAnalyticsAdapter.context.events.bidRequests.push(mapBidRequested(args));
break;
case CONSTANTS.EVENTS.BID_ADJUSTMENT:
break;
case CONSTANTS.EVENTS.BID_TIMEOUT:
adxcgAnalyticsAdapter.context.events.bidTimeout = args.map(item => item.bidder).filter(utils.uniques);
break;
case CONSTANTS.EVENTS.BIDDER_DONE:
break;
case CONSTANTS.EVENTS.BID_RESPONSE:
adxcgAnalyticsAdapter.context.events.bidResponses.push(mapBidResponse(args, eventType));
break;
case CONSTANTS.EVENTS.BID_WON:
let outData2 = {bidWons: mapBidWon(args)};
send(outData2);
break;
case CONSTANTS.EVENTS.AUCTION_END:
send(adxcgAnalyticsAdapter.context.events);
break;
}
}

});

function mapBidResponse(bidResponse) {
function mapAuctionInit (auctionInit) {
return {
timeout: auctionInit.timeout
};
}

function mapBidRequested (bidRequests) {
return {
bidderCode: bidRequests.bidderCode,
time: bidRequests.start,
bids: bidRequests.bids.map(function (bid) {
return {
transactionId: bid.transactionId,
adUnitCode: bid.adUnitCode,
bidId: bid.bidId,
start: bid.startTime,
sizes: utils.parseSizesInput(bid.sizes).toString(),
params: bid.params
};
}),
};
}

function mapBidResponse (bidResponse, eventType) {
return {
bidderCode: bidResponse.bidder,
transactionId: bidResponse.transactionId,
adUnitCode: bidResponse.adUnitCode,
statusMessage: bidResponse.statusMessage,
bidderCode: bidResponse.bidderCode,
adId: bidResponse.adId,
mediaType: bidResponse.mediaType,
creative_id: bidResponse.creative_id,
width: bidResponse.width,
height: bidResponse.height,
renderedSize: bidResponse.size,
cpm: bidResponse.cpm,
timeToRespond: bidResponse.timeToRespond
currency: bidResponse.currency,
netRevenue: bidResponse.netRevenue,
timeToRespond: bidResponse.timeToRespond,
bidId: eventType === CONSTANTS.EVENTS.BID_TIMEOUT ? bidResponse.bidId : bidResponse.requestId,
dealId: bidResponse.dealId,
status: bidResponse.status,
creativeId: bidResponse.creativeId.toString()
};
}

function send(data) {
data.initOptions = initOptions;
data.auctionTimestamp = auctionTimestamp;
function mapBidWon (bidResponse) {
return [{
bidderCode: bidResponse.bidder,
adUnitCode: bidResponse.adUnitCode,
statusMessage: bidResponse.statusMessage,
mediaType: bidResponse.mediaType,
renderedSize: bidResponse.size,
cpm: bidResponse.cpm,
currency: bidResponse.currency,
netRevenue: bidResponse.netRevenue,
timeToRespond: bidResponse.timeToRespond,
bidId: bidResponse.requestId,
dealId: bidResponse.dealId,
status: bidResponse.status,
creativeId: bidResponse.creativeId.toString()
}];
}

function send (data) {
let location = utils.getTopWindowLocation();
let secure = location.protocol == 'https:';
let secure = location.protocol === 'https:';

let adxcgAnalyticsRequestUrl = url.format({
protocol: secure ? 'https' : 'http',
hostname: secure ? 'hbarxs.adxcg.net' : 'hbarx.adxcg.net',
pathname: '/pbrx',
hostname: adxcgAnalyticsAdapter.context.host,
pathname: '/pbrx/v2',
search: {
auctionTimestamp: auctionTimestamp,
adxcgAnalyticsVersion: adxcgAnalyticsVersion,
prebidVersion: $$PREBID_GLOBAL$$.version
pid: adxcgAnalyticsAdapter.context.initOptions.publisherId,
aid: adxcgAnalyticsAdapter.context.auctionId,
ats: adxcgAnalyticsAdapter.context.auctionTimestamp,
aav: adxcgAnalyticsVersion,
iob: intersectionObserverAvailable(window) ? '1' : '0',
pbv: $$PREBID_GLOBAL$$.version,
sz: window.screen.width + 'x' + window.screen.height
}
});

ajax(adxcgAnalyticsRequestUrl, undefined, JSON.stringify(data), {method: 'POST'});
ajax(adxcgAnalyticsRequestUrl, undefined, JSON.stringify(data), {
contentType: 'text/plain',
method: 'POST',
withCredentials: true
});
}

function intersectionObserverAvailable (win) {
return win && win.IntersectionObserver && win.IntersectionObserverEntry &&
win.IntersectionObserverEntry.prototype && 'intersectionRatio' in win.IntersectionObserverEntry.prototype;
}

adxcgAnalyticsAdapter.context = {};
adxcgAnalyticsAdapter.originEnableAnalytics = adxcgAnalyticsAdapter.enableAnalytics;
adxcgAnalyticsAdapter.enableAnalytics = function (config) {
initOptions = config.options;
if (!config.options.publisherId) {
utils.logError('PublisherId option is not defined. Analytics won\'t work');
return;
}

let secure = location.protocol === 'https:';
adxcgAnalyticsAdapter.context = {
events: {
bidRequests: [],
bidResponses: []
},
initOptions: config.options,
host: config.options.host || (secure ? 'hbarxs.adxcg.net' : 'hbarx.adxcg.net')
};

adxcgAnalyticsAdapter.originEnableAnalytics(config);
};

Expand Down
23 changes: 23 additions & 0 deletions modules/adxcgAnalyticsAdapter.md
@@ -0,0 +1,23 @@
# Overview
Module Name: adxcg Analytics Adapter

Module Type: Analytics Adapter

Maintainer: info@adxcg.com

# Description

Analytics adapter for Adxcg. We are an advanced programmatic solutions company.
https://www.adxcg.com/

# Test Parameters

```
{
provider: 'adxcg',
options : {
publisherId: ["42"]
}
}
```

0 comments on commit 7d008b4

Please sign in to comment.