Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: infra_libs/ts_mon/common/metric_store.py

Issue 2109393002: Make test_net_info a bit more robust. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Add tests Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « infra/services/sysmon/test/system_metrics_test.py ('k') | infra_libs/ts_mon/common/metrics.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import collections 5 import collections
6 import copy 6 import copy
7 import itertools
7 import threading 8 import threading
8 import time 9 import time
9 10
10 from infra_libs.ts_mon.common import errors 11 from infra_libs.ts_mon.common import errors
11 12
12 13
13 """A light-weight representation of a set or an incr. 14 """A light-weight representation of a set or an incr.
14 15
15 Args: 16 Args:
16 name: The metric name. 17 name: The metric name.
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 def set_value(self, fields, target_fields, value): 198 def set_value(self, fields, target_fields, value):
198 self.get_target_values(target_fields).set_value(fields, value) 199 self.get_target_values(target_fields).set_value(fields, value)
199 200
200 def iter_targets(self): 201 def iter_targets(self):
201 # Make a copy of the values in case another thread (or this 202 # Make a copy of the values in case another thread (or this
202 # generator's consumer) modifies them while we're iterating. 203 # generator's consumer) modifies them while we're iterating.
203 with self._thread_lock: 204 with self._thread_lock:
204 values = copy.copy(self._values) 205 values = copy.copy(self._values)
205 for target_fields, fields_values in values.iteritems(): 206 for target_fields, fields_values in values.iteritems():
206 target = copy.copy(self._store._state.target) 207 target = copy.copy(self._store._state.target)
207 target.update({k: v for k, v in target_fields}) 208 if target_fields:
209 target.update({k: v for k, v in target_fields})
208 yield target, fields_values 210 yield target, fields_values
209 211
210 212
211 class MetricValues(object): 213 class MetricValues(object):
212 def __init__(self, store, start_time): 214 def __init__(self, store, start_time):
213 self._start_time = start_time 215 self._start_time = start_time
214 self._values = TargetFieldsValues(store) 216 self._values = TargetFieldsValues(store)
215 217
216 @property 218 @property
217 def start_time(self): 219 def start_time(self):
(...skipping 21 matching lines...) Expand all
239 241
240 def _entry(self, name): 242 def _entry(self, name):
241 if name not in self._values: 243 if name not in self._values:
242 self._reset(name) 244 self._reset(name)
243 245
244 return self._values[name] 246 return self._values[name]
245 247
246 def get(self, name, fields, target_fields, default=None): 248 def get(self, name, fields, target_fields, default=None):
247 return self._entry(name).get_value(fields, target_fields, default) 249 return self._entry(name).get_value(fields, target_fields, default)
248 250
251 def iter_field_values(self, name):
252 return itertools.chain.from_iterable(
253 x.iteritems() for _, x in self._entry(name).values.iter_targets())
254
249 def get_all(self): 255 def get_all(self):
250 # Make a copy of the metric values in case another thread (or this 256 # Make a copy of the metric values in case another thread (or this
251 # generator's consumer) modifies them while we're iterating. 257 # generator's consumer) modifies them while we're iterating.
252 with self._thread_lock: 258 with self._thread_lock:
253 values = copy.copy(self._values) 259 values = copy.copy(self._values)
254 260
255 for name, metric_values in values.iteritems(): 261 for name, metric_values in values.iteritems():
256 if name not in self._state.metrics: 262 if name not in self._state.metrics:
257 continue 263 continue
258 start_time = metric_values.start_time 264 start_time = metric_values.start_time
(...skipping 27 matching lines...) Expand all
286 292
287 def reset_for_unittest(self, name=None): 293 def reset_for_unittest(self, name=None):
288 if name is not None: 294 if name is not None:
289 self._reset(name) 295 self._reset(name)
290 else: 296 else:
291 for name in self._values.keys(): 297 for name in self._values.keys():
292 self._reset(name) 298 self._reset(name)
293 299
294 def _reset(self, name): 300 def _reset(self, name):
295 self._values[name] = MetricValues(self, self._start_time(name)) 301 self._values[name] = MetricValues(self, self._start_time(name))
OLDNEW
« no previous file with comments | « infra/services/sysmon/test/system_metrics_test.py ('k') | infra_libs/ts_mon/common/metrics.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698