Skip to content

Commit

Permalink
PubMatic Analytics Adapter: Moving slot level parameters to root leve…
Browse files Browse the repository at this point in the history
…l and adding few parameters to log in tracker (prebid#12665)

* Moved floors fields at root level from slot level

* Added fv value in logger and tracker

* Added safecheck for null object

* Reading frv,fv value from bidResponse floorData instead of auctionCache

* targeting keys issue when sendAllBids is true

* Removed unused function
  • Loading branch information
pm-priyanka-deshmane authored Jan 21, 2025
1 parent 7eb00b5 commit 9355e47
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 55 deletions.
80 changes: 61 additions & 19 deletions modules/pubmaticAnalyticsAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,31 @@ function isOWPubmaticBid(adapterName) {
})
}

function getFloorsCommonField (floorData) {
if (!floorData) return;
const { location, fetchStatus, floorProvider, modelVersion } = floorData;
return {
ffs: {
[FLOOR_VALUES.SUCCESS]: 1,
[FLOOR_VALUES.ERROR]: 2,
[FLOOR_VALUES.TIMEOUT]: 4,
undefined: 0
}[fetchStatus],
fsrc: {
[FLOOR_VALUES.FETCH]: 2,
[FLOOR_VALUES.NO_DATA]: 0,
[FLOOR_VALUES.AD_UNIT]: 1,
[FLOOR_VALUES.SET_CONFIG]: 1
}[location],
fp: floorProvider,
mv: modelVersion
}
}

function getFloorType(floorResponseData) {
return floorResponseData ? (floorResponseData.enforcements.enforceJS == false ? 0 : 1) : undefined;
}

