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

IX: pass-through ext.ixdiag fields in bid request #4262

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 37 additions & 29 deletions adapters/ix/ix.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,9 @@ type IxAdapter struct {
}

type ExtRequest struct {
Prebid *openrtb_ext.ExtRequestPrebid `json:"prebid"`
Prebid *openrtb_ext.ExtRequestPrebid `json:"prebid,omitempty"`
SChain *openrtb2.SupplyChain `json:"schain,omitempty"`
IxDiag *IxDiag `json:"ixdiag,omitempty"`
}

type IxDiag struct {
PbsV string `json:"pbsv,omitempty"`
PbjsV string `json:"pbjsv,omitempty"`
MultipleSiteIds string `json:"multipleSiteIds,omitempty"`
IxDiag json.RawMessage `json:"ixdiag,omitempty"`
}

type auctionConfig struct {
Expand All @@ -57,7 +51,7 @@ func (a *IxAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters
filteredImps := make([]openrtb2.Imp, 0, len(request.Imp))
requestCopy := *request

ixDiag := &IxDiag{}
ixDiagFields := make(map[string]interface{})

for _, imp := range requestCopy.Imp {
var err error
Expand Down Expand Up @@ -94,9 +88,9 @@ func (a *IxAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters
}
requestCopy.Imp = filteredImps

setPublisherId(&requestCopy, uniqueSiteIDs, ixDiag)
setPublisherId(&requestCopy, uniqueSiteIDs, ixDiagFields)

err := setIxDiagIntoExtRequest(&requestCopy, ixDiag, version.Ver)
err := setIxDiagIntoExtRequest(&requestCopy, ixDiagFields, version.Ver)
if err != nil {
errs = append(errs, err)
}
Expand All @@ -112,7 +106,7 @@ func (a *IxAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters
return requests, errs
}

func setPublisherId(requestCopy *openrtb2.BidRequest, uniqueSiteIDs map[string]struct{}, ixDiag *IxDiag) {
func setPublisherId(requestCopy *openrtb2.BidRequest, uniqueSiteIDs map[string]struct{}, ixDiagFields map[string]interface{}) {
siteIDs := make([]string, 0, len(uniqueSiteIDs))
for key := range uniqueSiteIDs {
siteIDs = append(siteIDs, key)
Expand Down Expand Up @@ -150,7 +144,7 @@ func setPublisherId(requestCopy *openrtb2.BidRequest, uniqueSiteIDs map[string]s
// Sorting siteIDs for predictable output as Go maps don't guarantee order
sort.Strings(siteIDs)
multipleSiteIDs := strings.Join(siteIDs, ", ")
ixDiag.MultipleSiteIds = multipleSiteIDs
ixDiagFields["multipleSiteIds"] = multipleSiteIDs
}
}

Expand Down Expand Up @@ -403,37 +397,51 @@ func extractVersionWithoutCommitHash(ver string) string {
return ver // if no hyphen, return the original string
}

func setIxDiagIntoExtRequest(request *openrtb2.BidRequest, ixDiag *IxDiag, ver string) error {
extRequest := &ExtRequest{}
func setIxDiagIntoExtRequest(request *openrtb2.BidRequest, ixDiagAdditionalFields map[string]interface{}, ver string) error {
var extRequest ExtRequest
if request.Ext != nil {
if err := jsonutil.Unmarshal(request.Ext, &extRequest); err != nil {
return err
}
}

if extRequest.Prebid != nil && extRequest.Prebid.Channel != nil {
ixDiag.PbjsV = extRequest.Prebid.Channel.Version
ixDiagAdditionalFields["pbjsv"] = extRequest.Prebid.Channel.Version
}
// Slice commit hash out of version
prebidServerVersion := "unknown" // Default value when the version cannot be determined
if ver != "" {
ixDiag.PbsV = extractVersionWithoutCommitHash(ver)
prebidServerVersion = extractVersionWithoutCommitHash(ver)
}
ixDiagAdditionalFields["pbsv"] = prebidServerVersion
ixDiagAdditionalFields["pbsp"] = "go" // indicate prebid server implementation use Go version

// Only set request.ext if ixDiag is not empty
if *ixDiag != (IxDiag{}) {
extRequest := &ExtRequest{}
if request.Ext != nil {
if err := jsonutil.Unmarshal(request.Ext, &extRequest); err != nil {
return err
}
}
extRequest.IxDiag = ixDiag
extRequestJson, err := json.Marshal(extRequest)
if err != nil {
var ixDiagMap map[string]interface{}
if extRequest.IxDiag != nil && len(extRequest.IxDiag) > 0 {
if err := jsonutil.Unmarshal(extRequest.IxDiag, &ixDiagMap); err != nil {
return err
}
request.Ext = extRequestJson
} else {
ixDiagMap = make(map[string]interface{})
}

for k, v := range ixDiagAdditionalFields {
ixDiagMap[k] = v
}

ixDiagJSON, err := json.Marshal(ixDiagMap)
if err != nil {
return err
}

extRequest.IxDiag = ixDiagJSON

extRequestJSON, err := json.Marshal(extRequest)
if err != nil {
return err
}

request.Ext = extRequestJSON
return nil
}

Expand Down
29 changes: 21 additions & 8 deletions adapters/ix/ix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ func TestBuildIxDiag(t *testing.T) {
},
expectedRequest: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbsv":"1.880","pbjsv":"7.20"}}`),
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbjsv":"7.20","pbsp":"go","pbsv":"1.880"}}`),
},
expectError: false,
pbsVersion: "1.880-abcdef",
Expand All @@ -208,7 +208,7 @@ func TestBuildIxDiag(t *testing.T) {
},
expectedRequest: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":{"server":{"externalurl":"http://localhost:8000","gvlid":0,"datacenter":""}},"ixdiag":{"pbsv":"1.880"}}`),
Ext: json.RawMessage(`{"prebid":{"server":{"externalurl":"http://localhost:8000","gvlid":0,"datacenter":""}},"ixdiag":{"pbsp":"go","pbsv":"1.880"}}`),
},
expectError: false,
pbsVersion: "1.880-abcdef",
Expand All @@ -220,7 +220,7 @@ func TestBuildIxDiag(t *testing.T) {
},
expectedRequest: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":null,"ixdiag":{"pbsv":"1.880"}}`),
Ext: json.RawMessage(`{"ixdiag":{"pbsp":"go","pbsv":"1.880"}}`),
},
expectError: false,
pbsVersion: "1.880-abcdef",
Expand All @@ -232,7 +232,7 @@ func TestBuildIxDiag(t *testing.T) {
},
expectedRequest: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":null,"ixdiag":{"pbsv":"0.23.1"}}`),
Ext: json.RawMessage(`{"ixdiag":{"pbsp":"go","pbsv":"0.23.1"}}`),
},
expectError: false,
pbsVersion: "0.23.1-3-g4ee257d8",
Expand All @@ -245,7 +245,7 @@ func TestBuildIxDiag(t *testing.T) {
},
expectedRequest: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbsv":"1.880","pbjsv":"7.20"}}`),
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbjsv":"7.20","pbsp":"go","pbsv":"1.880"}}`),
},
expectError: false,
pbsVersion: "1.880",
Expand All @@ -258,7 +258,20 @@ func TestBuildIxDiag(t *testing.T) {
},
expectedRequest: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbjsv":"7.20"}}`),
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbjsv":"7.20","pbsp":"go","pbsv":"unknown"}}`),
},
expectError: false,
pbsVersion: "",
},
{
description: "request ixdiag contain other fields that should pass-through along with additional version fields",
request: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"msd":2,"msi":1,"nvin":"123"}}`),
},
expectedRequest: &openrtb2.BidRequest{
ID: "1",
Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"msd":2,"msi":1,"nvin":"123","pbjsv":"7.20","pbsp":"go","pbsv":"unknown"}}`),
},
expectError: false,
pbsVersion: "",
Expand All @@ -280,8 +293,8 @@ func TestBuildIxDiag(t *testing.T) {

for _, test := range testCases {
t.Run(test.description, func(t *testing.T) {
ixDiag := &IxDiag{}
err := setIxDiagIntoExtRequest(test.request, ixDiag, test.pbsVersion)
ixDiagFields := make(map[string]interface{})
err := setIxDiagIntoExtRequest(test.request, ixDiagFields, test.pbsVersion)
if test.expectError {
assert.NotNil(t, err)
} else {
Expand Down
6 changes: 6 additions & 0 deletions adapters/ix/ixtest/exemplary/additional-consent.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@
"consented_providers": [1]
}
}
},
"ext": {
"ixdiag": {
"pbsp": "go",
"pbsv": "unknown"
}
}
},
"impIDs":["test-imp-id"]
Expand Down
4 changes: 3 additions & 1 deletion adapters/ix/ixtest/exemplary/app-site-id.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@
},
"ext": {
"ixdiag": {
"pbjsv": "7.0.0"
"pbjsv": "7.0.0",
"pbsp": "go",
"pbsv": "unknown"
},
"prebid": {
"channel": {
Expand Down
8 changes: 7 additions & 1 deletion adapters/ix/ixtest/exemplary/banner-no-format.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,13 @@
}
}
}
]
],
"ext": {
"ixdiag": {
"pbsp": "go",
"pbsv": "unknown"
}
}
},
"impIDs":["test-imp-id"]
},
Expand Down
6 changes: 6 additions & 0 deletions adapters/ix/ixtest/exemplary/fledge.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@
"publisher": {
"id": "569749"
}
},
"ext": {
"ixdiag": {
"pbsp": "go",
"pbsv": "unknown"
}
}
},
"impIDs":["test-imp-id"]
Expand Down
Loading
Loading