class Measure(object): __slots__ = [ "clock", "name", "start_context", "start", "new_context", "ru_utime", "ru_stime", "db_txn_count", "db_txn_duration", "created_context" ] def __init__(self, clock, name): self.clock = clock self.name = name self.start_context = None self.start = None self.created_context = False def __enter__(self): self.start = self.clock.time_msec() self.start_context = LoggingContext.current_context() if not self.start_context: logger.warn("Entered Measure without log context: %s", self.name) self.start_context = LoggingContext("Measure") self.start_context.__enter__() self.created_context = True self.ru_utime, self.ru_stime = self.start_context.get_resource_usage() self.db_txn_count = self.start_context.db_txn_count self.db_txn_duration = self.start_context.db_txn_duration def __exit__(self, exc_type, exc_val, exc_tb): if exc_type is not None or not self.start_context: return duration = self.clock.time_msec() - self.start block_timer.inc_by(duration, self.name) context = LoggingContext.current_context() if context != self.start_context: logger.warn( "Context have unexpectedly changed from '%s' to '%s'. (%r)", context, self.start_context, self.name ) return if not context: logger.warn("Expected context. (%r)", self.name) return ru_utime, ru_stime = context.get_resource_usage() block_ru_utime.inc_by(ru_utime - self.ru_utime, self.name) block_ru_stime.inc_by(ru_stime - self.ru_stime, self.name) block_db_txn_count.inc_by( context.db_txn_count - self.db_txn_count, self.name ) block_db_txn_duration.inc_by( context.db_txn_duration - self.db_txn_duration, self.name ) if self.created_context: self.start_context.__exit__(exc_type, exc_val, exc_tb)
class Measure(object): __slots__ = [ "clock", "name", "start_context", "start", "created_context", "start_usage", ] def __init__(self, clock, name): self.clock = clock self.name = name self.start_context = None self.start = None self.created_context = False def __enter__(self): self.start = self.clock.time() self.start_context = LoggingContext.current_context() if not self.start_context: self.start_context = LoggingContext("Measure") self.start_context.__enter__() self.created_context = True self.start_usage = self.start_context.get_resource_usage() def __exit__(self, exc_type, exc_val, exc_tb): if isinstance(exc_type, Exception) or not self.start_context: return duration = self.clock.time() - self.start block_counter.labels(self.name).inc() block_timer.labels(self.name).inc(duration) context = LoggingContext.current_context() if context != self.start_context: logger.warn( "Context has unexpectedly changed from '%s' to '%s'. (%r)", self.start_context, context, self.name) return if not context: logger.warn("Expected context. (%r)", self.name) return usage = context.get_resource_usage() - self.start_usage block_ru_utime.labels(self.name).inc(usage.ru_utime) block_ru_stime.labels(self.name).inc(usage.ru_stime) block_db_txn_count.labels(self.name).inc(usage.db_txn_count) block_db_txn_duration.labels(self.name).inc(usage.db_txn_duration_sec) block_db_sched_duration.labels(self.name).inc( usage.db_sched_duration_sec) if self.created_context: self.start_context.__exit__(exc_type, exc_val, exc_tb)
class Measure(object): __slots__ = [ "clock", "name", "start_context", "start", "new_context", "ru_utime", "ru_stime", "db_txn_count", "db_txn_duration", "created_context" ] def __init__(self, clock, name): self.clock = clock self.name = name self.start_context = None self.start = None self.created_context = False def __enter__(self): self.start = self.clock.time_msec() self.start_context = LoggingContext.current_context() if not self.start_context: self.start_context = LoggingContext("Measure") self.start_context.__enter__() self.created_context = True self.ru_utime, self.ru_stime = self.start_context.get_resource_usage() self.db_txn_count = self.start_context.db_txn_count self.db_txn_duration = self.start_context.db_txn_duration def __exit__(self, exc_type, exc_val, exc_tb): if isinstance(exc_type, Exception) or not self.start_context: return duration = self.clock.time_msec() - self.start block_timer.inc_by(duration, self.name) context = LoggingContext.current_context() if context != self.start_context: logger.warn( "Context has unexpectedly changed from '%s' to '%s'. (%r)", self.start_context, context, self.name ) return if not context: logger.warn("Expected context. (%r)", self.name) return ru_utime, ru_stime = context.get_resource_usage() block_ru_utime.inc_by(ru_utime - self.ru_utime, self.name) block_ru_stime.inc_by(ru_stime - self.ru_stime, self.name) block_db_txn_count.inc_by( context.db_txn_count - self.db_txn_count, self.name ) block_db_txn_duration.inc_by( context.db_txn_duration - self.db_txn_duration, self.name ) if self.created_context: self.start_context.__exit__(exc_type, exc_val, exc_tb)
class Measure(object): __slots__ = [ "clock", "name", "start_context", "start", "created_context", "start_usage", ] def __init__(self, clock, name): self.clock = clock self.name = name self.start_context = None self.start = None self.created_context = False def __enter__(self): self.start = self.clock.time() self.start_context = LoggingContext.current_context() if not self.start_context: self.start_context = LoggingContext("Measure") self.start_context.__enter__() self.created_context = True self.start_usage = self.start_context.get_resource_usage() in_flight.register((self.name,), self._update_in_flight) def __exit__(self, exc_type, exc_val, exc_tb): if isinstance(exc_type, Exception) or not self.start_context: return in_flight.unregister((self.name,), self._update_in_flight) duration = self.clock.time() - self.start block_counter.labels(self.name).inc() block_timer.labels(self.name).inc(duration) context = LoggingContext.current_context() if context != self.start_context: logger.warn( "Context has unexpectedly changed from '%s' to '%s'. (%r)", self.start_context, context, self.name ) return if not context: logger.warn("Expected context. (%r)", self.name) return current = context.get_resource_usage() usage = current - self.start_usage try: block_ru_utime.labels(self.name).inc(usage.ru_utime) block_ru_stime.labels(self.name).inc(usage.ru_stime) block_db_txn_count.labels(self.name).inc(usage.db_txn_count) block_db_txn_duration.labels(self.name).inc(usage.db_txn_duration_sec) block_db_sched_duration.labels(self.name).inc(usage.db_sched_duration_sec) except ValueError: logger.warn( "Failed to save metrics! OLD: %r, NEW: %r", self.start_usage, current ) if self.created_context: self.start_context.__exit__(exc_type, exc_val, exc_tb) def _update_in_flight(self, metrics): """Gets called when processing in flight metrics """ duration = self.clock.time() - self.start metrics.real_time_max = max(metrics.real_time_max, duration) metrics.real_time_sum += duration
class Measure(object): __slots__ = [ "clock", "name", "start_context", "start", "created_context", "start_usage", ] def __init__(self, clock, name): self.clock = clock self.name = name self.start_context = None self.start = None self.created_context = False def __enter__(self): self.start = self.clock.time() self.start_context = LoggingContext.current_context() if not self.start_context: self.start_context = LoggingContext("Measure") self.start_context.__enter__() self.created_context = True self.start_usage = self.start_context.get_resource_usage() in_flight.register((self.name, ), self._update_in_flight) def __exit__(self, exc_type, exc_val, exc_tb): if isinstance(exc_type, Exception) or not self.start_context: return in_flight.unregister((self.name, ), self._update_in_flight) duration = self.clock.time() - self.start block_counter.labels(self.name).inc() block_timer.labels(self.name).inc(duration) context = LoggingContext.current_context() if context != self.start_context: logger.warn( "Context has unexpectedly changed from '%s' to '%s'. (%r)", self.start_context, context, self.name, ) return if not context: logger.warn("Expected context. (%r)", self.name) return current = context.get_resource_usage() usage = current - self.start_usage try: block_ru_utime.labels(self.name).inc(usage.ru_utime) block_ru_stime.labels(self.name).inc(usage.ru_stime) block_db_txn_count.labels(self.name).inc(usage.db_txn_count) block_db_txn_duration.labels(self.name).inc( usage.db_txn_duration_sec) block_db_sched_duration.labels(self.name).inc( usage.db_sched_duration_sec) except ValueError: logger.warn("Failed to save metrics! OLD: %r, NEW: %r", self.start_usage, current) if self.created_context: self.start_context.__exit__(exc_type, exc_val, exc_tb) def _update_in_flight(self, metrics): """Gets called when processing in flight metrics """ duration = self.clock.time() - self.start metrics.real_time_max = max(metrics.real_time_max, duration) metrics.real_time_sum += duration