class_docstr: OutputDispatcher is the base class to handle routing alerts to outputs
  
  Public methods:
      format_output_config: returns a formatted version of the outputs configuration
          that is to be written to disk
      get_user_defined_properties: returns any properties for this output that must be
          provided by the user. must be implemented by subclasses
      dispatch: handles the actual sending of alerts to the configured service. must
          be implemented by subclass
docstr: Send alerts to the given service.
  
  This wraps the protected subclass method of _dispatch to aid in usability
  
  Args:
      alert (Alert): Alert instance which triggered a rule
      output (str): Fully described output (e.g. "demisto:version1", "pagerduty:engineering"
  
  Returns:
      bool: True if alert was sent successfully, False otherwise
docstr_tok: ["Send","alerts","to","the","given","service",".","This","wraps","the","protected","subclass","method","of","_dispatch","to","aid","in","usability","Args",":","alert","(","Alert",")",":","Alert","instance","which","triggered","a","rule","output","(","str",")",":","Fully","described","output","(","e.g",".","``","demisto",":","version1","''",",","``","pagerduty",":","engineering","''","Returns",":","bool",":","True","if","alert","was","sent","successfully",",","False","otherwise"]
code: def dispatch(self, alert, output):
      """Send alerts to the given service.
  
      This wraps the protected subclass method of _dispatch to aid in usability
  
      Args:
          alert (Alert): Alert instance which triggered a rule
          output (str): Fully described output (e.g. "demisto:version1", "pagerduty:engineering"
  
      Returns:
          bool: True if alert was sent successfully, False otherwise
      """
      LOGGER.info("Sending %s to %s", alert, output)
      descriptor = output.split(":")[1]
      try:
          sent = bool(self._dispatch(alert, descriptor))
      except Exception:  # pylint: disable=broad-except
          LOGGER.exception(
              "Exception when sending %s to %s. Alert:\n%s",
              alert,
              output,
              repr(alert),
          )
          sent = False
  
      self._log_status(sent, descriptor)
  
      return sent
  
imports: from abc import ABCMeta, abstractmethod
  from collections import namedtuple
  import requests
  from requests.exceptions import Timeout
  import urllib3
  import backoff
  from streamalert.alert_processor.outputs.credentials.provider import OutputCredentialsProvider
  from streamalert.shared.backoff_handlers import backoff_handler, success_handler, giveup_handler
  from streamalert.shared.helpers.boto import REGION
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 17 for calling the OutputDispatcher obj's underlying member method code with example usage: obj.dispatch(alert, output) and returns: sent