def inspect(self, metric_type, window): """Inspect a specific metric. Returns timeseries beteween now and 300 seconds before. Args: metric_type (str): Metric type. window: Window (in seconds). Returns: list: List of timeseries. """ LOGGER.debug( f'Inspecting metric "{metric_type}" in project "{self.project_id}"' ' ...') metric = list(self.get(metric_type))[0] LOGGER.info(metric) metric_type = metric['type'] interval = types.TimeInterval() now = time.time() interval.end_time.seconds = int(now) interval.end_time.nanos = int( (now - interval.end_time.seconds) * 10**9) interval.start_time.seconds = int(now - window) interval.start_time.nanos = interval.end_time.nanos results = list( self.client.list_time_series( self.project, 'metric.type = "%s"' % metric_type, interval, enums.ListTimeSeriesRequest.TimeSeriesView.FULL)) return results
def inspect(self, metric_type, window, filters={}): """Inspect a specific metric. Returns timeseries beteween now and 300 seconds before. Args: metric_type (str): Metric type. window: Window (in seconds). filters (list): List of filters. Returns: list: List of timeseries. """ LOGGER.debug( f'Inspecting metric "{metric_type}" in project "{self.project_id}"' ' ...' ) metric = list(self.get(metric_type))[0] LOGGER.info(metric) metric_type = metric['type'] interval = types.TimeInterval() now = time.time() interval.end_time.seconds = int(now) interval.end_time.nanos = int( (now - interval.end_time.seconds) * 10**9) interval.start_time.seconds = int(now - window) interval.start_time.nanos = interval.end_time.nanos query = f'metric.type = "{metric_type}"' for filter_key, filter_value in filters.items(): query += f' {filter_key} = {filter_value}' LOGGER.debug(f'Running query "{query}" ...') results = list( self.client.list_time_series( self.project, query, interval, enums.ListTimeSeriesRequest.TimeSeriesView.FULL)) return results
def _make_interval(end_time, start_time=None): from google.cloud.monitoring_v3 import types interval = types.TimeInterval() interval.end_time.FromDatetime(end_time) if start_time is not None: interval.start_time.FromDatetime(start_time) return interval
def inspect(self, metric_type, window, filters={}): """Inspect a specific metric. Returns timeseries beteween now and 300 seconds before. Args: metric_type (str): Metric type. window: Window (in seconds). filters (list): List of filters. Returns: list: List of timeseries. """ LOGGER.debug( f'Inspecting metric "{metric_type}" in project "{self.project_id}"' ' ...') metric = list(self.get(metric_type))[0] LOGGER.info(metric) metric_type = metric['type'] interval = types.TimeInterval() now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) interval = TimeInterval({ "end_time": { "seconds": seconds, "nanos": nanos }, "start_time": { "seconds": (seconds - window), "nanos": nanos } }) # TODO: Add custom aggregation filters # aggregation = monitoring_v3.Aggregation({ # "alignment_period": { # "seconds": 1200 # }, # 20 minutes # "per_series_aligner": # monitoring_v3.Aggregation.Aligner.ALIGN_MEAN, # "cross_series_reducer": # monitoring_v3.Aggregation.Reducer.REDUCE_MEAN, # "group_by_fields": ["resource.zone"], # }) query = f'metric.type = "{metric_type}"' for filter_key, filter_value in filters.items(): query += f' {filter_key} = {filter_value}' LOGGER.debug(f'Running query "{query}" ...') results = self.client.list_time_series( request={ "name": self.project, "filter": query, "interval": interval, "view": ListTimeSeriesRequest.TimeSeriesView.FULL, # "aggregation": aggregation # TODO: Uncomment this }) return results
def _build_query_params(self, headers_only=False, page_size=None): """Return key-value pairs for the list_time_series API call. :type headers_only: bool :param headers_only: Whether to omit the point data from the :class:`~google.cloud.monitoring_v3.types.TimeSeries` objects. :type page_size: int :param page_size: (Optional) The maximum number of points in each page of results from this request. Non-positive values are ignored. Defaults to a sensible value set by the API. """ params = {"name": self._project_path, "filter_": self.filter} params["interval"] = types.TimeInterval() params["interval"].end_time.FromDatetime(self._end_time) if self._start_time: params["interval"].start_time.FromDatetime(self._start_time) if ( self._per_series_aligner or self._alignment_period_seconds or self._cross_series_reducer or self._group_by_fields ): params["aggregation"] = types.Aggregation( per_series_aligner=self._per_series_aligner, cross_series_reducer=self._cross_series_reducer, group_by_fields=self._group_by_fields, alignment_period={"seconds": self._alignment_period_seconds}, ) if headers_only: params["view"] = enums.ListTimeSeriesRequest.TimeSeriesView.HEADERS else: params["view"] = enums.ListTimeSeriesRequest.TimeSeriesView.FULL if page_size is not None: params["page_size"] = page_size return params
def _build_query_params(self, headers_only=False, page_size=None): """Return key-value pairs for the list_time_series API call. :type headers_only: bool :param headers_only: Whether to omit the point data from the :class:`~google.cloud.monitoring_v3.types.TimeSeries` objects. :type page_size: int :param page_size: (Optional) A limit on the number of points to return per page. """ params = {'name': self._project_path, 'filter_': self.filter} params['interval'] = types.TimeInterval() params['interval'].end_time.FromDatetime(self._end_time) if self._start_time: params['interval'].start_time.FromDatetime(self._start_time) if (self._per_series_aligner or self._alignment_period_seconds or self._cross_series_reducer or self._group_by_fields): params['aggregation'] = types.Aggregation( per_series_aligner=self._per_series_aligner, cross_series_reducer=self._cross_series_reducer, group_by_fields=self._group_by_fields, alignment_period={'seconds': self._alignment_period_seconds}, ) if headers_only: params['view'] = enums.ListTimeSeriesRequest.TimeSeriesView.HEADERS else: params['view'] = enums.ListTimeSeriesRequest.TimeSeriesView.FULL if page_size is not None: params['page_size'] = page_size return params
def P(timestamp, value): interval = types.TimeInterval() interval.start_time.FromJsonString(timestamp) interval.end_time.FromJsonString(timestamp) return types.Point(interval=interval, value={"double_value": value})