Skip to content

Commit 9355e47

Browse files
PubMatic Analytics Adapter: Moving slot level parameters to root level and adding few parameters to log in tracker (#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
1 parent 7eb00b5 commit 9355e47

File tree

2 files changed

+90
-55
lines changed

2 files changed

+90
-55
lines changed

modules/pubmaticAnalyticsAdapter.js

Lines changed: 61 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,31 @@ function isOWPubmaticBid(adapterName) {
281281
})
282282
}
283283

284+
function getFloorsCommonField (floorData) {
285+
if (!floorData) return;
286+
const { location, fetchStatus, floorProvider, modelVersion } = floorData;
287+
return {
288+
ffs: {
289+
[FLOOR_VALUES.SUCCESS]: 1,
290+
[FLOOR_VALUES.ERROR]: 2,
291+
[FLOOR_VALUES.TIMEOUT]: 4,
292+
undefined: 0
293+
}[fetchStatus],
294+
fsrc: {
295+
[FLOOR_VALUES.FETCH]: 2,
296+
[FLOOR_VALUES.NO_DATA]: 0,
297+
[FLOOR_VALUES.AD_UNIT]: 1,
298+
[FLOOR_VALUES.SET_CONFIG]: 1
299+
}[location],
300+
fp: floorProvider,
301+
mv: modelVersion
302+
}
303+
}
304+
305+
function getFloorType(floorResponseData) {
306+
return floorResponseData ? (floorResponseData.enforcements.enforceJS == false ? 0 : 1) : undefined;
307+
}
308+
284309
function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid, e) {
285310
highestBid = (highestBid && highestBid.length > 0) ? highestBid[0] : null;
286311
return Object.keys(adUnit.bids).reduce(function(partnerBids, bidId) {
@@ -325,6 +350,7 @@ function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid, e) {
325350
'ocpm': bid.bidResponse ? (bid.bidResponse.originalCpm || 0) : 0,
326351
'ocry': bid.bidResponse ? (bid.bidResponse.originalCurrency || CURRENCY_USD) : CURRENCY_USD,
327352
'frv': bid.bidResponse ? bid.bidResponse.floorData?.floorRuleValue : undefined,
353+
'fv': bid.bidResponse ? bid.bidResponse.floorData?.floorValue : undefined,
328354
'md': bid.bidResponse ? getMetadata(bid.bidResponse.meta) : undefined,
329355
'pb': pg || undefined
330356
});
@@ -403,9 +429,22 @@ function executeBidsLoggerCall(e, highestCpmBids) {
403429
outputObj['tgid'] = getTgId();
404430
outputObj['pbv'] = '$prebid.version$' || '-1';
405431

406-
if (floorData && floorFetchStatus) {
407-
outputObj['fmv'] = floorData.floorRequestData ? floorData.floorRequestData.modelVersion || undefined : undefined;
408-
outputObj['ft'] = floorData.floorResponseData ? (floorData.floorResponseData.enforcements.enforceJS == false ? 0 : 1) : undefined;
432+
if (floorData) {
433+
const floorRootValues = getFloorsCommonField(floorData?.floorRequestData);
434+
if (floorRootValues) {
435+
const { ffs, fsrc, fp, mv } = floorRootValues;
436+
if (floorData?.floorRequestData) {
437+
outputObj['ffs'] = ffs;
438+
outputObj['fsrc'] = fsrc;
439+
outputObj['fp'] = fp;
440+
}
441+
if (floorFetchStatus) {
442+
outputObj['fmv'] = mv || undefined;
443+
}
444+
}
445+
if (floorFetchStatus) {
446+
outputObj['ft'] = getFloorType(floorData?.floorResponseData);
447+
}
409448
}
410449

411450
outputObj.s = Object.keys(auctionCache.adUnitCodes).reduce(function(slotsArray, adUnitId) {
@@ -421,22 +460,6 @@ function executeBidsLoggerCall(e, highestCpmBids) {
421460
'fskp': floorData && floorFetchStatus ? (floorData.floorRequestData ? (floorData.floorRequestData.skipped == false ? 0 : 1) : undefined) : undefined,
422461
'sid': generateUUID()
423462
};
424-
if (floorData?.floorRequestData) {
425-
const { location, fetchStatus, floorProvider } = floorData?.floorRequestData;
426-
slotObject.ffs = {
427-
[FLOOR_VALUES.SUCCESS]: 1,
428-
[FLOOR_VALUES.ERROR]: 2,
429-
[FLOOR_VALUES.TIMEOUT]: 4,
430-
undefined: 0
431-
}[fetchStatus];
432-
slotObject.fsrc = {
433-
[FLOOR_VALUES.FETCH]: 2,
434-
[FLOOR_VALUES.NO_DATA]: 2,
435-
[FLOOR_VALUES.AD_UNIT]: 1,
436-
[FLOOR_VALUES.SET_CONFIG]: 1
437-
}[location];
438-
slotObject.fp = floorProvider;
439-
}
440463
slotsArray.push(slotObject);
441464
return slotsArray;
442465
}, []);
@@ -509,6 +532,25 @@ function executeBidWonLoggerCall(auctionId, adUnitId) {
509532
pixelURL += '&orig=' + enc(getDomainFromUrl(referrer));
510533
pixelURL += '&ss=' + enc(isS2SBidder(winningBid.bidder));
511534
(fskp != undefined) && (pixelURL += '&fskp=' + enc(fskp));
535+
if (floorData) {
536+
const floorRootValues = getFloorsCommonField(floorData.floorRequestData);
537+
const { fsrc, fp, mv } = floorRootValues || {};
538+
const params = { fsrc, fp, fmv: mv };
539+
Object.entries(params).forEach(([key, value]) => {
540+
if (value !== undefined) {
541+
pixelURL += `&${key}=${enc(value)}`;
542+
}
543+
});
544+
const floorType = getFloorType(floorData.floorResponseData);
545+
if (floorType !== undefined) {
546+
pixelURL += '&ft=' + enc(floorType);
547+
}
548+
const floorRuleValue = winningBid?.bidResponse?.floorData?.floorRuleValue;
549+
(floorRuleValue !== undefined) && (pixelURL += '&frv=' + enc(floorRuleValue));
550+
551+
const floorValue = winningBid?.bidResponse?.floorData?.floorValue;
552+
(floorValue !== undefined) && (pixelURL += '&fv=' + enc(floorValue));
553+
}
512554
pixelURL += '&af=' + enc(winningBid.bidResponse ? (winningBid.bidResponse.mediaType || undefined) : undefined);
513555

514556
ajax(

test/spec/modules/pubmaticAnalyticsAdapter_spec.js

Lines changed: 29 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -571,13 +571,13 @@ describe('pubmatic analytics adapter', function () {
571571
expect(data.pbv).to.equal('$prebid.version$' || '-1');
572572
expect(data.s).to.be.an('array');
573573
expect(data.s.length).to.equal(2);
574+
expect(data.ffs).to.equal(1);
575+
expect(data.fsrc).to.equal(2);
576+
expect(data.fp).to.equal('pubmatic');
574577
// slot 1
575578
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
576579
expect(data.s[0].fskp).to.equal(0);
577580
expect(data.s[0].sid).not.to.be.undefined;
578-
expect(data.s[0].ffs).to.equal(1);
579-
expect(data.s[0].fsrc).to.equal(2);
580-
expect(data.s[0].fp).to.equal('pubmatic');
581581
expect(data.s[0].sz).to.deep.equal(['640x480']);
582582
expect(data.s[0].ps).to.be.an('array');
583583
expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
@@ -609,9 +609,6 @@ describe('pubmatic analytics adapter', function () {
609609
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
610610
expect(data.s[1].fskp).to.equal(0);
611611
expect(data.s[1].sid).not.to.be.undefined;
612-
expect(data.s[1].ffs).to.equal(1);
613-
expect(data.s[1].fsrc).to.equal(2);
614-
expect(data.s[1].fp).to.equal('pubmatic');
615612
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
616613
expect(data.s[1].ps).to.be.an('array');
617614
expect(data.s[1].ps.length).to.equal(1);
@@ -789,14 +786,14 @@ describe('pubmatic analytics adapter', function () {
789786
expect(data.pbv).to.equal('$prebid.version$' || '-1');
790787
expect(data.s).to.be.an('array');
791788
expect(data.s.length).to.equal(2);
789+
expect(data.ffs).to.equal(1);
790+
expect(data.fsrc).to.equal(2);
791+
expect(data.fp).to.equal('pubmatic');
792792
expect(data.tgid).to.equal(0);
793793
// slot 1
794794
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
795795
expect(data.s[0].fskp).to.equal(0);
796796
expect(data.s[0].sid).not.to.be.undefined;
797-
expect(data.s[0].ffs).to.equal(1);
798-
expect(data.s[0].fsrc).to.equal(2);
799-
expect(data.s[0].fp).to.equal('pubmatic');
800797
expect(data.s[0].sz).to.deep.equal(['640x480']);
801798
expect(data.s[0].ps).to.be.an('array');
802799
expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
@@ -915,15 +912,13 @@ describe('pubmatic analytics adapter', function () {
915912
let request = requests[1]; // logger is executed late, trackers execute first
916913
let data = getLoggerJsonFromRequest(request.requestBody);
917914
expect(data.tgid).to.equal(0);// test group id should be an INT between 0-15 else set to 0
915+
expect(data.ffs).to.equal(1);
916+
expect(data.fsrc).to.equal(2);
917+
expect(data.fp).to.equal('pubmatic');
918+
918919
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
919920
expect(data.s[1].fskp).to.equal(0);
920-
921921
expect(data.s[1].sid).not.to.be.undefined;
922-
923-
expect(data.s[1].ffs).to.equal(1);
924-
expect(data.s[1].fsrc).to.equal(2);
925-
expect(data.s[1].fp).to.equal('pubmatic');
926-
927922
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
928923
expect(data.s[1].ps).to.be.an('array');
929924
expect(data.s[1].ps.length).to.equal(1);
@@ -1004,12 +999,13 @@ describe('pubmatic analytics adapter', function () {
1004999
expect(requests.length).to.equal(1); // 1 logger and 0 win-tracker
10051000
let request = requests[0];
10061001
let data = getLoggerJsonFromRequest(request.requestBody);
1002+
expect(data.ffs).to.equal(1);
1003+
expect(data.fsrc).to.equal(2);
1004+
expect(data.fp).to.equal('pubmatic');
1005+
10071006
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
10081007
expect(data.s[1].fskp).to.equal(0);
10091008
expect(data.s[1].sid).not.to.be.undefined;
1010-
expect(data.s[1].ffs).to.equal(1);
1011-
expect(data.s[1].fsrc).to.equal(2);
1012-
expect(data.s[1].fp).to.equal('pubmatic');
10131009
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
10141010
expect(data.s[1].ps).to.be.an('array');
10151011
expect(data.s[1].ps.length).to.equal(1);
@@ -1119,12 +1115,12 @@ describe('pubmatic analytics adapter', function () {
11191115
let request = requests[2]; // logger is executed late, trackers execute first
11201116
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
11211117
let data = getLoggerJsonFromRequest(request.requestBody);
1118+
expect(data.ffs).to.equal(1);
1119+
expect(data.fsrc).to.equal(2);
1120+
expect(data.fp).to.equal('pubmatic');
11221121
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
11231122
expect(data.s[1].fskp).to.equal(0);
11241123
expect(data.s[1].sid).not.to.be.undefined;
1125-
expect(data.s[1].ffs).to.equal(1);
1126-
expect(data.s[1].fsrc).to.equal(2);
1127-
expect(data.s[1].fp).to.equal('pubmatic');
11281124
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
11291125
expect(data.s[1].ps).to.be.an('array');
11301126
expect(data.s[1].ps.length).to.equal(1);
@@ -1239,12 +1235,12 @@ describe('pubmatic analytics adapter', function () {
12391235
let request = requests[2]; // logger is executed late, trackers execute first
12401236
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
12411237
let data = getLoggerJsonFromRequest(request.requestBody);
1238+
expect(data.ffs).to.equal(1);
1239+
expect(data.fsrc).to.equal(2);
1240+
expect(data.fp).to.equal('pubmatic');
12421241
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
12431242
expect(data.s[1].fskp).to.equal(0);
12441243
expect(data.s[1].sid).not.to.be.undefined;
1245-
expect(data.s[1].ffs).to.equal(1);
1246-
expect(data.s[1].fsrc).to.equal(2);
1247-
expect(data.s[1].fp).to.equal('pubmatic');
12481244
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
12491245
expect(data.s[1].ps).to.be.an('array');
12501246
expect(data.s[1].ps.length).to.equal(1);
@@ -1357,14 +1353,14 @@ describe('pubmatic analytics adapter', function () {
13571353
let request = requests[1]; // logger is executed late, trackers execute first
13581354
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
13591355
let data = getLoggerJsonFromRequest(request.requestBody);
1356+
expect(data.ffs).to.equal(1);
1357+
expect(data.fsrc).to.equal(2);
1358+
expect(data.fp).to.equal('pubmatic');
13601359

13611360
// slot 2
13621361
// Testing only for rejected bid as other scenarios will be covered under other TCs
13631362
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
13641363
expect(data.s[1].fskp).to.equal(0);
1365-
expect(data.s[1].ffs).to.equal(1);
1366-
expect(data.s[1].fsrc).to.equal(2);
1367-
expect(data.s[1].fp).to.equal('pubmatic');
13681364
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
13691365
expect(data.s[1].sid).not.to.be.undefined;
13701366
expect(data.s[1].ps).to.be.an('array');
@@ -1438,13 +1434,13 @@ describe('pubmatic analytics adapter', function () {
14381434
expect(data.ft).to.equal(1);
14391435
expect(data.s).to.be.an('array');
14401436
expect(data.s.length).to.equal(2);
1437+
expect(data.ffs).to.equal(1);
1438+
expect(data.fsrc).to.equal(2);
1439+
expect(data.fp).to.equal('pubmatic');
14411440

14421441
// slot 1
14431442
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
14441443
expect(data.s[0].fskp).to.equal(0);
1445-
expect(data.s[0].ffs).to.equal(1);
1446-
expect(data.s[0].fsrc).to.equal(2);
1447-
expect(data.s[0].fp).to.equal('pubmatic');
14481444
expect(data.s[0].sz).to.deep.equal(['640x480']);
14491445
expect(data.s[0].sid).not.to.be.undefined;
14501446
expect(data.s[0].ps).to.be.an('array');
@@ -1477,9 +1473,6 @@ describe('pubmatic analytics adapter', function () {
14771473
// slot 2
14781474
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
14791475
expect(data.s[1].fskp).to.equal(0);
1480-
expect(data.s[1].ffs).to.equal(1);
1481-
expect(data.s[1].fsrc).to.equal(2);
1482-
expect(data.s[1].fp).to.equal('pubmatic');
14831476
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
14841477
expect(data.s[1].sid).not.to.be.undefined;
14851478
expect(data.s[1].ps).to.be.an('array');
@@ -1570,13 +1563,13 @@ describe('pubmatic analytics adapter', function () {
15701563
expect(data.ft).to.equal(1);
15711564
expect(data.s).to.be.an('array');
15721565
expect(data.s.length).to.equal(2);
1566+
expect(data.ffs).to.equal(1);
1567+
expect(data.fsrc).to.equal(2);
1568+
expect(data.fp).to.equal('pubmatic');
15731569

15741570
// slot 1
15751571
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
15761572
expect(data.s[0].fskp).to.equal(0);
1577-
expect(data.s[0].ffs).to.equal(1);
1578-
expect(data.s[0].fsrc).to.equal(2);
1579-
expect(data.s[0].fp).to.equal('pubmatic');
15801573
expect(data.s[0].sz).to.deep.equal(['640x480']);
15811574
expect(data.s[0].sid).not.to.be.undefined;
15821575
expect(data.s[0].ps).to.be.an('array');

0 commit comments

Comments
 (0)