Source code for tcex.tcex_metrics_v2

# -*- coding: utf-8 -*-
""" TcEx Metrics Module """


[docs]class TcExMetricsV2(object): """TcEx Metrics Class""" def __init__(self, tcex, name, description, data_type, interval, keyed=False): """Initialize the Class properties. Args: name (str): The name for the metric. description (str): The description of the metric. data_type (str): The type of metric: Sum, Count, Min, Max, First, Last, and Average. interval (str): The metric interval: Hourly, Daily, Weekly, Monthly, and Yearly. keyed (bool, default:False): Indicates whether the data will have a keyed value. """ self.tcex = tcex self._metric_data_type = data_type self._metric_description = description self._metric_id = None self._metric_interval = interval self._metric_keyed = keyed self._metric_name = name if not self.metric_find(): self.metric_create()
[docs] def metric_create(self): """Create the defined metric. .. code-block:: javascript { "status": "Success", "data": { "customMetricConfig": { "id": 12, "name": "Added Reports", "dataType": "Sum", "interval": "Daily", "keyedValues": false, "description": "Added reports daily count." } } } """ body = { 'dataType': self._metric_data_type, 'description': self._metric_description, 'interval': self._metric_interval, 'name': self._metric_name, 'keyedValues': self._metric_keyed, } self.tcex.log.debug('metric body: {}'.format(body)) r = self.tcex.session.post('/v2/customMetrics', json=body) if not r.ok or 'application/json' not in r.headers.get('content-type', ''): self.tcex.handle_error(700, [r.status_code, r.text]) data = r.json() self._metric_id = data.get('data', {}).get('customMetricConfig', {}).get('id') self.tcex.log.debug('metric data: {}'.format(data))
[docs] def metric_find(self): """Find the Metric by name. .. code-block:: javascript { "status": "Success", "data": { "resultCount": 1, "customMetricConfig": [ { "id": 9, "name": "My Metric", "dataType": "Sum", "interval": "Daily", "keyedValues": false, "description": "TcEx Metric Testing" } ] } } """ params = {'resultLimit': 50, 'resultStart': 0} while True: if params.get('resultStart') >= params.get('resultLimit'): break r = self.tcex.session.get('/v2/customMetrics', params=params) if not r.ok or 'application/json' not in r.headers.get('content-type', ''): self.tcex.handle_error(705, [r.status_code, r.text]) data = r.json() for metric in data.get('data', {}).get('customMetricConfig'): if metric.get('name') == self._metric_name: self._metric_id = metric.get('id') info = 'found metric with name "{}" and Id {}.' self.tcex.log.info(info.format(self._metric_name, self._metric_id)) return True params['resultStart'] += params.get('resultLimit') return False
[docs] def add(self, value, date=None, return_value=False, key=None): """Add metrics data to collection. Args: value (str): The value of the metric. date (str, optional): The optional date of the metric. return_value (bool, default:False): Tell the API to return the updates metric value. key (str, optional): The key value for keyed metrics. Return: dict: If return_value is True a dict with the current value for the time period is returned. """ data = {} if self._metric_id is None: self.tcex.handle_error(715, [self._metric_name]) body = {'value': value} if date is not None: body['date'] = self.tcex.utils.format_datetime(date, date_format='%Y-%m-%dT%H:%M:%SZ') if key is not None: body['name'] = key self.tcex.log.debug('metric data: {}'.format(body)) params = {} if return_value: params = {'returnValue': 'true'} url = '/v2/customMetrics/{}/data'.format(self._metric_id) r = self.tcex.session.post(url, json=body, params=params) if r.status_code == 200 and 'application/json' in r.headers.get('content-type', ''): data = r.json() elif r.status_code == 204: pass else: self.tcex.handle_error(710, [r.status_code, r.text]) return data
[docs] def add_keyed(self, value, key, date=None, return_value=False): """Add keyed metrics data to collection. Args: value (str): The value of the metric. key (str): The key value for keyed metrics. date (str, optional): The optional date of the metric. return_value (bool, default:False): Tell the API to return the updates metric value. Return: dict: If return_value is True a dict with the current value for the time period is returned. """ return self.add(value, date, return_value, key)