code: def _obtain_sampled_health_pills(self, run, node_names):
      
      runs_to_tags_to_content = self._event_multiplexer.PluginRunToTagToContent(
          constants.DEBUGGER_PLUGIN_NAME)
  
      if run not in runs_to_tags_to_content:
        # The run lacks health pills.
        return {}
  
      # This is also a mapping between node name and plugin content because this
      # plugin tags by node name.
      tags_to_content = runs_to_tags_to_content[run]
  
      mapping = {}
      for node_name in node_names:
        if node_name not in tags_to_content:
          # This node lacks health pill data.
          continue
  
        health_pills = []
        for tensor_event in self._event_multiplexer.Tensors(run, node_name):
          json_string = tags_to_content[node_name]
          try:
            content_object = json.loads(tf.compat.as_text(json_string))
            device_name = content_object['device']
            output_slot = content_object['outputSlot']
            health_pills.append(
                self._tensor_proto_to_health_pill(tensor_event, node_name,
                                                  device_name, output_slot))
          except (KeyError, ValueError) as e:
            logger.error('Could not determine device from JSON string '
                             '%r: %r', json_string, e)
  
        mapping[node_name] = health_pills
  
      return mapping
docs: Obtains the health pills for a run sampled by the event multiplexer.
  
      This is much faster than the alternative path of reading health pills from
      disk.
  
      Args:
        run: The run to fetch health pills for.
        node_names: A list of node names for which to retrieve health pills.
  
      Returns:
        A dictionary mapping from node name to a list of
        event_accumulator.HealthPillEvents.