Exemple #1
0
    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
Exemple #2
0
    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
Exemple #4
0
    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
Exemple #5
0
    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
Exemple #6
0
    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})