function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid, e) {
highestBid = (highestBid && highestBid.length > 0) ? highestBid[0] : null;
return Object.keys(adUnit.bids).reduce(function(partnerBids, bidId) {
Expand Down Expand Up @@ -325,6 +350,7 @@ function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid, e) {
'ocpm': bid.bidResponse ? (bid.bidResponse.originalCpm || 0) : 0,
'ocry': bid.bidResponse ? (bid.bidResponse.originalCurrency || CURRENCY_USD) : CURRENCY_USD,
'frv': bid.bidResponse ? bid.bidResponse.floorData?.floorRuleValue : undefined,
'fv': bid.bidResponse ? bid.bidResponse.floorData?.floorValue : undefined,
'md': bid.bidResponse ? getMetadata(bid.bidResponse.meta) : undefined,
'pb': pg || undefined
});
Expand Down Expand Up @@ -403,9 +429,22 @@ function executeBidsLoggerCall(e, highestCpmBids) {
outputObj['tgid'] = getTgId();
outputObj['pbv'] = '$prebid.version$' || '-1';

if (floorData && floorFetchStatus) {
outputObj['fmv'] = floorData.floorRequestData ? floorData.floorRequestData.modelVersion || undefined : undefined;
outputObj['ft'] = floorData.floorResponseData ? (floorData.floorResponseData.enforcements.enforceJS == false ? 0 : 1) : undefined;
if (floorData) {
const floorRootValues = getFloorsCommonField(floorData?.floorRequestData);
if (floorRootValues) {
const { ffs, fsrc, fp, mv } = floorRootValues;
if (floorData?.floorRequestData) {
outputObj['ffs'] = ffs;
outputObj['fsrc'] = fsrc;
outputObj['fp'] = fp;
}
if (floorFetchStatus) {
outputObj['fmv'] = mv || undefined;
}
}
if (floorFetchStatus) {
outputObj['ft'] = getFloorType(floorData?.floorResponseData);
}
}

outputObj.s = Object.keys(auctionCache.adUnitCodes).reduce(function(slotsArray, adUnitId) {
Expand All @@ -421,22 +460,6 @@ function executeBidsLoggerCall(e, highestCpmBids) {
'fskp': floorData && floorFetchStatus ? (floorData.floorRequestData ? (floorData.floorRequestData.skipped == false ? 0 : 1) : undefined) : undefined,
'sid': generateUUID()
};
if (floorData?.floorRequestData) {
const { location, fetchStatus, floorProvider } = floorData?.floorRequestData;
slotObject.ffs = {
[FLOOR_VALUES.SUCCESS]: 1,
[FLOOR_VALUES.ERROR]: 2,
[FLOOR_VALUES.TIMEOUT]: 4,
undefined: 0
}[fetchStatus];
slotObject.fsrc = {
[FLOOR_VALUES.FETCH]: 2,
[FLOOR_VALUES.NO_DATA]: 2,
[FLOOR_VALUES.AD_UNIT]: 1,
[FLOOR_VALUES.SET_CONFIG]: 1
}[location];
slotObject.fp = floorProvider;
}
slotsArray.push(slotObject);
return slotsArray;
}, []);
Expand Down Expand Up @@ -509,6 +532,25 @@ function executeBidWonLoggerCall(auctionId, adUnitId) {
pixelURL += '&orig=' + enc(getDomainFromUrl(referrer));
pixelURL += '&ss=' + enc(isS2SBidder(winningBid.bidder));
(fskp != undefined) && (pixelURL += '&fskp=' + enc(fskp));
if (floorData) {
const floorRootValues = getFloorsCommonField(floorData.floorRequestData);
const { fsrc, fp, mv } = floorRootValues || {};
const params = { fsrc, fp, fmv: mv };
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined) {
pixelURL += `&${key}=${enc(value)}`;
}
});
const floorType = getFloorType(floorData.floorResponseData);
if (floorType !== undefined) {
pixelURL += '&ft=' + enc(floorType);
}
const floorRuleValue = winningBid?.bidResponse?.floorData?.floorRuleValue;
(floorRuleValue !== undefined) && (pixelURL += '&frv=' + enc(floorRuleValue));

const floorValue = winningBid?.bidResponse?.floorData?.floorValue;
(floorValue !== undefined) && (pixelURL += '&fv=' + enc(floorValue));
}
pixelURL += '&af=' + enc(winningBid.bidResponse ? (winningBid.bidResponse.mediaType || undefined) : undefined);

ajax(
Expand Down
65 changes: 29 additions & 36 deletions test/spec/modules/pubmaticAnalyticsAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -571,13 +571,13 @@ describe('pubmatic analytics adapter', function () {
expect(data.pbv).to.equal('$prebid.version$' || '-1');
expect(data.s).to.be.an('array');
expect(data.s.length).to.equal(2);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');
// slot 1
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
expect(data.s[0].fskp).to.equal(0);
expect(data.s[0].sid).not.to.be.undefined;
expect(data.s[0].ffs).to.equal(1);
expect(data.s[0].fsrc).to.equal(2);
expect(data.s[0].fp).to.equal('pubmatic');
expect(data.s[0].sz).to.deep.equal(['640x480']);
expect(data.s[0].ps).to.be.an('array');
expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
Expand Down Expand Up @@ -609,9 +609,6 @@ describe('pubmatic analytics adapter', function () {
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
expect(data.s[1].fskp).to.equal(0);
expect(data.s[1].sid).not.to.be.undefined;
expect(data.s[1].ffs).to.equal(1);
expect(data.s[1].fsrc).to.equal(2);
expect(data.s[1].fp).to.equal('pubmatic');
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
expect(data.s[1].ps).to.be.an('array');
expect(data.s[1].ps.length).to.equal(1);
Expand Down Expand Up @@ -789,14 +786,14 @@ describe('pubmatic analytics adapter', function () {
expect(data.pbv).to.equal('$prebid.version$' || '-1');
expect(data.s).to.be.an('array');
expect(data.s.length).to.equal(2);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');
expect(data.tgid).to.equal(0);
// slot 1
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
expect(data.s[0].fskp).to.equal(0);
expect(data.s[0].sid).not.to.be.undefined;
expect(data.s[0].ffs).to.equal(1);
expect(data.s[0].fsrc).to.equal(2);
expect(data.s[0].fp).to.equal('pubmatic');
expect(data.s[0].sz).to.deep.equal(['640x480']);
expect(data.s[0].ps).to.be.an('array');
expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
Expand Down Expand Up @@ -915,15 +912,13 @@ describe('pubmatic analytics adapter', function () {
let request = requests[1]; // logger is executed late, trackers execute first
let data = getLoggerJsonFromRequest(request.requestBody);
expect(data.tgid).to.equal(0);// test group id should be an INT between 0-15 else set to 0
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');

expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
expect(data.s[1].fskp).to.equal(0);

expect(data.s[1].sid).not.to.be.undefined;

expect(data.s[1].ffs).to.equal(1);
expect(data.s[1].fsrc).to.equal(2);
expect(data.s[1].fp).to.equal('pubmatic');

expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
expect(data.s[1].ps).to.be.an('array');
expect(data.s[1].ps.length).to.equal(1);
Expand Down Expand Up @@ -1004,12 +999,13 @@ describe('pubmatic analytics adapter', function () {
expect(requests.length).to.equal(1); // 1 logger and 0 win-tracker
let request = requests[0];
let data = getLoggerJsonFromRequest(request.requestBody);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');

expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
expect(data.s[1].fskp).to.equal(0);
expect(data.s[1].sid).not.to.be.undefined;
expect(data.s[1].ffs).to.equal(1);
expect(data.s[1].fsrc).to.equal(2);
expect(data.s[1].fp).to.equal('pubmatic');
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
expect(data.s[1].ps).to.be.an('array');
expect(data.s[1].ps.length).to.equal(1);
Expand Down Expand Up @@ -1119,12 +1115,12 @@ describe('pubmatic analytics adapter', function () {
let request = requests[2]; // logger is executed late, trackers execute first
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
let data = getLoggerJsonFromRequest(request.requestBody);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
expect(data.s[1].fskp).to.equal(0);
expect(data.s[1].sid).not.to.be.undefined;
expect(data.s[1].ffs).to.equal(1);
expect(data.s[1].fsrc).to.equal(2);
expect(data.s[1].fp).to.equal('pubmatic');
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
expect(data.s[1].ps).to.be.an('array');
expect(data.s[1].ps.length).to.equal(1);
Expand Down Expand Up @@ -1239,12 +1235,12 @@ describe('pubmatic analytics adapter', function () {
let request = requests[2]; // logger is executed late, trackers execute first
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
let data = getLoggerJsonFromRequest(request.requestBody);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
expect(data.s[1].fskp).to.equal(0);
expect(data.s[1].sid).not.to.be.undefined;
expect(data.s[1].ffs).to.equal(1);
expect(data.s[1].fsrc).to.equal(2);
expect(data.s[1].fp).to.equal('pubmatic');
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
expect(data.s[1].ps).to.be.an('array');
expect(data.s[1].ps.length).to.equal(1);
Expand Down Expand Up @@ -1357,14 +1353,14 @@ describe('pubmatic analytics adapter', function () {
let request = requests[1]; // logger is executed late, trackers execute first
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
let data = getLoggerJsonFromRequest(request.requestBody);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');

// slot 2
// Testing only for rejected bid as other scenarios will be covered under other TCs
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
expect(data.s[1].fskp).to.equal(0);
expect(data.s[1].ffs).to.equal(1);
expect(data.s[1].fsrc).to.equal(2);
expect(data.s[1].fp).to.equal('pubmatic');
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
expect(data.s[1].sid).not.to.be.undefined;
expect(data.s[1].ps).to.be.an('array');
Expand Down Expand Up @@ -1438,13 +1434,13 @@ describe('pubmatic analytics adapter', function () {
expect(data.ft).to.equal(1);
expect(data.s).to.be.an('array');
expect(data.s.length).to.equal(2);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');

// slot 1
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
expect(data.s[0].fskp).to.equal(0);
expect(data.s[0].ffs).to.equal(1);
expect(data.s[0].fsrc).to.equal(2);
expect(data.s[0].fp).to.equal('pubmatic');
expect(data.s[0].sz).to.deep.equal(['640x480']);
expect(data.s[0].sid).not.to.be.undefined;
expect(data.s[0].ps).to.be.an('array');
Expand Down Expand Up @@ -1477,9 +1473,6 @@ describe('pubmatic analytics adapter', function () {
// slot 2
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
expect(data.s[1].fskp).to.equal(0);
expect(data.s[1].ffs).to.equal(1);
expect(data.s[1].fsrc).to.equal(2);
expect(data.s[1].fp).to.equal('pubmatic');
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
expect(data.s[1].sid).not.to.be.undefined;
expect(data.s[1].ps).to.be.an('array');
Expand Down Expand Up @@ -1570,13 +1563,13 @@ describe('pubmatic analytics adapter', function () {
expect(data.ft).to.equal(1);
expect(data.s).to.be.an('array');
expect(data.s.length).to.equal(2);
expect(data.ffs).to.equal(1);
expect(data.fsrc).to.equal(2);
expect(data.fp).to.equal('pubmatic');

// slot 1
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
expect(data.s[0].fskp).to.equal(0);
expect(data.s[0].ffs).to.equal(1);
expect(data.s[0].fsrc).to.equal(2);
expect(data.s[0].fp).to.equal('pubmatic');
expect(data.s[0].sz).to.deep.equal(['640x480']);
expect(data.s[0].sid).not.to.be.undefined;
expect(data.s[0].ps).to.be.an('array');
Expand Down

0 comments on commit 9355e47

Please sign in to comment.