Skip to content

Commit 8e30d7d

Browse files
authored
Add kwargs to derived gauge (census-instrumentation#1135)
1 parent 7783196 commit 8e30d7d

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Changelog
22

33
## Unreleased
4-
- Allow specifying metrics (custom_measurements) for Azure custom events
5-
([#1117](https://github.com/census-instrumentation/opencensus-python/pull/1117))
4+
5+
- Add kwargs to derived gauge
6+
([#1135](https://github.com/census-instrumentation/opencensus-python/pull/1135))
67

78
# 0.9.0
89
Released 2022-04-20

contrib/opencensus-ext-azure/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Unreleased
44

5+
- Allow specifying metrics (custom_measurements) for Azure custom events
6+
([#1117](https://github.com/census-instrumentation/opencensus-python/pull/1117))
57
- Shutdown Statsbeat when hitting error/exception threshold
68
([#1127](https://github.com/census-instrumentation/opencensus-python/pull/1127))
79
- Fix failure counting statsbeat - refactor status code logic in transport

opencensus/metrics/export/gauge.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,17 @@ class DerivedGaugePoint(GaugePoint):
194194
:class:`opencensus.metrics.export.cumulative.CumulativePointDouble`
195195
:param gauge_point: The underlying `GaugePoint`.
196196
"""
197-
def __init__(self, func, gauge_point):
197+
def __init__(self, func, gauge_point, **kwargs):
198198
self.gauge_point = gauge_point
199199
self.func = utils.get_weakref(func)
200+
self._kwargs = kwargs
200201

201202
def __repr__(self):
202-
return ("{}({})"
203+
return ("{}({})({})"
203204
.format(
204205
type(self).__name__,
205-
self.func()
206+
self.func(),
207+
self._kwargs
206208
))
207209

208210
def get_value(self):
@@ -216,7 +218,7 @@ def get_value(self):
216218
longer exists.
217219
"""
218220
try:
219-
val = self.func()()
221+
val = self.func()(**self._kwargs)
220222
except TypeError: # The underlying function has been GC'd
221223
return None
222224

@@ -406,13 +408,13 @@ class DerivedGauge(BaseGauge):
406408
instead of using this class directly.
407409
"""
408410

409-
def _create_time_series(self, label_values, func):
411+
def _create_time_series(self, label_values, func, **kwargs):
410412
with self._points_lock:
411413
return self.points.setdefault(
412414
tuple(label_values),
413-
DerivedGaugePoint(func, self.point_type()))
415+
DerivedGaugePoint(func, self.point_type(), **kwargs))
414416

415-
def create_time_series(self, label_values, func):
417+
def create_time_series(self, label_values, func, **kwargs):
416418
"""Create a derived measurement to trac `func`.
417419
418420
:type label_values: list(:class:`LabelValue`)
@@ -432,7 +434,7 @@ def create_time_series(self, label_values, func):
432434
raise ValueError
433435
if func is None:
434436
raise ValueError
435-
return self._create_time_series(label_values, func)
437+
return self._create_time_series(label_values, func, **kwargs)
436438

437439
def create_default_time_series(self, func):
438440
"""Create the default derived measurement for this gauge.

tests/unit/metrics/export/test_gauge.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,15 @@ def test_create_time_series(self):
393393
unused_mock_fn.assert_not_called()
394394
self.assertEqual(len(derived_gauge.points.keys()), 1)
395395

396+
# with kwargs
397+
def fn_with_args(value=None):
398+
if value:
399+
return value
400+
return 0
401+
label_values2 = [1, 2]
402+
point3 = derived_gauge.create_time_series(label_values2, fn_with_args, value=5) # noqa: E501
403+
self.assertEqual(point3.get_value(), 5)
404+
396405
def test_create_default_time_series(self):
397406
derived_gauge = gauge.DerivedLongGauge(
398407
Mock(), Mock(), Mock(), [Mock(), Mock])

0 commit comments

Comments
 (0)