def _process_thread(self, client):
    """Process a single GRR client.

    Args:
      client: a GRR client object.
    """
    system_type = client.data.os_info.system
    print('System type: {0:s}'.format(system_type))

    # If the list is supplied by the user via a flag, honor that.
    artifact_list = []
    if self.artifacts:
      print('Artifacts to be collected: {0!s}'.format(self.artifacts))
      artifact_list = self.artifacts
    else:
      default_artifacts = self.artifact_registry.get(system_type, None)
      if default_artifacts:
        print('Collecting default artifacts for {0:s}: {1:s}'.format(
            system_type, ', '.join(default_artifacts)))
        artifact_list.extend(default_artifacts)

    if self.extra_artifacts:
      print('Throwing in an extra {0!s}'.format(self.extra_artifacts))
      artifact_list.extend(self.extra_artifacts)
      artifact_list = list(set(artifact_list))

    if not artifact_list:
      return

    flow_args = flows_pb2.ArtifactCollectorFlowArgs(
        artifact_list=artifact_list,
        use_tsk=self.use_tsk,
        ignore_interpolation_errors=True,
        apply_parsers=False)
    flow_id = self._launch_flow(client, 'ArtifactCollectorFlow', flow_args)
    self._await_flow(client, flow_id)
    collected_flow_data = self._download_files(client, flow_id)
    if collected_flow_data:
      print('{0!s}: Downloaded: {1:s}'.format(flow_id, collected_flow_data))
      fqdn = client.data.os_info.fqdn.lower()
      self.state.output.append((fqdn, collected_flow_data))
Process a single GRR client.

    Args:
      client: a GRR client object.