<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def send(self, cumulative_counters=None, gauges=None, counters=None):
 """Send the given metrics to SignalFx. Args: cumulative_counters (list):
 a list of dictionaries representing the cumulative counters to report. gauges (list):
 a list of dictionaries representing the gauges to report. counters (list):
 a list of dictionaries representing the counters to report. """

        if not gauges and not cumulative_counters and not counters:
            return

        data = {
            'cumulative_counter': cumulative_counters,
            'gauge': gauges,
            'counter': counters,
        }
        _logger.debug('Sending datapoints to SignalFx: %s', data)

        for metric_type, datapoints in data.items():
            if not datapoints:
                continue
            if not isinstance(datapoints, list):
                raise TypeError('Datapoints not of type list %s', datapoints)
            for datapoint in datapoints:
                self._add_extra_dimensions(datapoint)
                self._add_to_queue(metric_type, datapoint)

        # Ensure the sending thread is running.
        self._start_thread()