code: def process_message(self, msg):
      # type: (Message) -> None
      if msg.msg_type == MessageTypes.MUST_SEND:
          print(
              "DebugMonitor[must_send]: %s" % str(msg.payload),
              file=sys.stderr,
          )
      elif msg.msg_type == MessageTypes.SHUTDOWN:
          print(
              "DebugMonitor[shutdown]: got shutdown!", file=sys.stderr
          )
          self._shutdown()
      elif msg.msg_type == MessageTypes.BEST_EFFORT:
          for v in msg.payload.values():
              metric = Metric.deserialize(v)
              print(
                  "DebugMonitor[metric]: %s for %s: %s"
                  % (
                      metric.metric_type,
                      metric.name,
                      str(metric.value),
                  ),
                  file=sys.stderr,
              )
  
file_path: metaflow/metaflow/plugins/debug_monitor.py
imports: import sys
  from metaflow.sidecar import MessageTypes, Message
  from metaflow.monitor import NullMonitor, Metric
label_desc: Use image node_id 2 for calling the DebugMonitorSidecar obj's underlying member method code with example usage: obj.process_message(msg) without return types