docs: def ping(daemon, channel, data=None):
      """
      Process the 'ping' control message.
  
      :param daemon: The control daemon; used to get at the
                     configuration and the database.
      :param channel: The publish channel to which to send the
                      response.
      :param data: Optional extra data.  Will be returned as the
                   second argument of the response.
  
      Responds to the named channel with a command of 'pong' and
      with the node_name (if configured) and provided data as
      arguments.
      """
  
      if not channel:
          # No place to reply to
          return
  
      # Get our configured node name
      node_name = daemon.config['control'].get('node_name')
  
      # Format the response
      reply = ['pong']
      if node_name or data:
          reply.append(node_name or '')
      if data:
          reply.append(data)
  
      # And send it
      with utils.ignore_except():
          daemon.db.publish(channel, ':'.join(reply))