Skip to content

Commit 75a0934

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 855c790 + aa1695a commit 75a0934

File tree

12 files changed

+494
-304
lines changed

12 files changed

+494
-304
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Features
1414
- Four types of metric are supported: Counter, Gauge, Summary(without quantiles) and Histogram.
1515
- InMemoryStorage (do not use it for multiprocessing apps)
1616
- UWSGI storage - share metrics between processes
17+
- UWAGI flush storage - sync metrics with uwsgi sharedarea by flush call
1718
- time decorator
1819
- time context manager
1920

conftest.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,21 @@ def project_root():
2222
def run_around_tests():
2323
m = uwsgi.sharedarea_memoryview(0)
2424
for x in xrange(len(m)):
25-
m[x] = '\x00'
25+
m[x] = "\x00"
2626

2727
yield
2828

29+
2930
@pytest.fixture
3031
def measure_time():
3132
return measure_time_manager
33+
34+
35+
@pytest.fixture()
36+
def iterations():
37+
return 500
38+
39+
40+
@pytest.fixture()
41+
def num_workers():
42+
return 10

pyprometheus/contrib/uwsgi_features.py

Lines changed: 162 additions & 61 deletions
Large diffs are not rendered by default.

pyprometheus/metrics.py

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,10 @@
1111
:github: http://github.com/Lispython/pyprometheus
1212
"""
1313

14-
15-
1614
from pyprometheus.const import TYPES
1715
from pyprometheus.values import (MetricValue, GaugeValue,
1816
CounterValue, SummaryValue,
1917
HistogramValue)
20-
2118
class BaseMetric(object):
2219

2320
value_class = MetricValue
@@ -94,7 +91,7 @@ def text_export_header(self):
9491
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
9592
# TYPE go_gc_duration_seconds summary
9693
"""
97-
return '\n'.join(["# HELP {name} {doc}",
94+
return "\n".join(["# HELP {name} {doc}",
9895
"# TYPE {name} {metric_type}"]).format(
9996
name=self.name,
10097
doc=self.doc,
@@ -103,7 +100,7 @@ def text_export_header(self):
103100
def build_samples(self, items):
104101
"""Build samples from objects
105102
106-
[((2, 'metric_gauge_name', '', (('label1', 'value3'), ('label2', 'value4'))), 5.0)]
103+
[((2, "metric_gauge_name", "", (("label1", "value3"), ("label2", "value4"))), 5.0)]
107104
"""
108105
for label_values, data in items:
109106
self.add_sample(label_values, self.build_sample(label_values, data))
@@ -132,27 +129,22 @@ def __getattr__(self, name):
132129
# return super(BaseMetric, self).__getattr__(name)
133130

134131

135-
136-
137-
138-
139132
class Gauge(BaseMetric):
140133

141134
TYPE = "gauge"
142135

143136
value_class = GaugeValue
144137

145-
PARENT_METHODS = set(('inc', 'dec', 'set', 'get', 'track_inprogress',
146-
'set_to_current_time', 'time', 'value'))
147-
138+
PARENT_METHODS = set(("inc", "dec", "set", "get", "track_inprogress",
139+
"set_to_current_time", "time", "value"))
148140

149141

150142
class Counter(BaseMetric):
151143
TYPE = "counter"
152144

153145
value_class = CounterValue
154146

155-
PARENT_METHODS = set(('inc', 'get', 'value'))
147+
PARENT_METHODS = set(("inc", "get", "value"))
156148

157149

158150
class Summary(BaseMetric):
@@ -162,9 +154,9 @@ class Summary(BaseMetric):
162154

163155
value_class = SummaryValue
164156

165-
NOT_ALLOWED_LABELS = set('quantile')
157+
NOT_ALLOWED_LABELS = set("quantile")
166158

167-
PARENT_METHODS = set(('observe', 'value', 'time'))
159+
PARENT_METHODS = set(("observe", "value", "time"))
168160

169161
def __init__(self, name, doc, labels=[], quantiles=False, registry=None):
170162
self._quantiles = list(sorted(quantiles)) if quantiles else []
@@ -176,21 +168,21 @@ def quantiles(self):
176168

177169
def build_sample(self, label_values, data):
178170
subtypes = {
179-
'sum': None,
180-
'count': None,
181-
'quantiles': [] if isinstance(self._quantiles, (list, tuple)) else None
171+
"sum": None,
172+
"count": None,
173+
"quantiles": [] if isinstance(self._quantiles, (list, tuple)) else None
182174
}
183175

184176
for meta, value in data:
185177
value_class = self.value_class.SUBTYPES[meta[2]]
186178

187179
if meta[0] == TYPES.SUMMARY_SUM:
188-
subtypes['sum'] = value_class(self, label_values=label_values, value=value)
180+
subtypes["sum"] = value_class(self, label_values=label_values, value=value)
189181
elif meta[0] == TYPES.SUMMARY_COUNTER:
190-
subtypes['count'] = value_class(self, label_values=label_values, value=value)
182+
subtypes["count"] = value_class(self, label_values=label_values, value=value)
191183
elif meta[0] == TYPES.SUMMARY_QUANTILE:
192-
quantile = dict(meta[3])['quantile']
193-
subtypes['quantiles'].append(
184+
quantile = dict(meta[3])["quantile"]
185+
subtypes["quantiles"].append(
194186
value_class(self, label_values=label_values, quantile=quantile, value=value))
195187

196188
return self.value_class(self, label_values=label_values, value=subtypes)
@@ -200,13 +192,13 @@ class Histogram(BaseMetric):
200192
TYPE = "histogram"
201193

202194
DEFAULT_BUCKETS = (0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5,
203-
0.75, 1.0, 2.5, 5.0, 7.5, 10.0, float('inf'))
195+
0.75, 1.0, 2.5, 5.0, 7.5, 10.0, float("inf"))
204196

205-
NOT_ALLOWED_LABELS = set('le')
197+
NOT_ALLOWED_LABELS = set("le")
206198

207199
value_class = HistogramValue
208200

209-
PARENT_METHODS = set(('observe', 'value', 'time'))
201+
PARENT_METHODS = set(("observe", "value", "time"))
210202

211203
def __init__(self, name, doc, labels=[], buckets=DEFAULT_BUCKETS, registry=None):
212204
self._buckets = list(sorted(buckets)) if buckets else []
@@ -219,21 +211,21 @@ def buckets(self):
219211

220212
def build_sample(self, label_values, data):
221213
subtypes = {
222-
'sum': None,
223-
'count': None,
224-
'buckets': [] if isinstance(self._buckets, (list, tuple)) else None
214+
"sum": None,
215+
"count": None,
216+
"buckets": [] if isinstance(self._buckets, (list, tuple)) else None
225217
}
226218

227219
for meta, value in data:
228220
value_class = self.value_class.SUBTYPES[meta[2]]
229221

230222
if meta[0] == TYPES.HISTOGRAM_SUM:
231-
subtypes['sum'] = value_class(self, label_values=label_values, value=value)
223+
subtypes["sum"] = value_class(self, label_values=label_values, value=value)
232224
elif meta[0] == TYPES.HISTOGRAM_COUNTER:
233-
subtypes['count'] = value_class(self, label_values=label_values, value=value)
225+
subtypes["count"] = value_class(self, label_values=label_values, value=value)
234226
elif meta[0] == TYPES.HISTOGRAM_BUCKET:
235-
bucket = dict(meta[3])['bucket']
236-
subtypes['buckets'].append(
227+
bucket = dict(meta[3])["bucket"]
228+
subtypes["buckets"].append(
237229
value_class(self, label_values=label_values, bucket=bucket, value=value))
238230

239231
return self.value_class(self, label_values=label_values, value=subtypes)

pyprometheus/storage.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,9 @@ def label_group(self, value):
8383
class LocalMemoryStorage(BaseStorage):
8484

8585
def __init__(self):
86-
self._storage = defaultdict(lambda: defaultdict(lambda: defaultdict(float)))
8786
self._storage = defaultdict(float)
8887
self._lock = Lock()
8988

90-
9189
def inc_value(self, key, value):
9290
with self._lock:
9391
self._storage[key] += value

0 commit comments

Comments
 (0)