docs: def _process_data(
          self,
          data,
          collect_aggregates_only,
          process_events,
          url=None,
          collect_status_metrics=False,
          collect_status_metrics_by_host=False,
          tag_service_check_by_host=False,
          services_incl_filter=None,
          services_excl_filter=None,
          collate_status_tags_per_host=False,
          count_status_by_service=True,
          custom_tags=None,
          tags_regex=None,
          active_tag=None,
          enable_service_check=False,
      ):
          ''' Main data-processing loop. For each piece of useful data, we'll
          either save a metric, save an event or both. '''
  
          # Split the first line into an index of fields
          # The line looks like (broken up onto multiple lines)
          # "# pxname,svname,qcur,qmax,scur,smax,slim,
          # stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,
          # wredis,status,weight,act,bck,chkfail,chkdown,lastchg,
          # downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,
          # type,rate,rate_lim,rate_max,"
          fields = []
          for f in data[0].split(','):
              if f:
                  f = f.replace('# ', '')
                  fields.append(f.strip())
  
          self.hosts_statuses = defaultdict(int)
  
          back_or_front = None
  
          # Sanitize CSV, handle line breaks
          data = self._sanitize_lines(data)
          custom_tags = [] if custom_tags is None else custom_tags
          active_tag = [] if active_tag is None else active_tag
  
          # First initialize here so that it is defined whether or not we enter the for loop
          line_tags = list(custom_tags)
  
          # Skip the first line, go backwards to set back_or_front
          for line in data[:0:-1]:
              if not line.strip():
                  continue
  
              # Store each line's values in a dictionary
              data_dict = self._line_to_dict(fields, line)
  
              if self._is_aggregate(data_dict):
                  back_or_front = data_dict['svname']
  
              self._update_data_dict(data_dict, back_or_front)
  
              self._update_hosts_statuses_if_needed(
                  collect_status_metrics, collect_status_metrics_by_host, data_dict, self.hosts_statuses
              )
  
              # Clone the list to avoid extending the original
              # which would carry over previous iteration tags
              line_tags = list(custom_tags)
  
              regex_tags = self._tag_from_regex(tags_regex, data_dict['pxname'])
              if regex_tags:
                  line_tags.extend(regex_tags)
  
              if self._should_process(data_dict, collect_aggregates_only):
                  # update status
                  # Send the list of data to the metric and event callbacks
                  self._process_metrics(
                      data_dict,
                      url,
                      services_incl_filter=services_incl_filter,
                      services_excl_filter=services_excl_filter,
                      custom_tags=line_tags,
                      active_tag=active_tag,
                  )
              if process_events:
                  self._process_event(
                      data_dict,
                      url,
                      services_incl_filter=services_incl_filter,
                      services_excl_filter=services_excl_filter,
                      custom_tags=line_tags,
                  )
              if enable_service_check:
                  self._process_service_check(
                      data_dict,
                      url,
                      tag_by_host=tag_service_check_by_host,
                      services_incl_filter=services_incl_filter,
                      services_excl_filter=services_excl_filter,
                      custom_tags=line_tags,
                  )
  
          if collect_status_metrics:
              self._process_status_metric(
                  self.hosts_statuses,
                  collect_status_metrics_by_host,
                  services_incl_filter=services_incl_filter,
                  services_excl_filter=services_excl_filter,
                  collate_status_tags_per_host=collate_status_tags_per_host,
                  count_status_by_service=count_status_by_service,
                  custom_tags=line_tags,
                  active_tag=active_tag,
              )
  
              self._process_backend_hosts_metric(
                  self.hosts_statuses,
                  services_incl_filter=services_incl_filter,
                  services_excl_filter=services_excl_filter,
                  custom_tags=line_tags,
                  active_tag=active_tag,
              )
  
          return data