code: def elapsed(self):
          '''
          Returns elapsed crawl time as a float in seconds.
  
          This metric includes all the time that a site was in active rotation,
          including any time it spent waiting for its turn to be brozzled.
  
          In contrast `Site.active_brozzling_time` only counts time when a
          brozzler worker claimed the site and was actively brozzling it.
          '''
          dt = 0
          for ss in self.starts_and_stops[:-1]:
              dt += (ss['stop'] - ss['start']).total_seconds()
          ss = self.starts_and_stops[-1]
          if ss['stop']:
              dt += (ss['stop'] - ss['start']).total_seconds()
          else: # crawl is active
              dt += (doublethink.utcnow() - ss['start']).total_seconds()
          return df elapsed(self):
          '''
          Returns elapsed crawl time as a float in seconds.
  
          This metric includes all the time that a site was in active rotation,
          including any time it spent waiting for its turn to be brozzled.
  
          In contrast `Site.active_brozzling_time` only counts time when a
          brozzler worker claimed the site and was actively brozzling it.
          '''
          dt = 0
          for ss in self.starts_and_stops[:-1]:
              dt += (ss['stop'] - ss['start']).total_seconds()
          ss = self.starts_and_stops[-1]
          if ss['stop']:
              dt += (ss['stop'] - ss['start']).total_seconds()
          else: # crawl is active
              dt += (doublethink.utcnow() - ss['start']).total_seconds()
          return dt
docs: Returns elapsed crawl time as a float in seconds.
  
          This metric includes all the time that a site was in active rotation,
          including any time it spent waiting for its turn to be brozzled.
  
          In contrast `Site.active_brozzling_time` only counts time when a
          brozzler worker claimed the site and was actively brozzling it.