docs: def _collect_stats(self, db, instance_tags):
          """Query pgbouncer for various metrics
          """
  
          metric_scope = [self.STATS_METRICS, self.POOLS_METRICS, self.DATABASES_METRICS]
  
          try:
              with db.cursor(cursor_factory=pgextras.DictCursor) as cursor:
                  for scope in metric_scope:
                      descriptors = scope['descriptors']
                      metrics = scope['metrics']
                      query = scope['query']
  
                      try:
                          self.log.debug("Running query: %s", query)
                          cursor.execute(query)
  
                          rows = cursor.fetchall()
  
                      except pg.Error:
                          self.log.exception("Not all metrics may be available")
  
                      else:
                          for row in rows:
                              self.log.debug("Processing row: %r", row)
  
                              # Skip the "pgbouncer" database
                              if row['database'] == self.DB_NAME:
                                  continue
  
                              tags = list(instance_tags)
                              tags += ["%s:%s" % (tag, row[column]) for (column, tag) in descriptors if column in row]
                              for (column, (name, reporter)) in metrics:
                                  if column in row:
                                      reporter(self, name, row[column], tags)
  
                          if not rows:
                              self.log.warning("No results were found for query: %s", query)
  
          except pg.Error:
              self.log.exception("Connection error")
  
              raise ShouldRestartException