class_docstr: Salesforce StreamAlert Base App
  
  SalesforceApp will audit 5 types of event logs include 'Console', 'Login',
  'LoginAs', 'Report' and 'ReportExport' for user access audit and data loss
  prevention, although Salesforce provides 42 types of event logs.
  
  This base class will be inherited by different subclasssed based on different
  event types.
  
  Console events:
      contain information about the performance and use of Salesforce Consoles.
  
  Login events:
      contain details about your org's user login history.
  
  LoginAs events:
      contain details about what a Salesforce admin did while logged in as another user.
  
  Report events:
      contain information about what happened when a user ran a report and
      captures report's size.
  
  ReportExport:
      events contain details about reports that a user exported.
docstr: Fetch a list of available log files by event types.
  
  An event generates log data in real time. However, log files are generated
  the day after an event takes place, during nonpeak hours. Therefore, log
  file data is unavailable for at least one day after an event.
  
  Returns:
      list: a list of log file location or empty list.
  
  An example of log files response json body:
  {
      "totalSize": 2,
      "done": True,
      "records": [
          {
              "attributes": {
                  "type": "EventLogFile",
                  "url": "/services/data/v32.0/sobjects/EventLogFile/0ATD00001bROAQ"
              },
              "Id": "0ATD000000001bROAQ",
              "EventType": "Console",
              "LogFile": "/services/data/v32.0/sobjects/EventLogFile/0ATD00001bROAQ/LogFile",
              "LogDate": "2014-03-14T00:00:00.000+0000",
              "LogFileLength": 2692.0
          },
          {
              "attributes": {
                  "type": "EventLogFile",
                  "url": "/services/data/v32.0/sobjects/EventLogFile/0ATD000000001SdOAI"
              },
              "Id": "0ATD000000001SdOAI",
              "EventType": "Console",
              "LogFile": "/services/data/v32.0/sobjects/EventLogFile/0ATD00001SdOAI/LogFile",
              "LogDate": "2014-03-13T00:00:00.000+0000",
              "LogFileLength": 1345.0
          }
      ]
  }
code: def _list_log_files(self):
      """Fetch a list of available log files by event types.
  
      An event generates log data in real time. However, log files are generated
      the day after an event takes place, during nonpeak hours. Therefore, log
      file data is unavailable for at least one day after an event.
  
      Returns:
          list: a list of log file location or empty list.
  
      An example of log files response json body:
      {
          "totalSize": 2,
          "done": True,
          "records": [
              {
                  "attributes": {
                      "type": "EventLogFile",
                      "url": "/services/data/v32.0/sobjects/EventLogFile/0ATD00001bROAQ"
                  },
                  "Id": "0ATD000000001bROAQ",
                  "EventType": "Console",
                  "LogFile": "/services/data/v32.0/sobjects/EventLogFile/0ATD00001bROAQ/LogFile",
                  "LogDate": "2014-03-14T00:00:00.000+0000",
                  "LogFileLength": 2692.0
              },
              {
                  "attributes": {
                      "type": "EventLogFile",
                      "url": "/services/data/v32.0/sobjects/EventLogFile/0ATD000000001SdOAI"
                  },
                  "Id": "0ATD000000001SdOAI",
                  "EventType": "Console",
                  "LogFile": "/services/data/v32.0/sobjects/EventLogFile/0ATD00001SdOAI/LogFile",
                  "LogDate": "2014-03-13T00:00:00.000+0000",
                  "LogFileLength": 1345.0
              }
          ]
      }
      """
      url = self._SALESFORCE_QUERY_URL.format(
          instance_url=self._instance_url,
          api_version=self._latest_api_version,
          query=self._SALESFORCE_QUERY_FILTERS,
          start_time=self._SALESFORCE_CREATE_AFTER.format(
              self._last_timestamp
          ),
          event_type="AND+EventType+=+'{}'".format(self._type()),
      )
      success, response = self._make_get_request(
          url, self._auth_headers
      )
      if not success:
          LOGGER.error("Failed to get a list of log files.")
          return
  
      log_files = []
      if response.get("records"):
          log_files.extend(
              [
                  record["LogFile"]
                  for record in response["records"]
                  if record.get("LogFile")
              ]
          )
  
      LOGGER.debug("Retrived %d log files", len(log_files))
      return log_files
  
imports: import calendar
  from datetime import datetime
  import re
  import time
  import backoff
  import requests
  from .None import AppIntegration, StreamAlertApp, get_logger
label_desc: Use image node_id 11 for calling the SalesforceApp obj's underlying member method code with example usage: obj._list_log_files() and returns: log_files