Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Adapter: Readpeak #3610

Merged
merged 19 commits into from
Apr 25, 2024
Merged

Conversation

readpeak-user
Copy link
Contributor

Adds s2s adapter for Readpeak.

First time writing Go so please check carefully :)

Link to document PR prebid/prebid.github.io#5242

func getMediaType(impID string, imps []openrtb2.Imp) (openrtb_ext.BidType, error) {
for _, imp := range imps {
if imp.ID == impID {
if imp.Banner != nil {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider this as a suggestion. The current implementation follows an anti-pattern, assumes that if there is a multi-format request, the media type defaults to openrtb_ext.BidTypeBanner, nil. Prebid server expects the media type to be explicitly set in the adapter response. Therefore, we strongly recommend implementing a pattern where the adapter server sets the MType field in the response to accurately determine the media type for the impression.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@readpeak-user PTAL at above comment and provide feedback on using Mtype

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed to use mtype from bid response

Copy link

github-actions bot commented Apr 4, 2024

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 9022c83

readpeak

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:22:	Builder		100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:29:	MakeRequests	89.4%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:106:	MakeBids	78.3%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:151:	resolveMacros	100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:160:	getMediaType	85.7%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:176:	getBidMeta	100.0%
total:									(statements)	87.1%

@onkarvhanumante
Copy link
Contributor

@readpeak-user

tests are failing on PR with following error:

gofmt needs to be run, 6 files have issues.  Below is a list of files to review:
adapters/readpeak/params_test.go
adapters/readpeak/readpeak.go
adapters/readpeak/readpeak_test.go
exchange/adapter_builders.go
openrtb_ext/bidders.go
openrtb_ext/imp_readpeak.go
Error: Process completed with exit code 1.

run gofmt on above files to fix errors reported by test suite

@@ -0,0 +1,15 @@
endpoint: https://dsp.readpeak.com/header/prebid
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

endpoint is reachable

curl -i --location --request POST 'https://dsp.readpeak.com/header/prebid'
HTTP/2 204
date: Fri, 05 Apr 2024 10:11:33 GMT

- EEA
maintainer:
email: devteam@readpeak.com
gvlVendorID: 290
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

verified gvl id

curl https://vendor-list.consensu.org/v2/vendor-list.json | jq '.vendors."290"'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  430k  100  430k    0     0   730k      0 --:--:-- --:--:-- --:--:--  729k
{
  "id": 290,
  "name": "Readpeak Oy",
  "purposes": [
    1,
    3,
    4
  ],
  "legIntPurposes": [
    2,
    7,
    10
  ],
  "flexiblePurposes": [
    2,
    7,
    10
  ],
  "specialPurposes": [
    1,
    2
  ],
  "features": [
    3
  ],
  "specialFeatures": [],
  "policyUrl": "https://www.readpeak.com/terms/readpeak-privacy-policy",
  "cookieMaxAgeSeconds": 7776000,
  "usesCookies": true,
  "cookieRefresh": true,
  "usesNonCookieAccess": false,
  "deviceStorageDisclosureUrl": "https://static.readpeak.com/tcf/deviceStorage.json"
}

Comment on lines 130 to 131
bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
bidResponse.Currency = response.Cur
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

by default line 130 will initialize bidResponse.Currency as USD

reassigning bidResponse.Currency on line 131 without checking response.Cur length may overwrite bidResponse.Currency with blank value

code block can be refactored as below

	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
        if len(response.Cur) != 0 {
	    bidResponse.Currency = response.Cur
        }

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

@prebid prebid deleted a comment from github-actions bot Apr 5, 2024
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, dfd0c11

readpeak

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:22:	Builder			100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:28:	MakeRequests		88.9%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:103:	MakeBids		95.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:140:	resolveMacros		100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:148:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:159:	getBidMeta		100.0%
total:									(statements)		92.1%

@gargcreation1992
Copy link
Contributor

@readpeak-user Pr checks are failing as you would need to run gofmt in your code files.

Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 0298a58

readpeak

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:22:	Builder			100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:28:	MakeRequests		88.9%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:103:	MakeBids		95.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:140:	resolveMacros		100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:148:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:159:	getBidMeta		100.0%
total:									(statements)		92.1%

Comment on lines 35 to 37
if requestCopy.Imp[i].Native == nil && requestCopy.Imp[i].Banner == nil {
continue
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static/bidder-info/readpeak.yaml specifies either banner or Native is required.
prebid server core will ensure either banner or native is present else will return error before adapter code is being invoked

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the check

Comment on lines 104 to 106
if responseData.StatusCode == http.StatusNoContent {
return nil, nil
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

func IsResponseStatusCodeNoContent(response *ResponseData) bool {
return response.StatusCode == http.StatusNoContent
}

could make use of response util here

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Used util function

@onkarvhanumante
Copy link
Contributor

@readpeak-user test suites are failing with following error

--- FAIL: TestJsonSamples (0.00s)
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:256
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/exemplary/banner.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:256
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/exemplary/banner_app.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:[256](https://github.com/prebid/prebid-server/actions/runs/8700881813/job/23871502985?pr=3610#step:4:257)
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/exemplary/banner_multiple_imps.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:256
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/exemplary/native.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:256
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/supplemental/banner_without_mtype.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:256
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/supplemental/bid_response_204.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:256
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/supplemental/bid_response_400.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
    test_json.go:128: 
        	Error Trace:	/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:256
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:412
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:128
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:99
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:76
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:445
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:467
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/path.go:535
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/test_json.go:70
        	            				/home/runner/work/prebid-server/prebid-server/adapters/readpeak/readpeak_test.go:20
        	Error:      	Received unexpected error:
        	            	expected.ImpIDs must contain at least one imp ID
        	Test:       	TestJsonSamples
        	Messages:   	readpeaktest/supplemental/bid_response_500.json Expected RequestData was not returned by adapters' MakeRequests() implementation: httpRequest[0]
FAIL
	github.com/prebid/prebid-server/v2/adapters/readpeak	coverage: 92.1% of statements
FAIL	github.com/prebid/prebid-server/v2/adapters/readpeak	0.026s

Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, e99096c

readpeak

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:22:	Builder			100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:28:	MakeRequests		83.7%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:100:	MakeBids		95.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:137:	resolveMacros		100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:145:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:156:	getBidMeta		100.0%
total:									(statements)		89.2%

@readpeak-user
Copy link
Contributor Author

@onkarvhanumante I have not been able to figure out why those tests fail. Any ideas? How can I run these tests locally?

@readpeak-user
Copy link
Contributor Author

When I run the tests locally with ./validate.sh --nofmt --cov --race 10, they pass:

Screenshot 2024-04-18 at 12 07 58

@onkarvhanumante
Copy link
Contributor

onkarvhanumante commented Apr 18, 2024

@onkarvhanumante I have not been able to figure out why those tests fail. Any ideas? How can I run these tests locally?

@readpeak-user requesting to merge Prebid:master changes into readpeak:readpeak-adapter and update MakeRequests to return ImpIDs as mentioned below

headers.Add("Content-Type", "application/json;charset=utf-8")
headers.Add("Accept", "application/json")
return []*adapters.RequestData{{
Method: "POST",
Uri: a.URI,
Body: reqJSON,
Headers: headers,
ImpIDs: openrtb_ext.GetImpIDs(request.Imp),

Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, c64e1a7

readpeak

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:22:	Builder			100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:28:	MakeRequests		83.7%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:101:	MakeBids		95.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:138:	resolveMacros		100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:146:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v2/adapters/readpeak/readpeak.go:157:	getBidMeta		100.0%
total:									(statements)		89.2%

@readpeak-user
Copy link
Contributor Author

Thanks @onkarvhanumante. Should be fixed now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants