Handle a prometheus metric according to the following flow:
            - search scraper_config['metrics_mapper'] for a prometheus.metric <--> datadog.metric mapping
            - call check method with the same name as the metric
            - log some info if none of the above worked

        `metric_transformers` is a dict of <metric name>:<function to run when the metric name is encountered>

def process_metric(self, metric, scraper_config, metric_transformers=None):
        """
        Handle a prometheus metric according to the following flow:
            - search scraper_config['metrics_mapper'] for a prometheus.metric <--> datadog.metric mapping
            - call check method with the same name as the metric
            - log some info if none of the above worked

        `metric_transformers` is a dict of <metric name>:<function to run when the metric name is encountered>
        """
        # If targeted metric, store labels
        self._store_labels(metric, scraper_config)

        if metric.name in scraper_config['ignore_metrics']:
            return  # Ignore the metric

        # Filter metric to see if we can enrich with joined labels
        self._join_labels(metric, scraper_config)

        if scraper_config['_dry_run']:
            return

        try:
            self.submit_openmetric(scraper_config['metrics_mapper'][metric.name], metric, scraper_config)
        except KeyError:
            if metric_transformers is not None:
                if metric.name in metric_transformers:
                    try:
                        # Get the transformer function for this specific metric
                        transformer = metric_transformers[metric.name]
                        transformer(metric, scraper_config)
                    except Exception as err:
                        self.log.warning("Error handling metric: {} - error: {}".format(metric.name, err))
                else:
                    self.log.debug(
                        "Unable to handle metric: {0} - error: "
                        "No handler function named '{0}' defined".format(metric.name)
                    )
            else:
                # build the wildcard list if first pass
                if scraper_config['_metrics_wildcards'] is None:
                    scraper_config['_metrics_wildcards'] = [x for x in scraper_config['metrics_mapper'] if '*' in x]

                # try matching wildcard (generic check)
                for wildcard in scraper_config['_metrics_wildcards']:
                    if fnmatchcase(metric.name, wildcard):
                        self.submit_openmetric(metric.name, metric, scraper_config)