class_docstr: Handles preparing and sending data from the classifier function to Kinesis Firehose
docstr: Generate suffix of stream name complaint to firehose naming restriction, no
  longer than 64 characters
  
  Args:
      prefix (str): The prefix defined in conf/global.json to firehose stream name
      log_stream_name (str): The name of the log from conf/logs.json or conf/schemas/*.json
  
  Returns:
      str: suffix of stream name
docstr_tok: ["Generate","suffix","of","stream","name","complaint","to","firehose","naming","restriction",",","no","longer","than","64","characters","Args",":","prefix","(","str",")",":","The","prefix","defined","in","conf\/global.json","to","firehose","stream","name","log_stream_name","(","str",")",":","The","name","of","the","log","from","conf\/logs.json","or","conf\/schemas\/","*",".json","Returns",":","str",":","suffix","of","stream","name"]
code: def generate_firehose_name(cls, prefix, log_stream_name):
      """Generate suffix of stream name complaint to firehose naming restriction, no
      longer than 64 characters
  
      Args:
          prefix (str): The prefix defined in conf/global.json to firehose stream name
          log_stream_name (str): The name of the log from conf/logs.json or conf/schemas/*.json
  
      Returns:
          str: suffix of stream name
      """
      if prefix:
          prefix += "_"
  
      # This same substitution method is used when naming the Delivery Streams
      stream_name = cls.sanitized_value(
          cls.DEFAULT_FIREHOSE_FMT.format(prefix, log_stream_name)
      )
      if len(stream_name) <= cls.AWS_FIREHOSE_NAME_MAX_LEN:
          return stream_name
  
      base_name = stream_name[
          : cls.AWS_FIREHOSE_NAME_MAX_LEN
          - cls.FIREHOSE_NAME_MIN_HASH_LEN
      ]
      if not base_name.endswith("_"):
          # make sure this ends in an underscore, but not 2
          base_name = (
              "{}_".format(base_name[:-1])
              if base_name[-2] != "_"
              else "{}_".format(base_name[:-2])
          )
  
      # combine the base_name and first 8 chars of hash result together as new
      # stream name.
      return "{}{}".format(
          base_name,
          hashlib.md5(stream_name.encode()).hexdigest(),  # nosec
      )[: cls.AWS_FIREHOSE_NAME_MAX_LEN]
  
imports: from collections import defaultdict
  import json
  import hashlib
  import re
  import backoff
  import boto3
  from botocore.exceptions import ClientError, HTTPClientError
  from botocore.exceptions import ConnectionError
  from streamalert.shared import CLASSIFIER_FUNCTION_NAME
  import streamalert.shared.helpers.boto
  from streamalert.shared.logger import get_logger
  from streamalert.shared.metrics import MetricLogger
  from streamalert.shared.backoff_handlers import backoff_handler, giveup_handler, success_handler
label_desc: Use image node_id 11 for calling the FirehoseClient obj's underlying member method code with example usage: obj.generate_firehose_name(cls, prefix, log_stream_name) and returns: str, stream_name