code: private static List<? extends Tag<?>> addAdditionalMetadataTags(Properties jobProps) {
      List<Tag<?>> metadataTags = Lists.newArrayList();
      String jobExecutionId = jobProps.getProperty(AZKABAN_FLOW_EXEC_ID, "");
      String jobExecutionUrl = jobProps.getProperty(AZKABAN_LINK_JOBEXEC_URL, "");
  
      metadataTags.add(new Tag<>(TimingEvent.FlowEventConstants.FLOW_GROUP_FIELD,
          jobProps.getProperty(ConfigurationKeys.FLOW_GROUP_KEY, "")));
      metadataTags.add(new Tag<>(TimingEvent.FlowEventConstants.FLOW_NAME_FIELD,
          jobProps.getProperty(ConfigurationKeys.FLOW_NAME_KEY)));
  
      // use job execution id if flow execution id is not present
      metadataTags.add(new Tag<>(TimingEvent.FlowEventConstants.FLOW_EXECUTION_ID_FIELD,
          jobProps.getProperty(ConfigurationKeys.FLOW_EXECUTION_ID_KEY, jobExecutionId)));
  
      //Use azkaban.flow.execid as the jobExecutionId
      metadataTags.add(new Tag<>(TimingEvent.FlowEventConstants.JOB_EXECUTION_ID_FIELD, jobExecutionId));
  
      metadataTags.add(new Tag<>(TimingEvent.FlowEventConstants.JOB_GROUP_FIELD,
          jobProps.getProperty(ConfigurationKeys.JOB_GROUP_KEY, "")));
      metadataTags.add(new Tag<>(TimingEvent.FlowEventConstants.JOB_NAME_FIELD,
          jobProps.getProperty(ConfigurationKeys.JOB_NAME_KEY, "")));
      metadataTags.add(new Tag<>(TimingEvent.METADATA_MESSAGE, jobExecutionUrl));
  
      LOG.debug(String.format("AzkabanJobLauncher.addAdditionalMetadataTags: metadataTags %s", metadataTags));
  
      return metadataTags;
    }
docs: Add additional properties such as flow.group, flow.name, executionUrl. Useful for tracking
  job executions on Azkaban triggered by Gobblin-as-a-Service (GaaS).
  @param jobProps job properties
  @return a list of tags uniquely identifying a job execution on Azkaban.