docs: def GetMetadata(client_id, client_full_info):
    """Builds ExportedMetadata object for a given client id and ClientFullInfo."""
  
    metadata = ExportedMetadata()
  
    last_snapshot = None
    if client_full_info.HasField("last_snapshot"):
      last_snapshot = client_full_info.last_snapshot
  
    metadata.client_urn = client_id
    metadata.client_age = client_full_info.metadata.first_seen
  
    if last_snapshot is not None:
      kb = client_full_info.last_snapshot.knowledge_base
  
      metadata.hostname = kb.fqdn
      metadata.os = kb.os
      metadata.uname = last_snapshot.Uname()
      metadata.os_release = last_snapshot.os_release
      metadata.os_version = last_snapshot.os_version
      metadata.usernames = ",".join(user.username for user in kb.users)
  
      addresses = last_snapshot.GetMacAddresses()
      if addresses:
        metadata.mac_address = last_snapshot.GetMacAddresses().pop()
      metadata.hardware_info = last_snapshot.hardware_info
      metadata.kernel_version = last_snapshot.kernel
  
      ci = last_snapshot.cloud_instance
      if ci is not None:
        if ci.cloud_type == ci.InstanceType.AMAZON:
          metadata.cloud_instance_type = metadata.CloudInstanceType.AMAZON
          metadata.cloud_instance_id = ci.amazon.instance_id
        elif ci.cloud_type == ci.InstanceType.GOOGLE:
          metadata.cloud_instance_type = metadata.CloudInstanceType.GOOGLE
          metadata.cloud_instance_id = ci.google.unique_id
  
    system_labels = set()
    user_labels = set()
    for l in client_full_info.labels:
      if l.owner == "GRR":
        system_labels.add(l.name)
      else:
        user_labels.add(l.name)
  
    metadata.labels = ",".join(sorted(system_labels | user_labels))
    metadata.system_labels = ",".join(sorted(system_labels))
    metadata.user_labels = ",".join(sorted(user_labels))
  
    return metadata