docs: def new_metric(self, meta):
          """
          Create and register metric,
          find subscribers for this metric (using meta as filter) and subscribe
  
          Return:
              metric (available_metrics[0]): one of Metric
          """
          type_ = meta.get('type')
          if not type_:
              raise ValueError('Metric type should be defined.')
  
          if type_ in available_metrics:
              metric_obj = available_metrics[type_](meta, self.routing_queue)  # create metric object
              metric_meta = pd.DataFrame({metric_obj.local_id: meta}).T  # create metric meta
              self.metrics_meta = self.metrics_meta.append(metric_meta)  # register metric meta
              self.metrics[metric_obj.local_id] = metric_obj  # register metric object
  
              # find subscribers for this metric
              this_metric_subscribers = self.__reversed_filter(self.subscribers, meta)
              if this_metric_subscribers.empty:
                  logger.debug('subscriber for metric %s not found', metric_obj.local_id)
              else:
                  logger.debug('Found subscribers for this metric, subscribing...: %s', this_metric_subscribers)
                  # attach this metric id to discovered subscribers and select id <-> callbacks
                  this_metric_subscribers['id'] = metric_obj.local_id
                  found_callbacks = this_metric_subscribers[['id', 'callback']].set_index('id')
                  # add this metric callbacks to DataManager's callbacks
                  self.callbacks = self.callbacks.append(found_callbacks)
              return metric_obj
          else:
              raise NotImplementedError('Unknown metric type: %s' % type_)