class_docstr: Base class for all app integrations to be implemented for various services
docstr: Protected entry point to perform the gather that returns the time the process took
  
  Returns:
      float: time, in seconds, for which the function ran
docstr_tok: ["Protected","entry","point","to","perform","the","gather","that","returns","the","time","the","process","took","Returns",":","float",":","time",",","in","seconds",",","for","which","the","function","ran"]
code: def _gather(self):
      """Protected entry point to perform the gather that returns the time the process took
  
      Returns:
          float: time, in seconds, for which the function ran
      """
      # Make this request sleep if the API throttles requests
      self._sleep()
  
      # Increment the poll count
      self._poll_count += 1
  
      logs = self._gather_logs()
  
      # Make sure there are logs, this can be False if there was an issue polling
      # of if there are no new logs to be polled
      if not logs:
          self._more_to_poll = False
          LOGGER.error(
              "[%s] Gather process was not able to poll any logs "
              "on poll #%d",
              self,
              self._poll_count,
          )
          return
  
      # Increment the count of logs gathered
      self._gathered_log_count += len(logs)
  
      # Utilize the batcher to send logs to the classifier function
      self._batcher.send_logs(logs)
  
      LOGGER.debug(
          "Updating config last timestamp from %s to %s",
          self._config.last_timestamp,
          self._last_timestamp,
      )
  
      # Save the config's last timestamp after each function run
      self._config.last_timestamp = self._last_timestamp
  
imports: from abc import ABCMeta, abstractmethod, abstractproperty
  from json import JSONDecodeError
  import time
  import boto3
  from botocore.exceptions import ClientError
  import requests
  from streamalert.apps.config import AppConfig
  from streamalert.apps.batcher import Batcher
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 18 for calling the AppIntegration obj's underlying member method code with example usage: obj._gather() without return types