private static void addAdditionalDimensionsForTopSites()

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());
    }
  }