code: def push(self, statsDict=None, prefix=None, path=None):
      
      if statsDict is None:
        statsDict = scales.getStats()
      prefix = prefix or self.prefix
      path = path or '/'
  
      for name, value in list(statsDict.items()):
        name = str(name)
        subpath = os.path.join(path, name)
  
        if self._pruned(subpath):
          continue
  
        if hasattr(value, '__call__'):
          try:
            value = value()
          except:                       # pylint: disable=W0702
            value = None
            log.exception('Error when calling stat function for graphite push')
  
        if hasattr(value, 'items'):
          self.push(value, '%s%s.' % (prefix, self._sanitize(name)), subpath)
        elif self._forbidden(subpath, value):
          continue
  
        if six.PY3:
          type_values = (int, float)
        else:
          type_values = (int, long, float)
  
        if type(value) in type_values and len(name) < 500:
          self.graphite.log(prefix + self._sanitize(name), value)
docs: Push stat values out to Graphite.