@Override
  public void process(ClusterDistributionManager dm) {
    Listener listener = getListener();
    if (listener != null) {
      listener.received(this);
    }

    RemoteGfManagerAgent agent = dm.getAgent();
    if (agent != null) {
      RemoteGemFireVM manager = agent.getMemberById(getSender());
      if (manager == null) {
        return;
      }
      Alert alert = new RemoteAlert(manager, alertLevel, date, connectionName, threadName, threadId,
          message, exceptionText, getSender());

      if (listener != null) {
        listener.created(alert);
      }

      agent.callAlertListener(alert);
    } else {
      /*
       * The other recipient type is a JMX Manager which needs AlertDetails so that it can send out
       * JMX notifications for the alert.
       */
      AlertDetails alertDetail = new AlertDetails(alertLevel, date, connectionName, threadName,
          threadId, message, exceptionText, getSender());

      if (listener != null) {
        listener.created(alertDetail);
      }

      dm.getSystem().handleResourceEvent(ResourceEvent.SYSTEM_ALERT, alertDetail);
    }
  }
A message that is sent to an admin member or manager to notify it of an alert.

<p>
Alerts are sent from remote members to the manager via {@link AlertListenerMessage} which is
no-ack (asynchronous). This means you cannot log a warning in one VM and immediately verify that
it arrives in the manager VM. You have to use {@code Mockito#timeout(long)} or
{@code Awaitility}.
geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertListenerMessage.java