Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Sanity-checking for metrics updates
Browse files Browse the repository at this point in the history
Check that our clocks go forward.
  • Loading branch information
richvdh committed Jun 19, 2019
1 parent f682af0 commit fe641df
Showing 1 changed file with 33 additions and 7 deletions.
40 changes: 33 additions & 7 deletions synapse/util/logcontext.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,10 +325,9 @@ def stop(self):
)
return

usage_end = get_thread_resource_usage()

self._resource_usage.ru_utime += usage_end.ru_utime - self.usage_start.ru_utime
self._resource_usage.ru_stime += usage_end.ru_stime - self.usage_start.ru_stime
utime_delta, stime_delta = self._get_cputime()
self._resource_usage.ru_utime += utime_delta
self._resource_usage.ru_stime += stime_delta

self.usage_start = None

Expand All @@ -346,13 +345,38 @@ def get_resource_usage(self):
# can include resource usage so far.
is_main_thread = threading.current_thread() is self.main_thread
if self.alive and self.usage_start and is_main_thread:
current = get_thread_resource_usage()
res.ru_utime += current.ru_utime - self.usage_start.ru_utime
res.ru_stime += current.ru_stime - self.usage_start.ru_stime
utime_delta, stime_delta = self._get_cputime()
res.ru_utime += utime_delta
res.ru_stime += stime_delta

return res

def _get_cputime(self):
"""Get the cpu usage time so far
Returns: Tuple[float, float]: seconds in user mode, seconds in system mode
"""
current = get_thread_resource_usage()

utime_delta = current.ru_utime - self.usage_start.ru_utime
stime_delta = current.ru_stime - self.usage_start.ru_stime

# sanity check
if utime_delta < 0:
raise ValueError("utime went backwards! %f < %f" % (
current.ru_utime, self.usage_start.ru_utime,
))

if stime_delta < 0:
raise ValueError("stime went backwards! %f < %f" % (
current.ru_stime, self.usage_start.ru_stime,
))

return utime_delta, stime_delta

def add_database_transaction(self, duration_sec):
if duration_sec < 0:
raise ValueError('DB txn time can only be non-negative')
self._resource_usage.db_txn_count += 1
self._resource_usage.db_txn_duration_sec += duration_sec

Expand All @@ -363,6 +387,8 @@ def add_database_scheduled(self, sched_sec):
sched_sec (float): number of seconds it took us to get a
connection
"""
if sched_sec < 0:
raise ValueError('DB scheduling time can only be non-negative')
self._resource_usage.db_sched_duration_sec += sched_sec

def record_event_fetch(self, event_count):
Expand Down

0 comments on commit fe641df

Please sign in to comment.