Shortcuts

Source code for ts.metrics.metrics_store



"""
Metrics collection module
"""
from builtins import str

from ts.metrics.dimension import Dimension
from ts.metrics.metric import Metric


[docs]class MetricsStore(object): """ DEPRECATED Class for creating, modifying different metrics. And keep them in a dictionary """ def __init__(self, request_ids, model_name): """ Initialize metrics map,model name and request map """ self.store = list() self.request_ids = request_ids self.model_name = model_name self.cache = {} def _add_or_update(self, name, value, req_id, unit, metrics_method=None, dimensions=None): """ Add a metric key value pair Parameters ---------- name : str metric name value: int, float value of metric req_id: str request id unit: str unit of metric value: int, float , str value of metric metrics_method: str, optional indicates type of metric operation if it is defined """ # IF req_id is none error Metric if dimensions is None: dimensions = list() elif not isinstance(dimensions, list): raise ValueError("Please provide a list of dimensions") if req_id is None: dimensions.append(Dimension("Level", "Error")) else: dimensions.append(Dimension("ModelName", self.model_name)) dimensions.append(Dimension("Level", "Model")) # Cache the metric with an unique key for update dim_str = [name, unit, str(req_id)] + [str(d) for d in dimensions] dim_str = '-'.join(dim_str) if dim_str not in self.cache: metric = Metric(name, value, unit, dimensions, req_id, metrics_method) self.store.append(metric) self.cache[dim_str] = metric else: self.cache[dim_str].update(value) def _get_req(self, idx): """ Provide the request id dimension Parameters ---------- idx : int request_id index in batch """ # check if request id for the metric is given, if so use it else have a list of all. req_id = self.request_ids if isinstance(req_id, dict): req_id = ','.join(self.request_ids.values()) if idx is not None and self.request_ids is not None and idx in self.request_ids: req_id = self.request_ids[idx] return req_id
[docs] def add_counter(self, name, value, idx=None, dimensions=None): """ Add a counter metric or increment an existing counter metric Parameters ---------- name : str metric name value: int value of metric idx: int request_id index in batch dimensions: list list of dimensions for the metric """ unit = 'count' req_id = self._get_req(idx) self._add_or_update(name, value, req_id, unit, 'counter', dimensions)
[docs] def add_time(self, name, value, idx=None, unit='ms', dimensions=None): """ Add a time based metric like latency, default unit is 'ms' Parameters ---------- name : str metric name value: int value of metric idx: int request_id index in batch unit: str unit of metric, default here is ms, s is also accepted dimensions: list list of dimensions for the metric """ if unit not in ['ms', 's']: raise ValueError("the unit for a timed metric should be one of ['ms', 's']") req_id = self._get_req(idx) self._add_or_update(name, value, req_id, unit, dimensions)
[docs] def add_size(self, name, value, idx=None, unit='MB', dimensions=None): """ Add a size based metric Parameters ---------- name : str metric name value: int, float value of metric idx: int request_id index in batch unit: str unit of metric, default here is 'MB', 'kB', 'GB' also supported dimensions: list list of dimensions for the metric """ if unit not in ['MB', 'kB', 'GB', 'B']: raise ValueError("The unit for size based metric is one of ['MB','kB', 'GB', 'B']") req_id = self._get_req(idx) self._add_or_update(name, value, req_id, unit, dimensions)
[docs] def add_percent(self, name, value, idx=None, dimensions=None): """ Add a percentage based metric Parameters ---------- name : str metric name value: int, float value of metric idx: int request_id index in batch dimensions: list list of dimensions for the metric """ unit = 'percent' req_id = self._get_req(idx) self._add_or_update(name, value, req_id, unit, dimensions)
[docs] def add_error(self, name, value, dimensions=None): """ Add a Error Metric Parameters ---------- name : str metric name value: str value of metric, in this case a str dimensions: list list of dimensions for the metric """ unit = '' # noinspection PyTypeChecker self._add_or_update(name, value, None, unit, dimensions)
[docs] def add_metric(self, name, value, unit, idx=None, dimensions=None): """ Add a metric which is generic with custom metrics Parameters ---------- name : str metric name value: int, float value of metric idx: int request_id index in batch unit: str unit of metric dimensions: list list of dimensions for the metric """ req_id = self._get_req(idx) self._add_or_update(name, value, req_id, unit, dimensions)

Docs

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Find development resources and get your questions answered

View Resources