Esempio n. 1
0
    def _build_restapi_query(self) -> ModePaginatedRestApiQuery:
        """
        Build REST API Query to get Mode Dashboard last successful execution metadata.
        :return: A RestApiQuery that provides Mode Dashboard last successful execution (run)
        """

        seed_query = ModeDashboardUtils.get_seed_query(conf=self._conf)
        params = ModeDashboardUtils.get_auth_params(conf=self._conf,
                                                    discover_auth=True)

        # Reports
        # https://mode.com/developer/discovery-api/analytics/reports/
        url = 'https://app.mode.com/batch/{organization}/reports'
        json_path = 'reports[*].[token, space_token, last_successfully_run_at]'
        field_names = [
            'dashboard_id', 'dashboard_group_id', 'execution_timestamp'
        ]
        max_record_size = 1000
        pagination_json_path = 'reports[*]'
        last_successful_run_query = ModePaginatedRestApiQuery(
            query_to_join=seed_query,
            url=url,
            params=params,
            json_path=json_path,
            field_names=field_names,
            skip_no_result=True,
            max_record_size=max_record_size,
            pagination_json_path=pagination_json_path)

        return last_successful_run_query
Esempio n. 2
0
    def _build_restapi_query(self) -> ModePaginatedRestApiQuery:
        """
        Build REST API Query to get Mode Dashboard queries
        :return: A RestApiQuery that provides Mode Dashboard execution (run)
        """

        seed_query = ModeDashboardUtils.get_seed_query(conf=self._conf)
        params = ModeDashboardUtils.get_auth_params(conf=self._conf,
                                                    discover_auth=True)

        # Queries
        # https://mode.com/developer/discovery-api/analytics/queries/
        url = 'https://app.mode.com/batch/{organization}/queries'
        json_path = 'queries[*].[report_token, space_token, token, name, raw_query]'
        field_names = [
            'dashboard_id', 'dashboard_group_id', 'query_id', 'query_name',
            'query_text'
        ]
        max_record_size = 1000
        pagination_json_path = 'queries[*]'
        query_names_query = ModePaginatedRestApiQuery(
            query_to_join=seed_query,
            url=url,
            params=params,
            json_path=json_path,
            field_names=field_names,
            skip_no_result=True,
            max_record_size=max_record_size,
            pagination_json_path=pagination_json_path)

        return query_names_query
Esempio n. 3
0
    def _build_restapi_query(self) -> ModePaginatedRestApiQuery:
        """
        Build REST API Query. To get Mode Dashboard usage, it needs to call three discovery APIs (
        spaces API, reports API and report stats API).
        :return: A RestApiQuery that provides Mode Dashboard metadata
        """

        seed_query = ModeDashboardUtils.get_seed_query(conf=self._conf)
        params = ModeDashboardUtils.get_auth_params(conf=self._conf, discover_auth=True)

        # Reports
        # https://mode.com/developer/discovery-api/analytics/reports/
        reports_url = 'https://app.mode.com/batch/{organization}/reports'
        reports_json_path = 'reports[*].[token, space_token]'
        reports_field_names = ['dashboard_id', 'dashboard_group_id']
        reports_max_record_size = 1000
        reports_pagination_json_path = 'reports[*]'
        spaces_query = ModeDashboardUtils.get_spaces_query_api(conf=self._conf)
        spaces_query_merger = QueryMerger(query_to_merge=spaces_query, merge_key='dashboard_group_id')
        reports_query = ModePaginatedRestApiQuery(query_to_join=seed_query, url=reports_url, params=params,
                                                  json_path=reports_json_path, field_names=reports_field_names,
                                                  skip_no_result=True, max_record_size=reports_max_record_size,
                                                  pagination_json_path=reports_pagination_json_path,
                                                  query_merger=spaces_query_merger)

        # https://mode.com/developer/discovery-api/analytics/report-stats/
        stats_url = 'https://app.mode.com/batch/{organization}/report_stats'
        stats_json_path = 'report_stats[*].[report_token, view_count]'
        stats_field_names = ['dashboard_id', 'accumulated_view_count']
        stats_max_record_size = 1000
        stats_pagination_json_path = 'report_stats[*]'
        reports_query_merger = QueryMerger(query_to_merge=reports_query, merge_key='dashboard_id')
        report_stats_query = ModePaginatedRestApiQuery(query_to_join=seed_query, url=stats_url, params=params,
                                                       json_path=stats_json_path, field_names=stats_field_names,
                                                       skip_no_result=True, max_record_size=stats_max_record_size,
                                                       pagination_json_path=stats_pagination_json_path,
                                                       query_merger=reports_query_merger)

        return report_stats_query
Esempio n. 4
0
    def _build_restapi_query(self) -> ModePaginatedRestApiQuery:
        """
        Build REST API Query to get Mode Dashboard metadata
        :return: A RestApiQuery that provides Mode Dashboard metadata
        """
        seed_query = ModeDashboardUtils.get_seed_query(conf=self._conf)
        params = ModeDashboardUtils.get_auth_params(conf=self._conf,
                                                    discover_auth=True)

        # Reports
        # https://mode.com/developer/discovery-api/analytics/reports/
        url = 'https://app.mode.com/batch/{organization}/reports'
        json_path = 'reports[*].[token, name, description, created_at, space_token]'
        field_names = [
            'dashboard_id', 'dashboard_name', 'description',
            'created_timestamp', 'dashboard_group_id'
        ]
        max_record_size = 1000
        pagination_json_path = 'reports[*]'

        spaces_query = ModeDashboardUtils.get_spaces_query_api(conf=self._conf)
        query_merger = QueryMerger(query_to_merge=spaces_query,
                                   merge_key='dashboard_group_id')

        reports_query = ModePaginatedRestApiQuery(
            query_to_join=seed_query,
            url=url,
            params=params,
            json_path=json_path,
            field_names=field_names,
            skip_no_result=True,
            max_record_size=max_record_size,
            pagination_json_path=pagination_json_path,
            query_merger=query_merger)

        return reports_query