-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial Commit for Symitri Analytics Adapter (#12132)
Co-authored-by: Manan <manan.patel@intersection.com>
- Loading branch information
1 parent
edb2d9d
commit c30a7fe
Showing
3 changed files
with
186 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js'; | ||
import adapterManager from '../src/adapterManager.js'; | ||
import { EVENTS } from '../src/constants.js'; | ||
import { logMessage } from '../src/utils.js'; | ||
import {ajax} from '../src/ajax.js'; | ||
|
||
const analyticsType = 'endpoint'; | ||
const url = 'https://ProdSymPrebidEventhub1.servicebus.windows.net/prebid-said-1/messages'; | ||
|
||
const { BID_WON } = EVENTS; | ||
|
||
let initOptions; | ||
|
||
let symitriAnalytics = Object.assign(adapter({url, analyticsType}), { | ||
track({ eventType, args }) { | ||
switch (eventType) { | ||
case BID_WON: | ||
logMessage('##### symitriAnalytics :: Event Triggered : ' + eventType); | ||
sendEvent(args); | ||
break; | ||
default: | ||
logMessage('##### symitriAnalytics :: Event Triggered : ' + eventType); | ||
break; | ||
} | ||
} | ||
}); | ||
|
||
function sendEvent(payload) { | ||
try { | ||
if (initOptions.apiAuthToken) { | ||
const body = JSON.stringify(payload); | ||
logMessage('##### symitriAnalytics :: sendEvent ', payload); | ||
let cb = { | ||
success: () => { | ||
logMessage('##### symitriAnalytics :: Bid Reported Successfully'); | ||
}, | ||
error: (request, error) => { | ||
logMessage('##### symitriAnalytics :: Bid Report Failed' + error); | ||
} | ||
}; | ||
|
||
ajax(url, cb, body, { | ||
method: 'POST', | ||
customHeaders: {'Content-Type': 'application/atom+xml;type=entry;charset=utf-8', 'Authorization': initOptions.apiAuthToken} | ||
}); | ||
} | ||
} catch (err) { logMessage('##### symitriAnalytics :: error' + err) } | ||
} | ||
|
||
symitriAnalytics.originEnableAnalytics = symitriAnalytics.enableAnalytics; | ||
symitriAnalytics.enableAnalytics = function (config) { | ||
initOptions = config.options; | ||
symitriAnalytics.originEnableAnalytics(config); | ||
}; | ||
|
||
adapterManager.registerAnalyticsAdapter({ | ||
adapter: symitriAnalytics, | ||
code: 'symitri' | ||
}); | ||
|
||
export default symitriAnalytics; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
### Overview | ||
|
||
Symitri Analytics Adapter. | ||
|
||
### Integration | ||
|
||
1) Build the symitriAnalyticsAdapter module into the Prebid.js package with: | ||
|
||
``` | ||
gulp build --modules=symitriAnalyticsAdapter,... | ||
``` | ||
|
||
2) Use `enableAnalytics` to instruct Prebid.js to initilaize the symitriAnalyticsAdapter module, as specified below. | ||
|
||
### Configuration | ||
|
||
``` | ||
pbjs.enableAnalytics({ | ||
provider: 'symitri', | ||
options: { | ||
'apiAuthToken': '<see your Symitri account rep>' | ||
} | ||
}); | ||
``` | ||
|
||
Please reach out to your Symitri account representative(Prebid@symitri.com) to get provisioned on the DAP platform. | ||
|
||
|
||
### Testing | ||
To view an example of available segments returned by dap: | ||
``` | ||
‘gulp serve --modules=rtdModule,symitriDapRtdProvider,symitriAnalyticsAdapter,appnexusBidAdapter,sovrnBidAdapter’ | ||
``` | ||
and then point your browser at: | ||
"http://localhost:9999/integrationExamples/gpt/symitridap_segments_example.html" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
import symitriAnalyticsAdapter from 'modules/symitriAnalyticsAdapter.js'; | ||
import { expect } from 'chai'; | ||
import adapterManager from 'src/adapterManager.js'; | ||
import { server } from 'test/mocks/xhr.js'; | ||
import { EVENTS } from 'src/constants.js'; | ||
|
||
let events = require('src/events'); | ||
|
||
describe('symitri analytics adapter', function () { | ||
beforeEach(function () { | ||
sinon.stub(events, 'getEvents').returns([]); | ||
}); | ||
|
||
afterEach(function () { | ||
events.getEvents.restore(); | ||
}); | ||
|
||
describe('track', function () { | ||
let initOptionsValid = { | ||
apiAuthToken: 'TOKEN1234' | ||
}; | ||
let initOptionsInValid = { | ||
}; | ||
|
||
let bidWon = { | ||
'bidderCode': 'appnexus', | ||
'width': 300, | ||
'height': 250, | ||
'statusMessage': 'Bid available', | ||
'adId': '393976d8770041', | ||
'requestId': '263efc09896d0c', | ||
'mediaType': 'banner', | ||
'source': 'client', | ||
'cpm': 0.5, | ||
'creativeId': 96846035, | ||
'currency': 'USD', | ||
'netRevenue': true, | ||
'ttl': 300, | ||
'adUnitCode': 'div-gpt-ad-1460505748561-0', | ||
'originalCpm': 0.5, | ||
'originalCurrency': 'USD', | ||
'auctionId': 'db377024-d866-4a24-98ac-5e430f881313', | ||
'responseTimestamp': 1576823894050, | ||
'requestTimestamp': 1576823893838, | ||
'bidder': 'appnexus', | ||
'timeToRespond': 212, | ||
'status': 'rendered' | ||
}; | ||
|
||
adapterManager.registerAnalyticsAdapter({ | ||
code: 'symitri', | ||
adapter: symitriAnalyticsAdapter | ||
}); | ||
|
||
afterEach(function () { | ||
symitriAnalyticsAdapter.disableAnalytics(); | ||
}); | ||
|
||
it('Test with valid apiAuthToken', function () { | ||
adapterManager.enableAnalytics({ | ||
provider: 'symitri', | ||
options: initOptionsValid | ||
}); | ||
events.emit(EVENTS.BID_WON, bidWon); | ||
expect(server.requests.length).to.equal(1); | ||
}); | ||
|
||
it('Test with missing apiAuthToken', function () { | ||
adapterManager.enableAnalytics({ | ||
provider: 'symitri', | ||
options: initOptionsInValid | ||
}); | ||
events.emit(EVENTS.BID_WON, bidWon); | ||
expect(server.requests.length).to.equal(0); | ||
}); | ||
|
||
it('Test correct winning bid is sent to server', function () { | ||
adapterManager.enableAnalytics({ | ||
provider: 'symitri', | ||
options: initOptionsValid | ||
}); | ||
events.emit(EVENTS.BID_WON, bidWon); | ||
expect(server.requests.length).to.equal(1); | ||
let winEventData = JSON.parse(server.requests[0].requestBody); | ||
expect(winEventData).to.deep.equal(bidWon); | ||
let authToken = server.requests[0].requestHeaders['Authorization']; | ||
expect(authToken).to.equal(initOptionsValid.apiAuthToken); | ||
}); | ||
}); | ||
}); |