in ingestion-beam/src/main/java/com/mozilla/telemetry/contextualservices/ParseReportingUrl.java [357:388]
private static void addAdditionalDimensionsForTopSites(BuildReportingUrl builtUrl,
ObjectNode payload, PubsubMessage message, Map<String, String> attributes, String namespace,
SponsoredInteraction interaction) {
if (!payload.hasNonNull(Attribute.NORMALIZED_COUNTRY_CODE)) {
throw new RejectedMessageException(
"Missing required payload value " + Attribute.NORMALIZED_COUNTRY_CODE, "country");
}
builtUrl.addQueryParam(BuildReportingUrl.PARAM_COUNTRY_CODE,
payload.get(Attribute.NORMALIZED_COUNTRY_CODE).asText());
builtUrl.addQueryParam(BuildReportingUrl.PARAM_REGION_CODE,
attributes.get(Attribute.GEO_SUBDIVISION1));
final String osParam;
if (namespace.contains("-ios")) {
// We currently get null values for parsed OS from user agent on Apple devices,
// so we include this as a special case based on document namespace.
osParam = "iOS";
} else {
osParam = getOsParam(attributes.get(Attribute.USER_AGENT_OS));
}
builtUrl.addQueryParam(BuildReportingUrl.PARAM_OS_FAMILY, osParam);
builtUrl.addQueryParam(BuildReportingUrl.PARAM_FORM_FACTOR, interaction.getFormFactor());
builtUrl.addQueryParam(BuildReportingUrl.PARAM_DMA_CODE,
message.getAttribute(Attribute.GEO_DMA_CODE));
// if `topsites` impression then add the `position` parameter as `slot-number`
if (SponsoredInteraction.INTERACTION_IMPRESSION.equals(interaction.getInteractionType())) {
builtUrl.addQueryParam(BuildReportingUrl.PARAM_POSITION, interaction.getPosition());
}
}