def dump(self, level=None):
    if level is None:
      level = config.DUMP_LEVEL
    if level < 0:
      return

    logging.info('APPSTATS: %s "%s %s%s" %s %.3f',
                 format_time(self.start_timestamp),
                 self.http_method(),
                 self.http_path(),
                 self.http_query(),
                 self.http_status,
                 self.end_timestamp - self.start_timestamp)
    for key, value in sorted(self.get_rpcstats().iteritems()):
      logging.info('  %s : %s', key, value)
    if level <= 0:
      return
    with self._lock:
      for trace in self.traces:
        start = trace.start_offset_milliseconds()
        logging.info('  TRACE  : [%s, %s, %s]',
                     trace.start_offset_milliseconds(),
                     trace.service_call_name(),
                     trace.duration_milliseconds())
        logging.info('    REQ  : %s', trace.request_data_summary())
        logging.info('    RESP : %s', trace.response_data_summary())
        if level <= 1:
          continue
        for entry in trace.call_stack_list():
          logging.info('    FRAME: %s:%s %s()',
                       entry.class_or_file_name(),
                       entry.line_number(),
                       entry.function_name())
          for variable in entry.variables_list():
            logging.info('      VAR: %s = %s', variable.key(), variable.value())
annotate snps with gene set.
dataset/ETHPy150Open AppScale/appscale/AppServer/google/appengine/ext/appstats/recording.py/Recorder.dump--crossover with--dataset/ETHPy150Open CGATOxford/cgat/obsolete/pipeline_snps.py/makeAnnotations