Skip to content

Commit 2579952

Browse files
pm-harshad-manestsepelin
authored andcommitted
PubMatic Analytics: internal kgpv param support in analytics (prebid#5849)
* added support for pubcommon, digitrust, id5id * added support for IdentityLink * changed the source for id5 * added unit test cases * changed source param for identityLink * not passing GDPR data in analytics * adding support for OpenWrap regex support * added unit test cases
1 parent 6ec36a3 commit 2579952

File tree

2 files changed

+116
-2
lines changed

2 files changed

+116
-2
lines changed

modules/pubmaticAnalyticsAdapter.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ function parseBidResponse(bid) {
152152
'mediaType',
153153
'params',
154154
'mi',
155+
'regexPattern', () => bid.regexPattern || undefined,
155156
'partnerImpId', // partner impression ID
156157
'dimensions', () => utils.pick(bid, [
157158
'width',
@@ -166,6 +167,18 @@ function getDomainFromUrl(url) {
166167
return a.hostname;
167168
}
168169

170+
function getValueForKgpv(bid, adUnitId) {
171+
if (bid.params.regexPattern) {
172+
return bid.params.regexPattern;
173+
} else if (bid.bidResponse && bid.bidResponse.regexPattern) {
174+
return bid.bidResponse.regexPattern;
175+
} else if (bid.params.kgpv) {
176+
return bid.params.kgpv;
177+
} else {
178+
return adUnitId;
179+
}
180+
}
181+
169182
function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid) {
170183
highestBid = (highestBid && highestBid.length > 0) ? highestBid[0] : null;
171184
return Object.keys(adUnit.bids).reduce(function(partnerBids, bidId) {
@@ -174,7 +187,7 @@ function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid) {
174187
'pn': bid.bidder,
175188
'bidid': bid.bidId,
176189
'db': bid.bidResponse ? 0 : 1,
177-
'kgpv': bid.params.kgpv ? bid.params.kgpv : adUnitId,
190+
'kgpv': getValueForKgpv(bid, adUnitId),
178191
'kgpsv': bid.params.kgpv ? bid.params.kgpv : adUnitId,
179192
'psz': bid.bidResponse ? (bid.bidResponse.dimensions.width + 'x' + bid.bidResponse.dimensions.height) : '0x0',
180193
'eg': bid.bidResponse ? bid.bidResponse.bidGrossCpmUSD : 0,
@@ -268,7 +281,7 @@ function executeBidWonLoggerCall(auctionId, adUnitId) {
268281
pixelURL += '&pn=' + enc(winningBid.bidder);
269282
pixelURL += '&en=' + enc(winningBid.bidResponse.bidPriceUSD);
270283
pixelURL += '&eg=' + enc(winningBid.bidResponse.bidGrossCpmUSD);
271-
pixelURL += '&kgpv=' + enc(winningBid.params.kgpv || adUnitId);
284+
pixelURL += '&kgpv=' + enc(getValueForKgpv(winningBid, adUnitId));
272285
pixelURL += '&piid=' + enc(winningBid.bidResponse.partnerImpId || EMPTY_STRING);
273286
ajax(
274287
pixelURL,

test/spec/modules/pubmaticAnalyticsAdapter_spec.js

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,5 +696,106 @@ describe('pubmatic analytics adapter', function () {
696696
expect(data.s[1].ps[0].ocpm).to.equal(100);
697697
expect(data.s[1].ps[0].ocry).to.equal('JPY');
698698
});
699+
700+
it('Logger: regexPattern in bid.params', function() {
701+
const BID_REQUESTED_COPY = utils.deepClone(MOCK.BID_REQUESTED);
702+
BID_REQUESTED_COPY.bids[1].params.regexPattern = '*';
703+
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
704+
events.emit(BID_REQUESTED, BID_REQUESTED_COPY);
705+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
706+
events.emit(BID_RESPONSE, BID2);
707+
events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
708+
events.emit(AUCTION_END, MOCK.AUCTION_END);
709+
events.emit(SET_TARGETING, MOCK.SET_TARGETING);
710+
events.emit(BID_WON, MOCK.BID_WON[0]);
711+
events.emit(BID_WON, MOCK.BID_WON[1]);
712+
713+
clock.tick(2000 + 1000);
714+
expect(requests.length).to.equal(3); // 1 logger and 2 win-tracker
715+
let request = requests[2]; // logger is executed late, trackers execute first
716+
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
717+
let data = getLoggerJsonFromRequest(request.requestBody);
718+
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
719+
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
720+
expect(data.s[1].ps).to.be.an('array');
721+
expect(data.s[1].ps.length).to.equal(1);
722+
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
723+
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
724+
expect(data.s[1].ps[0].db).to.equal(0);
725+
expect(data.s[1].ps[0].kgpv).to.equal('*');
726+
expect(data.s[1].ps[0].kgpsv).to.equal('this-is-a-kgpv');
727+
expect(data.s[1].ps[0].psz).to.equal('728x90');
728+
expect(data.s[1].ps[0].eg).to.equal(1.52);
729+
expect(data.s[1].ps[0].en).to.equal(1.52);
730+
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
731+
expect(data.s[1].ps[0].dc).to.equal('PMP');
732+
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
733+
expect(data.s[1].ps[0].l1).to.equal(3214);
734+
expect(data.s[1].ps[0].l2).to.equal(0);
735+
expect(data.s[1].ps[0].ss).to.equal(1);
736+
expect(data.s[1].ps[0].t).to.equal(0);
737+
expect(data.s[1].ps[0].wb).to.equal(0); // bidPriceUSD is not getting set as currency module is not added, so unable to set wb to 1
738+
expect(data.s[1].ps[0].af).to.equal('banner');
739+
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
740+
expect(data.s[1].ps[0].ocry).to.equal('USD');
741+
// respective tracker slot
742+
let firstTracker = requests[1].url;
743+
expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
744+
data = {};
745+
firstTracker.split('?')[1].split('&').map(e => e.split('=')).forEach(e => data[e[0]] = e[1]);
746+
expect(data.kgpv).to.equal('*');
747+
});
748+
749+
it('Logger: regexPattern in bid.bidResponse', function() {
750+
const BID2_COPY = utils.deepClone(BID2);
751+
BID2_COPY.regexPattern = '*';
752+
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
753+
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
754+
events.emit(BID_REQUESTED, MOCK.BID_REQUESTED);
755+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
756+
events.emit(BID_RESPONSE, BID2_COPY);
757+
events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
758+
events.emit(AUCTION_END, MOCK.AUCTION_END);
759+
events.emit(SET_TARGETING, MOCK.SET_TARGETING);
760+
events.emit(BID_WON, MOCK.BID_WON[0]);
761+
events.emit(BID_WON, Object.assign({}, BID2_COPY, {
762+
'status': 'rendered'
763+
}));
764+
765+
clock.tick(2000 + 1000);
766+
expect(requests.length).to.equal(3); // 1 logger and 2 win-tracker
767+
let request = requests[2]; // logger is executed late, trackers execute first
768+
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
769+
let data = getLoggerJsonFromRequest(request.requestBody);
770+
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
771+
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
772+
expect(data.s[1].ps).to.be.an('array');
773+
expect(data.s[1].ps.length).to.equal(1);
774+
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
775+
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
776+
expect(data.s[1].ps[0].db).to.equal(0);
777+
expect(data.s[1].ps[0].kgpv).to.equal('*');
778+
expect(data.s[1].ps[0].kgpsv).to.equal('this-is-a-kgpv');
779+
expect(data.s[1].ps[0].psz).to.equal('728x90');
780+
expect(data.s[1].ps[0].eg).to.equal(1.52);
781+
expect(data.s[1].ps[0].en).to.equal(1.52);
782+
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
783+
expect(data.s[1].ps[0].dc).to.equal('PMP');
784+
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
785+
expect(data.s[1].ps[0].l1).to.equal(3214);
786+
expect(data.s[1].ps[0].l2).to.equal(0);
787+
expect(data.s[1].ps[0].ss).to.equal(1);
788+
expect(data.s[1].ps[0].t).to.equal(0);
789+
expect(data.s[1].ps[0].wb).to.equal(0); // bidPriceUSD is not getting set as currency module is not added, so unable to set wb to 1
790+
expect(data.s[1].ps[0].af).to.equal('banner');
791+
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
792+
expect(data.s[1].ps[0].ocry).to.equal('USD');
793+
// respective tracker slot
794+
let firstTracker = requests[1].url;
795+
expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
796+
data = {};
797+
firstTracker.split('?')[1].split('&').map(e => e.split('=')).forEach(e => data[e[0]] = e[1]);
798+
expect(data.kgpv).to.equal('*');
799+
});
699800
});
700801
});

0 commit comments

Comments
 (0)