9from searx
import logger
12__all__ = [
"Histogram",
"HistogramStorage",
"CounterStorage"]
14logger = logger.getChild(
'searx.metrics')
19 _slots__ =
'_lock',
'_size',
'_sum',
'_quartiles',
'_count',
'_width'
30 q = int(value / self.
_width)
63 '''Quartile in percentage'''
73 x = decimal.Decimal(0)
74 width = decimal.Decimal(self.
_width)
75 width_exponent = -width.as_tuple().exponent
79 yp = int(y * 100 / self.
_count)
81 result[round(float(x), width_exponent)] = yp
87 x = decimal.Decimal(0)
88 width = decimal.Decimal(self.
_width)
89 stop_at_value = decimal.Decimal(self.
_count) / 100 * percentage
95 if sum_value >= stop_at_value:
101 return "Histogram<avg: " + str(self.
average) +
", count: " + str(self.
_count) +
">"
106 __slots__ =
'measures',
'histogram_class'
124 logger.debug(
"Histograms:")
125 ks = sorted(self.
measures.keys(), key=
'/'.join)
127 logger.debug(
"- %-60s %s",
'|'.join(k), self.
measures[k])
132 __slots__ =
'counters',
'lock'
146 def get(self, *args: str):
149 def add(self, value: int, *args: str):
155 ks = sorted(self.
counters.keys(), key=
'/'.join)
156 logger.debug(
"Counters:")
158 logger.debug(
"- %-60s %s",
'|'.join(k), self.
counters[k])
166class VoidCounterStorage(CounterStorage):
167 def add(self, value, *args):
add(self, int value, *str args)
configure(self, *str args)
__init__(self, histogram_class=Histogram)
configure(self, width, size, *args)
quartile_percentage_map(self)
quartile_percentage(self)
percentage(self, percentage)
__init__(self, width=10, size=200)