A single summary and its samples. For use by custom collectors.
| 178 | |
| 179 | |
| 180 | class SummaryMetricFamily(Metric): |
| 181 | """A single summary and its samples. |
| 182 | |
| 183 | For use by custom collectors. |
| 184 | """ |
| 185 | |
| 186 | def __init__(self, |
| 187 | name: str, |
| 188 | documentation: str, |
| 189 | count_value: Optional[int] = None, |
| 190 | sum_value: Optional[float] = None, |
| 191 | labels: Optional[Sequence[str]] = None, |
| 192 | unit: str = '', |
| 193 | ): |
| 194 | Metric.__init__(self, name, documentation, 'summary', unit) |
| 195 | if (sum_value is None) != (count_value is None): |
| 196 | raise ValueError('count_value and sum_value must be provided together.') |
| 197 | if labels is not None and count_value is not None: |
| 198 | raise ValueError('Can only specify at most one of value and labels.') |
| 199 | if labels is None: |
| 200 | labels = [] |
| 201 | self._labelnames = tuple(labels) |
| 202 | # The and clause is necessary only for typing, the above ValueError will raise if only one is set. |
| 203 | if count_value is not None and sum_value is not None: |
| 204 | self.add_metric([], count_value, sum_value) |
| 205 | |
| 206 | def add_metric(self, |
| 207 | labels: Sequence[str], |
| 208 | count_value: int, |
| 209 | sum_value: float, |
| 210 | timestamp: |
| 211 | Optional[Union[float, Timestamp]] = None |
| 212 | ) -> None: |
| 213 | """Add a metric to the metric family. |
| 214 | |
| 215 | Args: |
| 216 | labels: A list of label values |
| 217 | count_value: The count value of the metric. |
| 218 | sum_value: The sum value of the metric. |
| 219 | """ |
| 220 | self.samples.append(Sample(self.name + '_count', dict(zip(self._labelnames, labels)), count_value, timestamp)) |
| 221 | self.samples.append(Sample(self.name + '_sum', dict(zip(self._labelnames, labels)), sum_value, timestamp)) |
| 222 | |
| 223 | |
| 224 | class HistogramMetricFamily(Metric): |
no outgoing calls