Skip to content

Commit

Permalink
DENG-1802 Add match type to parameter for suggest pings (#2500)
Browse files Browse the repository at this point in the history
* DENG-1802 Add match type to  parameter for suggest pings

* checkstyle!!!!!!!!!!!!!!

* Update ParseReportingUrl.java

Co-authored-by: Daniel Thorn <dthorn@mozilla.com>

* Update ParseReportingUrl.java

Co-authored-by: Daniel Thorn <dthorn@mozilla.com>

* spotless

---------

Co-authored-by: Daniel Thorn <dthorn@mozilla.com>
  • Loading branch information
quiiver and relud committed Nov 1, 2023
1 parent e2e94e2 commit d36a916
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
import org.apache.beam.sdk.io.gcp.pubsub.PubsubMessage;
import org.apache.beam.sdk.transforms.MapElements;
import org.apache.beam.sdk.transforms.PTransform;
Expand Down Expand Up @@ -135,6 +136,9 @@ public Result<PCollection<SponsoredInteraction>, PubsubMessage> expand(
docType);
}

// parse match_type for desktop
interactionBuilder.setMatchType(parseMatchType(payload).orElse(null));

// parse position for desktop.
interactionBuilder.setPosition(parsePosition(payload).orElse("no_position"));
} else {
Expand Down Expand Up @@ -289,11 +293,14 @@ public Result<PCollection<SponsoredInteraction>, PubsubMessage> expand(
if (SponsoredInteraction.FORM_DESKTOP.equals(interaction.getFormFactor())
&& SponsoredInteraction.SOURCE_SUGGEST.equals(interaction.getSource())) {

String customDataParam = builtUrl.getQueryParam(BuildReportingUrl.PARAM_CUSTOM_DATA);
builtUrl.addQueryParam(BuildReportingUrl.PARAM_CUSTOM_DATA,
Optional.ofNullable(interaction.getScenario())
.map((pref) -> String.format("%s_%s", customDataParam, pref))
.orElse(customDataParam));
Stream<Optional<String>> customDataElements = Stream.of(
Optional.ofNullable(interaction.getScenario()),
Optional.ofNullable(interaction.getMatchType()));

String originalValue = builtUrl.getQueryParam(BuildReportingUrl.PARAM_CUSTOM_DATA);
String customDataParam = customDataElements.flatMap(Optional::stream)
.reduce(originalValue, (output, param) -> String.format("%s_%s", output, param));
builtUrl.addQueryParam(BuildReportingUrl.PARAM_CUSTOM_DATA, customDataParam);
}

reportingUrl = builtUrl.toString();
Expand Down Expand Up @@ -402,6 +409,16 @@ private Optional<String> parseScenario(ObjectNode payload) {
.map(node -> node.asBoolean() ? SponsoredInteraction.ONLINE : SponsoredInteraction.OFFLINE);
}

private Optional<String> parseMatchType(JsonNode payload) {
if (payload.isMissingNode()) {
return Optional.empty();
}
return Optional.of(payload.path(Attribute.MATCH_TYPE)).filter(node -> !node.isMissingNode())
.map(node -> node.asText())
.map(mt -> "firefox-suggest".equals(mt) ? SponsoredInteraction.FX_SUGGEST
: SponsoredInteraction.BEST_MATCH);
}

private Optional<String> parsePosition(JsonNode payload) {
if (payload.isMissingNode()) {
return Optional.empty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ public abstract class SponsoredInteraction implements Serializable {
@Nullable
abstract String getRequestId();

@Nullable
abstract String getMatchType();

// match type values: top/reg
public static final String BEST_MATCH = "top";
public static final String FX_SUGGEST = "reg";

@Nullable
public abstract String getSubmissionTimestamp();

Expand Down Expand Up @@ -110,8 +117,6 @@ public abstract static class Builder {

public abstract Builder setFormFactor(String newFormFactor);

public abstract Builder setPosition(String newPosition);

public abstract Builder setScenario(String newScenario);

public abstract Builder setInteractionType(String newInteractionType);
Expand All @@ -120,8 +125,12 @@ public abstract static class Builder {

public abstract Builder setReportingUrl(String newReportingUrl);

public abstract Builder setPosition(String newPosition);

public abstract Builder setRequestId(String newRequestId);

public abstract Builder setMatchType(String newMatchType);

public abstract Builder setSubmissionTimestamp(String newSubmissionTimestamp);

public abstract Builder setOriginalDocType(String newOriginalDocType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ public void testCustomDataParam() {
ObjectNode inputPayload = Json.createObjectNode();
inputPayload.put(Attribute.NORMALIZED_COUNTRY_CODE, "US");
inputPayload.put(Attribute.VERSION, "87.0");

String contextId = "aaaa-bbb-ccc-000";
inputPayload.put(Attribute.CONTEXT_ID, contextId);

Expand All @@ -269,14 +270,15 @@ public void testCustomDataParam() {

List<PubsubMessage> input = ImmutableList.of(
new PubsubMessage(Json.asBytes(
impressionPayload.deepCopy().put(Attribute.IMPROVE_SUGGEST_EXPERIENCE_CHECKED, true)),
impressionPayload.deepCopy().put(Attribute.IMPROVE_SUGGEST_EXPERIENCE_CHECKED, true)
.put(Attribute.MATCH_TYPE, "firefox-suggest")),
impressionAttributes),
new PubsubMessage(Json.asBytes(
impressionPayload.deepCopy().put(Attribute.IMPROVE_SUGGEST_EXPERIENCE_CHECKED, false)),
impressionPayload.deepCopy().put(Attribute.IMPROVE_SUGGEST_EXPERIENCE_CHECKED, false)
.put(Attribute.MATCH_TYPE, "best-match")),
impressionAttributes),
new PubsubMessage(
Json.asBytes(
clickPayload.deepCopy().put(Attribute.IMPROVE_SUGGEST_EXPERIENCE_CHECKED, true)),
new PubsubMessage(Json.asBytes(clickPayload.deepCopy()
.put(Attribute.IMPROVE_SUGGEST_EXPERIENCE_CHECKED, true).putNull(Attribute.MATCH_TYPE)),
clickAttributes),
new PubsubMessage(Json.asBytes(clickPayload), clickAttributes));

Expand Down Expand Up @@ -312,10 +314,10 @@ public void testCustomDataParam() {
if (doctype.equals("quicksuggest-impression")) {
if (SponsoredInteraction.ONLINE.equals(interaction.getScenario())) {
Assert.assertTrue(reportingUrl.contains(
String.format("%s=%s", BuildReportingUrl.PARAM_CUSTOM_DATA, "1_online")));
String.format("%s=%s", BuildReportingUrl.PARAM_CUSTOM_DATA, "1_online_reg")));
} else {
Assert.assertTrue(reportingUrl.contains(
String.format("%s=%s", BuildReportingUrl.PARAM_CUSTOM_DATA, "1_offline")));
String.format("%s=%s", BuildReportingUrl.PARAM_CUSTOM_DATA, "1_offline_top")));
}
} else if (doctype.equals("quicksuggest-click")) {
if (SponsoredInteraction.ONLINE.equals(interaction.getScenario())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ private Attribute() {
public static final String SAMPLE_ID = "sample_id";
public static final String SUBMISSION_TIMESTAMP = "submission_timestamp";
public static final String POSITION = "position";
public static final String MATCH_TYPE = "match_type";
public static final String URI = "uri";
public static final String USER_AGENT = "user_agent";
public static final String USER_AGENT_BROWSER = "user_agent_browser";
Expand Down

0 comments on commit d36a916

Please sign in to comment.