From f61e1f988fed89514540f7443f7a9d18d742c67c Mon Sep 17 00:00:00 2001 From: Rob Dominguez Date: Tue, 31 Jan 2023 17:11:48 -0600 Subject: [PATCH] docs: update pricing and badges PR-URL: https://github.com/hasura/graphql-engine-mono/pull/7719 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> GitOrigin-RevId: 60a8358fdfa08670f636c0a760eb13da7ecf0546 --- .../billing/billing-owner.mdx | 44 ++++---- .../account-management/billing/credits.mdx | 12 +-- .../docs/account-management/billing/index.mdx | 12 +-- .../billing/payment-methods.mdx | 26 ++--- .../account-management/billing/receipts.mdx | 20 ++-- docs/docs/account-management/email-change.mdx | 14 +-- docs/docs/account-management/marketplaces.mdx | 4 +- docs/docs/actions/open-api.mdx | 4 +- .../api-reference/metadata-api/api-limits.mdx | 40 ++++---- .../metadata-api/event-triggers.mdx | 48 ++++----- .../metadata-api/observability.mdx | 11 +- .../api-reference/metadata-api/table-view.mdx | 12 +-- docs/docs/api-reference/source-health.mdx | 2 +- .../connect-db/cloud-connection-pooling.mdx | 25 ++--- .../databases/connect-db/read-replicas.mdx | 12 +-- .../hasura-cloud/ci-cd/github-integration.mdx | 8 +- .../deployment/hasura-cloud/ci-cd/index.mdx | 4 +- .../hasura-cloud/ci-cd/preview-apps.mdx | 10 +- .../deployment/hasura-cloud/dedicated-vpc.mdx | 20 ++-- .../hasura-cloud/disaster-recovery.mdx | 2 +- .../hasura-cloud/high-availability.mdx | 10 +- docs/docs/deployment/hasura-cloud/plans.mdx | 96 ++++++++++++++++++ .../hasura-cloud/regression-tests.mdx | 4 +- docs/docs/deployment/hasura-cloud/sso.mdx | 35 +++---- .../health-checks/source-health-check.mdx | 18 ++-- docs/docs/enterprise/caching.mdx | 6 +- .../docs/enterprise/getting-started/index.mdx | 4 +- .../getting-started/quickstart-aws-ecs.mdx | 10 +- .../getting-started/quickstart-docker.mdx | 10 +- .../quickstart-google-cloud-run.mdx | 16 +-- .../getting-started/quickstart-kubernetes.mdx | 14 +-- .../getting-started/start-using-hasura-ee.mdx | 4 +- docs/docs/enterprise/index.mdx | 6 +- docs/docs/enterprise/metrics.mdx | 7 +- docs/docs/enterprise/release-notes.mdx | 9 +- docs/docs/enterprise/upgrade-ce-to-ee.mdx | 4 +- .../event-triggers/clean-up/auto-cleanup.mdx | 27 +++-- docs/docs/graphql-api-explorer.mdx | 8 +- docs/docs/observability/errors.mdx | 12 +-- docs/docs/observability/index.mdx | 10 +- .../integrations/azure-monitor.mdx | 82 +++++++-------- .../observability/integrations/datadog.mdx | 46 ++++----- .../docs/observability/integrations/index.mdx | 6 +- .../observability/integrations/newrelic.mdx | 8 +- .../integrations/opentelemetry.mdx | 34 +++---- .../observability/integrations/prometheus.mdx | 50 ++++----- docs/docs/observability/operations.mdx | 14 +-- docs/docs/observability/overview.mdx | 8 +- docs/docs/observability/query-tags.mdx | 12 +-- .../observability/subscription-workers.mdx | 12 +-- docs/docs/observability/tracing.mdx | 8 +- docs/docs/observability/usage.mdx | 12 +-- docs/docs/observability/websockets.mdx | 10 +- docs/docs/policies/sla.mdx | 6 +- docs/docs/projects/collaborators.mdx | 8 +- docs/docs/projects/ownership.mdx | 4 +- docs/docs/projects/pricing.mdx | 22 ++-- docs/docs/queries/response-caching.mdx | 6 +- docs/docs/security/allow-list.mdx | 10 +- docs/docs/security/api-limits.mdx | 9 +- docs/docs/security/container-images.mdx | 13 +-- .../disable-graphql-introspection.mdx | 4 +- docs/docs/security/index.mdx | 10 +- docs/docs/security/multiple-admin-secrets.mdx | 4 +- docs/docs/security/multiple-jwt-secrets.mdx | 4 +- .../img/projects/project-pricing-plans.png | Bin 54070 -> 55493 bytes 66 files changed, 567 insertions(+), 475 deletions(-) create mode 100644 docs/docs/deployment/hasura-cloud/plans.mdx diff --git a/docs/docs/account-management/billing/billing-owner.mdx b/docs/docs/account-management/billing/billing-owner.mdx index 9bebdaf878f..4657d1bf7c4 100644 --- a/docs/docs/account-management/billing/billing-owner.mdx +++ b/docs/docs/account-management/billing/billing-owner.mdx @@ -1,6 +1,6 @@ --- description: Billing owner on Hasura Cloud -title: 'Cloud: Billing owner' +title: "Cloud: Billing owner" sidebar_label: Billing owner keywords: - hasura @@ -12,12 +12,12 @@ keywords: sidebar_position: 1 --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Billing Owner -
Available on: Cloud Standard
+
Available on: Professional, Enterprise (Cloud)
## Introduction @@ -31,14 +31,14 @@ responsibility. Click `Invite a Collaborator` to invite a new collaborator as a billing owner by their email. - + Under the `User` collaborator type, select the `Billing Owner` privilege. :::info Note @@ -54,7 +54,7 @@ Click on the collaborator you want to invite as a billing owner. Under the user's existing collaborator type, check the `Billing Owner` privilege and click `Update`. - + ## Accept / reject billing owner invitation @@ -62,9 +62,9 @@ You can see the projects that you have been invited to handle billing for on the either accept or reject them. ## Remove a billing owner @@ -76,7 +76,7 @@ billing for their project. To remove a billing owner, click on the billing owner collaborator and then click on the remove icon on the top right: - + :::info Note @@ -94,17 +94,17 @@ billing for their project. To remove a collaborator's `Billing Owner` privilege, click on the billing owner collaborator. Remove the `Billing Owner` privilege for that user and click `Update`. ## Resend billing owner invitation @@ -112,7 +112,7 @@ Remove the `Billing Owner` privilege for that user and click `Update`. If you have invited a billing owner, you can click on the `Invited` button to resend the invitation. diff --git a/docs/docs/account-management/billing/credits.mdx b/docs/docs/account-management/billing/credits.mdx index 3e09bd0a9b9..2333e0d53c9 100644 --- a/docs/docs/account-management/billing/credits.mdx +++ b/docs/docs/account-management/billing/credits.mdx @@ -1,6 +1,6 @@ --- description: Hasura Cloud coupon and credits -title: 'Cloud: Coupons and credits' +title: "Cloud: Coupons and credits" keywords: - hasura - docs @@ -11,12 +11,12 @@ sidebar_position: 3 sidebar_label: Hasura Cloud credits --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Coupons and Credits -
Available on: Cloud
+
Available on: Professional, Enterprise (Cloud)
## Introduction @@ -34,9 +34,9 @@ Note If there is an active coupon and another coupon is applied, then the later ::: - + - + ## View applied coupon diff --git a/docs/docs/account-management/billing/index.mdx b/docs/docs/account-management/billing/index.mdx index 41c70eb863e..21ad3bc0fb5 100644 --- a/docs/docs/account-management/billing/index.mdx +++ b/docs/docs/account-management/billing/index.mdx @@ -1,6 +1,6 @@ --- description: Hasura Cloud billing -title: 'Cloud: Billing' +title: "Cloud: Billing" sidebar_label: Hasura Cloud billing keywords: - hasura @@ -12,18 +12,18 @@ keywords: slug: index --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Billing -
Available on: Cloud Standard
+
Available on: Professional, Enterprise (Cloud)
## Introduction All Hasura Cloud billing related details can be found under the `Billing` tab in the Hasura Cloud dashboard - + ## Details @@ -31,4 +31,4 @@ All Hasura Cloud billing related details can be found under the `Billing` tab in - [Manage payment methods](/account-management/billing/payment-methods.mdx) - [Coupons and credits](/account-management/billing/credits.mdx) - [Receipts](/account-management/billing/receipts.mdx) -- [Data usage calculation for billing](/account-management/billing/billing-data-calculation.mdx) \ No newline at end of file +- [Data usage calculation for billing](/account-management/billing/billing-data-calculation.mdx) diff --git a/docs/docs/account-management/billing/payment-methods.mdx b/docs/docs/account-management/billing/payment-methods.mdx index 5e312024b18..24934e1031f 100644 --- a/docs/docs/account-management/billing/payment-methods.mdx +++ b/docs/docs/account-management/billing/payment-methods.mdx @@ -1,6 +1,6 @@ --- description: Manage payment methods -title: 'Cloud: Manage payment methods' +title: "Cloud: Manage payment methods" sidebar_label: Manage payment methods keywords: - hasura @@ -14,12 +14,12 @@ keywords: sidebar_position: 2 --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Manage Payment Methods -
Available on: Cloud Standard
+
Available on: Professional
## Introduction @@ -29,11 +29,11 @@ You can add one or more cards as a payment method for the upcoming billing cycle Go to the billing section, and click on `View Cards`. - + Click the `+` sign to add a new card. - + After adding appropriate values, click `Save`. @@ -45,22 +45,22 @@ Select the card you want to set as the default payment method or add a new card, and click `Save`. ## Delete a card Select the card you want to delete and click the `Remove Card` option. - + :::info Note diff --git a/docs/docs/account-management/billing/receipts.mdx b/docs/docs/account-management/billing/receipts.mdx index a7530990358..a98f6b845bb 100644 --- a/docs/docs/account-management/billing/receipts.mdx +++ b/docs/docs/account-management/billing/receipts.mdx @@ -1,6 +1,6 @@ --- description: Hasura Cloud receipts -title: 'Cloud: Receipts' +title: "Cloud: Receipts" sidebar_label: Hasura Cloud receipts keywords: - hasura @@ -11,12 +11,12 @@ keywords: sidebar_position: 4 --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Receipts -
Available on: Cloud Standard
+
Available on: Professional
## Introduction @@ -30,14 +30,14 @@ billing email. Go to the billing section and click on `Invoice Settings`. - + Click on `Billing Email` and enter the email you want to receive receipts on. Click `Save`. @@ -48,8 +48,8 @@ For all payments made, receipt will also be mailed to the billing email in addit Go to the billing section and click on `Invoice Settings`. - + Click on `Billing Email` and click `Remove billing email`. - + diff --git a/docs/docs/account-management/email-change.mdx b/docs/docs/account-management/email-change.mdx index 98b6c3496ab..85cff362ba1 100644 --- a/docs/docs/account-management/email-change.mdx +++ b/docs/docs/account-management/email-change.mdx @@ -1,6 +1,6 @@ --- sidebar_label: Change email -title: 'Cloud: Change email address' +title: "Cloud: Change email address" description: Hasura Cloud email change keywords: - hasura @@ -10,12 +10,12 @@ keywords: sidebar_position: 10 --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Change Email Address -
Available on: Cloud
+
Available on: Cloud
## Introduction @@ -26,11 +26,11 @@ You can edit the email address on your Hasura Cloud account to another email fro [Sign in](https://cloud.hasura.io/login?redirect_url=/) to your Hasura Cloud account using email and click `My Account`. On the `Account Settings` page, select the `Edit` button. - + Enter the email you want to transfer the account to and click the `Change` button to send a transfer request. - + The invitee receives an email verification mail. Once the invitee clicks the link, it logs out the existing user and redirects the invitee to the Hasura Cloud login page. @@ -42,7 +42,7 @@ The user can now log in to Hasura Cloud using the new email and the password for If you logged in to Hasura Cloud with your social login, you must reset your password to initiate the email change process. On the [Sign in](https://cloud.hasura.io/login?redirect_url=/) page, select `Forgot?`. - + Next, enter the new email id and click **Recover Password**. Set a new password by clicking on the reset password link sent to your email address. diff --git a/docs/docs/account-management/marketplaces.mdx b/docs/docs/account-management/marketplaces.mdx index 5aba7d39a83..b31fe34e421 100644 --- a/docs/docs/account-management/marketplaces.mdx +++ b/docs/docs/account-management/marketplaces.mdx @@ -1,5 +1,5 @@ --- -title: 'Cloud: Marketplaces' +title: "Cloud: Marketplaces" description: Hasura Cloud Marketplaces keywords: - hasura @@ -15,7 +15,7 @@ sidebar_label: Marketplaces # Marketplaces -
Available on: Cloud Enterprise
+
Available on: Enterprise (Cloud)
## Overview diff --git a/docs/docs/actions/open-api.mdx b/docs/docs/actions/open-api.mdx index 6e4cde08f4f..6871e7eb326 100644 --- a/docs/docs/actions/open-api.mdx +++ b/docs/docs/actions/open-api.mdx @@ -11,11 +11,11 @@ keywords: sidebar_class_name: cloud-and-enterprise-icon --- -import Thumbnail from '@site/src/components/Thumbnail'; +import Thumbnail from "@site/src/components/Thumbnail"; # Import Action from OpenAPI Spec -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Overview diff --git a/docs/docs/api-reference/metadata-api/api-limits.mdx b/docs/docs/api-reference/metadata-api/api-limits.mdx index f4071e93772..6b68f2d4293 100644 --- a/docs/docs/api-reference/metadata-api/api-limits.mdx +++ b/docs/docs/api-reference/metadata-api/api-limits.mdx @@ -3,21 +3,21 @@ sidebar_label: API Limits sidebar_position: 20 description: Manage API limits configuration with the Hasura metadata API keywords: - - hasura - - docs - - metadata API - - API reference - - security options - - API limits - - Rate limits - - limits - - enterprise - - ee + - hasura + - docs + - metadata API + - API reference + - security options + - API limits + - Rate limits + - limits + - enterprise + - ee --- # Metadata API Reference: API Limits -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Introduction @@ -78,14 +78,14 @@ X-Hasura-Role: admin ### Args syntax {#set-api-limits-syntax} -| Key | Required | Schema | Description | -|-------------|----------|-------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------| -| disabled | false | boolean | Default value is false (Limits are enabled by default) | -| depth_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restriction based on its depth, preventing deeply nested queries | -| node_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restriction based on the number of nodes in GraphQL operation response | -| time_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restricts the time that a GraphQL operation is allowed to take. The duration is specified in seconds | -| batch_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restricts the number of GraphQL operations in a batched request | -| rate_limit | false | [RateLimitOption](/api-reference/syntax-defs.mdx#ratelimitoption) | Restricts number of GraphQL operations per minute | +| Key | Required | Schema | Description | +| ----------- | -------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| disabled | false | boolean | Default value is false (Limits are enabled by default) | +| depth_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restriction based on its depth, preventing deeply nested queries | +| node_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restriction based on the number of nodes in GraphQL operation response | +| time_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restricts the time that a GraphQL operation is allowed to take. The duration is specified in seconds | +| batch_limit | false | [APILimitOption](/api-reference/syntax-defs.mdx#apilimitoption) | Restricts the number of GraphQL operations in a batched request | +| rate_limit | false | [RateLimitOption](/api-reference/syntax-defs.mdx#ratelimitoption) | Restricts number of GraphQL operations per minute | In the above metadata spec: @@ -109,4 +109,4 @@ X-Hasura-Role: admin { "type": "remove_api_limit" } -``` \ No newline at end of file +``` diff --git a/docs/docs/api-reference/metadata-api/event-triggers.mdx b/docs/docs/api-reference/metadata-api/event-triggers.mdx index 1d0e86cc787..a83641feeae 100644 --- a/docs/docs/api-reference/metadata-api/event-triggers.mdx +++ b/docs/docs/api-reference/metadata-api/event-triggers.mdx @@ -14,20 +14,18 @@ keywords: ## Introduction -Event Triggers are used to capture database changes and send them to a -configured webhook. +Event Triggers are used to capture database changes and send them to a configured webhook. :::tip Supported from -The Metadata API is supported for versions `v2.0.0` and above and -replaces the older [schema/Metadata API](/api-reference/schema-metadata-api/index.mdx). +The Metadata API is supported for versions `v2.0.0` and above and replaces the older +[schema/Metadata API](/api-reference/schema-metadata-api/index.mdx). ::: ## pg_create_event_trigger {#metadata-pg-create-event-trigger} -`pg_create_event_trigger` is used to create a new Event Trigger or -replace an existing Event Trigger. +`pg_create_event_trigger` is used to create a new Event Trigger or replace an existing Event Trigger. ```http POST /v1/metadata HTTP/1.1 @@ -135,11 +133,9 @@ X-Hasura-Role: admin ## pg_redeliver_event {#metadata-pg-redeliver-event} -`redeliver_event` is used to redeliver an existing event. For example, -if an event is marked as error ( say it did not succeed after retries), -you can redeliver it using this API. Note that this will reset the count -of retries so far. If the event fails to deliver, it will be retried -automatically according to its `retry_conf`. +`redeliver_event` is used to redeliver an existing event. For example, if an event is marked as error ( say it did not +succeed after retries), you can redeliver it using this API. Note that this will reset the count of retries so far. If +the event fails to deliver, it will be retried automatically according to its `retry_conf`. ```http POST /v1/metadata HTTP/1.1 @@ -191,8 +187,7 @@ X-Hasura-Role: admin ## mssql_create_event_trigger {#metadata-mssql-create-event-trigger} -`mssql_create_event_trigger` is used to create a new Event Trigger or -replace an existing Event Trigger. +`mssql_create_event_trigger` is used to create a new Event Trigger or replace an existing Event Trigger. ```http POST /v1/metadata HTTP/1.1 @@ -293,18 +288,16 @@ X-Hasura-Role: admin ### Args syntax {#metadata-mssql-delete-event-trigger-syntax} -| Key | Required | Schema | Description | -| ------ | -------- | --------------------------------------------------------- | --------------------------------------------------------------- | -| name | true | [TriggerName](/api-reference/syntax-defs.mdx#triggername) | Name of the Event Trigger | +| Key | Required | Schema | Description | +| ------ | -------- | --------------------------------------------------------- | --------------------------------------------------------------------- | +| name | true | [TriggerName](/api-reference/syntax-defs.mdx#triggername) | Name of the Event Trigger | | source | false | [SourceName](/api-reference/syntax-defs.mdx#sourcename) | Name of the source database of the Event Trigger (default: `default`) | ## mssql_redeliver_event {#metadata-mssql-redeliver-event} -`mssql_redeliver_event` is used to redeliver an existing event. For example, -if an event is marked as error (say it did not succeed after retries), -you can redeliver it using this API. Note that this will reset the count -of retries so far. If the event fails to deliver, it will be retried -automatically according to its `retry_conf`. +`mssql_redeliver_event` is used to redeliver an existing event. For example, if an event is marked as error (say it did +not succeed after retries), you can redeliver it using this API. Note that this will reset the count of retries so far. +If the event fails to deliver, it will be retried automatically according to its `retry_conf`. ```http POST /v1/metadata HTTP/1.1 @@ -354,7 +347,7 @@ X-Hasura-Role: admin ## cleanup_event_trigger_logs {#metadata-cleanup-event-trigger-logs} -
Available on: Enterprise Edition/Cloud
+
Available on: Cloud, Enterprise
`cleanup_event_trigger_logs` is used to manually delete the event logs for a given Event Trigger. @@ -388,7 +381,7 @@ X-Hasura-Role: admin ## resume_event_trigger_cleanups {#metadata-resume-event-trigger-cleanups} -
Available on: Enterprise Edition/Cloud
+
Available on: Enterprise
`resume_event_trigger_cleanups` is used to resume the paused log cleaner for Event Triggers. @@ -418,10 +411,10 @@ X-Hasura-Role: admin ## pause_event_trigger_cleanups {#metadata-pause-event-trigger-cleanups} -
Available on: Enterprise Edition/Cloud
+
Available on: Enterprise
-- `pause_event_trigger_cleanups` is used to pause the log cleaner for event - triggers which already have a cleaner installed. +- `pause_event_trigger_cleanups` is used to pause the log cleaner for event triggers which already have a cleaner + installed. ```http POST /v1/metadata HTTP/1.1 @@ -449,6 +442,7 @@ X-Hasura-Role: admin :::info Note -The start and pause APIs for Event Trigger cleanup work only for Event Triggers that have a cleanup configuration defined. +The start and pause APIs for Event Trigger cleanup work only for Event Triggers that have a cleanup configuration +defined. ::: diff --git a/docs/docs/api-reference/metadata-api/observability.mdx b/docs/docs/api-reference/metadata-api/observability.mdx index e7b61fafa33..e72378e438f 100644 --- a/docs/docs/api-reference/metadata-api/observability.mdx +++ b/docs/docs/api-reference/metadata-api/observability.mdx @@ -20,6 +20,8 @@ keywords: # Metadata API Reference: Observability Options +
Available on: Community, Cloud, Enterprise
+ ## Introduction The API to manage `Observability` related metadata configurations. @@ -41,21 +43,20 @@ X-Hasura-Role: admin { "type": "set_metrics_config", "args": { - "analyze_query_variables": false + "analyze_query_variables": false } } ``` ### Args syntax {#set-metrics-config-syntax} -| Key | Required | Schema | Description | -|-------------------------|----------|-----------|-----------------------------------------------------------------------------------------------------| -| analyze_query_variables | false | boolean | Enables logging of the values of the query variables provided for each request. Default is `false`. | +| Key | Required | Schema | Description | +| ----------------------- | -------- | ------- | --------------------------------------------------------------------------------------------------- | +| analyze_query_variables | false | boolean | Enables logging of the values of the query variables provided for each request. Default is `false`. | Please see the corresponding [feature documentation for the usage of these configurations](/observability/operations.mdx#capture-query-variables). - ## remove_metrics_config {#metadata-remove-metrics-config} `remove_metrics_config` is used to remove all metrics configurations. diff --git a/docs/docs/api-reference/metadata-api/table-view.mdx b/docs/docs/api-reference/metadata-api/table-view.mdx index fc97d38e142..5739b75d7cd 100644 --- a/docs/docs/api-reference/metadata-api/table-view.mdx +++ b/docs/docs/api-reference/metadata-api/table-view.mdx @@ -274,7 +274,7 @@ Setting `apollo_federation_config` to `null` will disable Apollo Federation supp ## pg_test_connection_template {#metadata-pg-test-connection-template} -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
`pg_test_connection_template` allows you to test the connection template set for a source. @@ -308,14 +308,14 @@ X-Hasura-Role: admin ### Args syntax {#metadata-pg-test-connection-template-syntax} -| Key | Required | Schema | Description | -|--------------------------|----------|---------------------------------------------------------------------------------|---------------------------------------------------------------| -| source_name | false | [SourceName](/api-reference/syntax-defs.mdx#sourcename) | Name of the source database of the table (default: `default`) | -| request_context | true | [RequestContext](/api-reference/syntax-defs.mdx#requestcontext) | Request context | +| Key | Required | Schema | Description | +| --------------- | -------- | --------------------------------------------------------------- | ------------------------------------------------------------- | +| source_name | false | [SourceName](/api-reference/syntax-defs.mdx#sourcename) | Name of the source database of the table (default: `default`) | +| request_context | true | [RequestContext](/api-reference/syntax-defs.mdx#requestcontext) | Request context | :::info Enterprise only -Connection template feature is an enterprise edition only feature. +Connection template feature is an enterprise edition only feature. ::: diff --git a/docs/docs/api-reference/source-health.mdx b/docs/docs/api-reference/source-health.mdx index 7c56551aaba..04dbd54fa5e 100644 --- a/docs/docs/api-reference/source-health.mdx +++ b/docs/docs/api-reference/source-health.mdx @@ -14,7 +14,7 @@ sidebar_class_name: cloud-icon # Source Health Check API Reference -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Introduction diff --git a/docs/docs/databases/connect-db/cloud-connection-pooling.mdx b/docs/docs/databases/connect-db/cloud-connection-pooling.mdx index b739970210d..6a1e8bb028f 100644 --- a/docs/docs/databases/connect-db/cloud-connection-pooling.mdx +++ b/docs/docs/databases/connect-db/cloud-connection-pooling.mdx @@ -1,6 +1,6 @@ --- description: Managing connection pools in Hasura Cloud -title: 'Cloud: Elastic connection pools' +title: "Cloud: Elastic connection pools" keywords: - hasura - docs @@ -14,13 +14,13 @@ sidebar_position: 2 sidebar_class_name: cloud-icon --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Thumbnail from '@site/src/components/Thumbnail'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import Thumbnail from "@site/src/components/Thumbnail"; # Elastic Connection Pools -
Available on: Cloud
+
Available on: Professional, Enterprise (Cloud)
## Introduction @@ -56,7 +56,8 @@ project can be calculated as `number of server instances * max_connections` While adding a new database, under `Connection Settings`, set the desired `Total Max Connections` for primary and read -replica pools. To set or update `total_max_connections` for existing sources, head to the `Data > Databases > Manage > [database-name] > Edit` page and scroll down to the `Connection Settings` section. +replica pools. To set or update `total_max_connections` for existing sources, head to the +`Data > Databases > Manage > [database-name] > Edit` page and scroll down to the `Connection Settings` section. @@ -78,7 +79,7 @@ directory as per this example: isolation_level: read-committed pool_settings: total_max_connections: 60 - tables: '!include default/tables/tables.yaml' + tables: "!include default/tables/tables.yaml" ``` Apply the Metadata using the CLI by running: @@ -158,13 +159,13 @@ X-Hasura-Role: admin ## How connection pooling works -A connection pool starts off empty and as new requests arrive, a connection to the database is established. This connection -stays warm in the pool to be reused by any other waiting request. This ensures that subsequent requests do not have to -reestablish a database connection hence saving time and resources. +A connection pool starts off empty and as new requests arrive, a connection to the database is established. This +connection stays warm in the pool to be reused by any other waiting request. This ensures that subsequent requests do +not have to reestablish a database connection hence saving time and resources. After a certain period of connection idleness (specified by `idle_timeout`) or connection lifetime (specified by -`connection_lifetime`), the connection is released from the pool. This ensures that Hasura is not holding -connections which are not required. +`connection_lifetime`), the connection is released from the pool. This ensures that Hasura is not holding connections +which are not required. If the connection pool is saturated, then any new request waits for the pool to provide a connection. This ensures that your database is not bombarded with more connections than it can handle. You can also specify a `pool_timeout` to diff --git a/docs/docs/databases/connect-db/read-replicas.mdx b/docs/docs/databases/connect-db/read-replicas.mdx index c5144239e82..b9e89019b09 100644 --- a/docs/docs/databases/connect-db/read-replicas.mdx +++ b/docs/docs/databases/connect-db/read-replicas.mdx @@ -1,6 +1,6 @@ --- description: Hasura Cloud and Hasura Enterprise read replicas -title: 'Cloud and EE: Read replicas on Hasura Cloud' +title: "Cloud and EE: Read replicas on Hasura Cloud" keywords: - hasura - docs @@ -14,14 +14,14 @@ sidebar_position: 1 sidebar_class_name: cloud-and-enterprise-icon --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Read Replicas -
Available on: Cloud, Enterprise Edition
+
Available on: Professional, Enterprise
## Introduction diff --git a/docs/docs/deployment/hasura-cloud/ci-cd/github-integration.mdx b/docs/docs/deployment/hasura-cloud/ci-cd/github-integration.mdx index 9f62bdcedea..6dd28e6a5cd 100644 --- a/docs/docs/deployment/hasura-cloud/ci-cd/github-integration.mdx +++ b/docs/docs/deployment/hasura-cloud/ci-cd/github-integration.mdx @@ -1,6 +1,6 @@ --- description: GitHub deployment -title: 'Cloud: GitHub Deployment' +title: "Cloud: GitHub Deployment" keywords: - hasura - docs @@ -13,12 +13,12 @@ sidebar_position: 20 sidebar_class_name: cloud-and-enterprise-icon --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # GitHub Deployment -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Introduction diff --git a/docs/docs/deployment/hasura-cloud/ci-cd/index.mdx b/docs/docs/deployment/hasura-cloud/ci-cd/index.mdx index 2424f88510e..fa2a63e395d 100644 --- a/docs/docs/deployment/hasura-cloud/ci-cd/index.mdx +++ b/docs/docs/deployment/hasura-cloud/ci-cd/index.mdx @@ -10,11 +10,11 @@ slug: index sidebar_class_name: cloud-and-enterprise-icon --- -import Thumbnail from '@site/src/components/Thumbnail'; +import Thumbnail from "@site/src/components/Thumbnail"; # Continuous Integration and Continuous Deployment with Hasura Cloud -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud
## Introduction diff --git a/docs/docs/deployment/hasura-cloud/ci-cd/preview-apps.mdx b/docs/docs/deployment/hasura-cloud/ci-cd/preview-apps.mdx index 086f98c023b..80e142963a9 100644 --- a/docs/docs/deployment/hasura-cloud/ci-cd/preview-apps.mdx +++ b/docs/docs/deployment/hasura-cloud/ci-cd/preview-apps.mdx @@ -15,11 +15,11 @@ sidebar_position: 10 sidebar_class_name: cloud-and-enterprise-icon --- -import Thumbnail from '@site/src/components/Thumbnail'; +import Thumbnail from "@site/src/components/Thumbnail"; # Preview Apps -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud
## TL;DR @@ -213,7 +213,7 @@ more information. A sample file would look like this: ```yaml -name: 'preview-apps' +name: "preview-apps" on: # rebuild any PRs and main branch changes pull_request: push: @@ -226,7 +226,7 @@ jobs: - uses: actions/checkout@v2 - uses: hasura/hasura-cloud-preview-apps@v0.1.7 with: - name: 'preview-repo-name-${{github.env.GITHUB_HEAD_REF}}${{github.event.number}}' + name: "preview-repo-name-${{github.env.GITHUB_HEAD_REF}}${{github.event.number}}" postgresDBConfig: | POSTGRES_SERVER_CONNECTION_URI=${{secrets.POSTGRES_SERVER_CONNECTION_URI}} PG_ENV_VARS_FOR_HASURA=PG_DB_URL_1,PG_DB_URL_2,PG_DB_URL3 @@ -270,7 +270,7 @@ jobs: - name: Hasura Cloud Preview Apps uses: hasura/hasura-cloud-preview-apps@v0.1.5 with: - name: 'repo-name-${{github.env.GITHUB_HEAD_REF}}${{github.event.number}}' + name: "repo-name-${{github.env.GITHUB_HEAD_REF}}${{github.event.number}}" postgresDBConfig: | POSTGRES_SERVER_CONNECTION_URI=${{secrets.POSTGRES_SERVER_CONNECTION_URI}} PG_ENV_VARS_FOR_HASURA=PG_DB_URL_1,PG_DB_URL_2,PG_DB_URL3 diff --git a/docs/docs/deployment/hasura-cloud/dedicated-vpc.mdx b/docs/docs/deployment/hasura-cloud/dedicated-vpc.mdx index 56c4d8caef9..9cb5270d0d2 100644 --- a/docs/docs/deployment/hasura-cloud/dedicated-vpc.mdx +++ b/docs/docs/deployment/hasura-cloud/dedicated-vpc.mdx @@ -1,6 +1,6 @@ --- description: Dedicated VPC with VPC peering and private network access -title: 'Cloud: Dedicated VPC' +title: "Cloud: Dedicated VPC" keywords: - hasura - cloud @@ -12,12 +12,12 @@ sidebar_position: 40 sidebar_class_name: cloud-and-enterprise-icon --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Dedicated VPC -
Available on: Cloud Enterprise
+
Available on: Enterprise (Cloud)
## Introduction @@ -45,8 +45,8 @@ Enter the following details: - **Region**: region where the VPC should be provisioned (note that projects will also be created in this region - **VPC Name**: A display name for Hasura Dashboard - **VPC CIDR**: A valid private IPV4 address range (/16) that should be used with this VPC. For example `172.16.0.0/16`, - `10.10.0.0/16` etc. (it cannot be `10.2.0.0/16`, also it cannot conflict with the VPCs that you intend to peer with this - VPC) + `10.10.0.0/16` etc. (it cannot be `10.2.0.0/16`, also it cannot conflict with the VPCs that you intend to peer with + this VPC) Once you submit the request, the VPC will appear as **Pending**. It will take about 10-20 minutes for your VPC to be provisioned. Once it is provisioned, you will be able to see the VPC's details and create peering and projects. @@ -72,8 +72,8 @@ All projects within a VPC is listed under **Projects**. ### AWS Your Dedicated VPC can be peered with other networks that you own on AWS or managed services like Aiven or Timescale -Cloud that run on AWS. It will enable private connectivity to your databases and other APIs from Hasura Cloud and -you will not have to expose them publicly. +Cloud that run on AWS. It will enable private connectivity to your databases and other APIs from Hasura Cloud and you +will not have to expose them publicly. You can view all the requests and active peerings in the **Peerings** tab. @@ -147,8 +147,8 @@ Hasura Cloud. ::: -Once you enter and initiate the peering request, you will see the peering as **Request Pending** on the dashboard. -Once Hasura accepts the request, you will see that the peering is **Active**. It will take about 5-10 minutes. +Once you enter and initiate the peering request, you will see the peering as **Request Pending** on the dashboard. Once +Hasura accepts the request, you will see that the peering is **Active**. It will take about 5-10 minutes. Now you should be able to use private IP addresses and private DNS names as Database URLs or Webhook URLs. diff --git a/docs/docs/deployment/hasura-cloud/disaster-recovery.mdx b/docs/docs/deployment/hasura-cloud/disaster-recovery.mdx index fdf17f395f0..a6b138ef542 100644 --- a/docs/docs/deployment/hasura-cloud/disaster-recovery.mdx +++ b/docs/docs/deployment/hasura-cloud/disaster-recovery.mdx @@ -12,7 +12,7 @@ sidebar_class_name: cloud-icon # Disaster Recovery and Passive Standby Config for Hasura Cloud -
Available on: Cloud
+
Available on: Enterprise
## Overview diff --git a/docs/docs/deployment/hasura-cloud/high-availability.mdx b/docs/docs/deployment/hasura-cloud/high-availability.mdx index 613a507d893..5e7c678c072 100644 --- a/docs/docs/deployment/hasura-cloud/high-availability.mdx +++ b/docs/docs/deployment/hasura-cloud/high-availability.mdx @@ -11,15 +11,15 @@ sidebar_class_name: cloud-and-enterprise-icon # High-Availability Configuration -
Available on: Cloud Standard, Cloud Enterprise
+
Available on: Standard, Enterprise (Cloud)
## Overview -Hasura Cloud supports high-availability (HA) configurations for Cloud Standard and Cloud Enterprise projects. +Hasura Cloud supports high-availability (HA) configurations for Cloud Enterprise projects. -We configure each Cloud Standard and Cloud Enterprise project across different Availability Zones (AZs). In the event of -an incident, our global gateway will ensure traffic is not routed to the affected compute instances while the systems -are auto-recovering. +We configure each Cloud Enterprise project across different Availability Zones (AZs). In the event of an incident, our +global gateway will ensure traffic is not routed to the affected compute instances while the systems are +auto-recovering. This redundancy and ability to identify problematic instances provides you with protection against data center power outages, natural disasters, and other incidents while ensuring your project is performant, handles scaling, and, most diff --git a/docs/docs/deployment/hasura-cloud/plans.mdx b/docs/docs/deployment/hasura-cloud/plans.mdx new file mode 100644 index 00000000000..d648d9d0a51 --- /dev/null +++ b/docs/docs/deployment/hasura-cloud/plans.mdx @@ -0,0 +1,96 @@ +--- +description: Billing and pricing breakdown for Hasura Cloud +keywords: + - hasura + - cloud + - tiers + - billing + - pricing +sidebar_class_name: cloud-and-enterprise-icon +sidebar_position: 2 +--- + +# Plans and Pricing + +## Overview + +[Hasura Cloud](https://cloud.hasura.io) offers three plans: Hasura Cloud Free, Hasura Cloud Professional, and Hasura +Cloud Enterprise. + +Hasura Cloud billing is based on the consumption of resources. For paid plans, you can either pay as you go monthly in +arrears or make an annual commitment with an upfront payment for the usage. Below, you'll find an overview of each plan +and details on how we calculate billing. Check out our [pricing FAQ](https://hasura.io/pricing#faq) for common +questions. + +## Hasura Cloud Plans + +### Hasura Cloud Free + +The Hasura Cloud Free plan is - as it's named - free to use. You can create up to **three** Projects under the plan to +try out the Hasura fully-managed GraphQL APIs. + +Each Project can use up to **two data connectors** with **100 MB of data passthrough per month**, and up to **1 million +API requests per month**. You can get higher entitlements after upgrading to the Hasura Cloud Professional plan. + +### Hasura Cloud Professional + +Hasura Cloud Professional is a pay-as-you-go monthly subscription plan. You only pay for your consumption every month. +We calculate billing, using the following categories, per Project: + +- Types of databases connected to the Project +- Data passthrough + +Hasura Cloud Professional is billed for the number of hours each Project runs and the amount of data passthrough. The +price depends on the type(s) of database(s) connected to the Project. If a Project uses a generic Postgres database and +a premium database, **you are only billed for the premium database at $3.00 /hr**. + +| Database Type | Rate | +| ------------------ | -------- | +| Generic Postgres | $1.50/hr | +| Snowflake | $3.00/hr | +| BigQuery | $3.00/hr | +| Athena | $3.00/hr | +| MSSQL | $3.00/hr | +| CockroachDB | $3.00/hr | +| Google AlloyDB | $3.00/hr | +| Citus / Hyperscale | $3.00/hr | + +:::info Projects without databases + +A Project without a connected database is billed at $1.50/hr. + +::: + +#### Data passthrough + +Hasura Cloud meters data passing through it to external services, including request data that is sent to upstream +services (e.g., databases) and response data sent to downstream services (e.g., web apps) at a rate of $0.13/GB. + +You will be billed based on this volume of data that passes through Hasura every month. + +#### Example Calculation + +Assuming thirty days in the month, you start with one Project with a Postgres data connector for the first twenty-one +days of the Project: + +`21 days * 24 hrs/day * $1.50/hr = $756` + +On the twenty-second day, you decide to add the Snowflake data connector and leave it connected until the end of the +month: + +`9 days * 24hrs/day * $3.00/hr = $648` + +Let's assume the data passthrough for the entire month is 1000 GB: + +`1000 GB * $0.13/GB = $130 Total` + +The total cost for the month is $1534. + +### Hasura Cloud Enterprise + +The Hasura Cloud Enterprise plan offers the ability to commit to a minimum spending amount over a minimum 12-month +commitment period. You can view the total amount of accrued usage during the commitment term and the amount of committed +spending left in your account. You can renew your commitment if your commitment is depleted before the expiry of the +commitment period. + +Talk to a Hasura [sales representative](mailto:sales@hasura.io) to discuss your specific use case and the pricing. diff --git a/docs/docs/deployment/hasura-cloud/regression-tests.mdx b/docs/docs/deployment/hasura-cloud/regression-tests.mdx index 61f4e1933b2..2f3aeec07b8 100644 --- a/docs/docs/deployment/hasura-cloud/regression-tests.mdx +++ b/docs/docs/deployment/hasura-cloud/regression-tests.mdx @@ -12,11 +12,11 @@ sidebar_position: 30 sidebar_class_name: cloud-icon --- -import Thumbnail from '@site/src/components/Thumbnail'; +import Thumbnail from "@site/src/components/Thumbnail"; # Regression Tests -
Available on: Cloud
+
Available on: Cloud, Enterprise
## Introduction diff --git a/docs/docs/deployment/hasura-cloud/sso.mdx b/docs/docs/deployment/hasura-cloud/sso.mdx index 6bbaeed8011..d0af0d47e4d 100644 --- a/docs/docs/deployment/hasura-cloud/sso.mdx +++ b/docs/docs/deployment/hasura-cloud/sso.mdx @@ -1,8 +1,8 @@ --- sidebar_position: 60 -sidebar_label: 'SSO' -description: 'Enable single sign-on (SSO) for Hasura Enterprise through the SAML 2.0 protocol' -title: 'EE: Enable SSO through SAML' +sidebar_label: "SSO" +description: "Enable single sign-on (SSO) for Hasura Enterprise through the SAML 2.0 protocol" +title: "EE: Enable SSO through SAML" keywords: - hasura - docs @@ -13,24 +13,25 @@ keywords: sidebar_class_name: cloud-and-enterprise-icon --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # SSO Through SAML -
Available on: Cloud Enterprise
+
Available on: Enterprise
## Introduction You can enable SSO (Single Sign-On) with your identity management system through the -[SAML 2.0](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html) protocol. Hasura is a -SAML 2.0 compliant service provider. +[SAML 2.0](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html) protocol. Hasura is a SAML +2.0 compliant service provider. - + ## Configuration ### Configuring the identity provider + Create a new service provider on your SAML identity provider with the following configuration: 1. Configure the ACS URL, Entity ID, Audience and Recipient to be `https://auth.pro.hasura.io/saml/callback`. @@ -43,19 +44,19 @@ Once created, note the IdP metadata in XML format. Dynamic metadata through an I Provide the following details to [support](https://cloud.hasura.io/support/create-ticket) to configure SAML SSO: -- Domain Name(s): Domain tied to the email address of the users using SSO. If the emails of the users are tied to more than -one domain, provide all the domains. -- IdP Metadata: Metadata of your identity provider in XML format. If you want to configure the metadata through -a dynamic URL, you can instead provide the IdP Metadata URL. +- Domain Name(s): Domain tied to the email address of the users using SSO. If the emails of the users are tied to more + than one domain, provide all the domains. +- IdP Metadata: Metadata of your identity provider in XML format. If you want to configure the metadata through a + dynamic URL, you can instead provide the IdP Metadata URL. - Provider: The name of this identity provider. -- Request Signing: Specify if you want the SAML assertion request to signed or un-signed. +- Request Signing: Specify if you want the SAML assertion request to signed or un-signed. ## Caveats and limitations 1. Only a SP initiated flow is supported i.e. you can’t have a Launch button in your IdP dashboard to launch the project -dashboard. + dashboard. 2. Session expiry time is currently not configurable. 3. Single logout is currently not supported. 4. Once SSO is enabled for an org, it is enforced for that org. This means, if an org is enabled for SSO, the emails -from that org cannot use any other login mechanism such as Google, GitHub, or email. -5. Currently, only SAML with HTTP POST binding is supported. \ No newline at end of file + from that org cannot use any other login mechanism such as Google, GitHub, or email. +5. Currently, only SAML with HTTP POST binding is supported. diff --git a/docs/docs/deployment/health-checks/source-health-check.mdx b/docs/docs/deployment/health-checks/source-health-check.mdx index b811465013b..76553040114 100644 --- a/docs/docs/deployment/health-checks/source-health-check.mdx +++ b/docs/docs/deployment/health-checks/source-health-check.mdx @@ -1,6 +1,6 @@ --- description: Hasura database source Health Check -title: 'Cloud: Source Health Check' +title: "Cloud: Source Health Check" keywords: - hasura - cloud @@ -12,13 +12,13 @@ sidebar_position: 20 sidebar_class_name: cloud-icon --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Source Health Check -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Overview @@ -114,10 +114,10 @@ X-Hasura-Role: admin ### API -Health Check reports of sources can be obtained through a `GET` request from the -`/healthz/sources` API, on demand. Learn more about the API [here](/api-reference/source-health.mdx). +Health Check reports of sources can be obtained through a `GET` request from the `/healthz/sources` API, on demand. +Learn more about the API [here](/api-reference/source-health.mdx). ### Logging -Hasura logs the Health Check status and other information via `health-check-log` type when enabled. -Learn more about the Health Checks logs [here](/deployment/logging.mdx#health-check-log-structure). +Hasura logs the Health Check status and other information via `health-check-log` type when enabled. Learn more about the +Health Checks logs [here](/deployment/logging.mdx#health-check-log-structure). diff --git a/docs/docs/enterprise/caching.mdx b/docs/docs/enterprise/caching.mdx index cf64c2329dd..15749eeb52d 100644 --- a/docs/docs/enterprise/caching.mdx +++ b/docs/docs/enterprise/caching.mdx @@ -2,7 +2,7 @@ sidebar_label: Enable caching sidebar_position: 5 description: Hasura EE caching -title: 'EE: Enable GraphQL caching' +title: "EE: Enable GraphQL caching" keywords: - hasura - docs @@ -12,11 +12,11 @@ keywords: - caching --- -import HeadingIcon from '@site/src/components/HeadingIcon'; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Enable GraphQL Caching -
Available on: Enterprise Edition
+
Available on: Professional, Enterprise
## Introduction diff --git a/docs/docs/enterprise/getting-started/index.mdx b/docs/docs/enterprise/getting-started/index.mdx index a280de30bb9..8c7475832b7 100644 --- a/docs/docs/enterprise/getting-started/index.mdx +++ b/docs/docs/enterprise/getting-started/index.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Get started description: Gett started for the Hasura Enterprise Edition -title: 'EE: Get started' +title: "EE: Get started" keywords: - hasura - docs @@ -11,7 +11,7 @@ slug: index # Get Started -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Prerequisites diff --git a/docs/docs/enterprise/getting-started/quickstart-aws-ecs.mdx b/docs/docs/enterprise/getting-started/quickstart-aws-ecs.mdx index c200e650de9..e841278ed1d 100644 --- a/docs/docs/enterprise/getting-started/quickstart-aws-ecs.mdx +++ b/docs/docs/enterprise/getting-started/quickstart-aws-ecs.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Quickstart with AWS ECS description: Quickstart with AWS ECS for Hasura Enterprise Edition -title: 'EE: Quickstart with AWS ECS' +title: "EE: Quickstart with AWS ECS" keywords: - hasura - docs @@ -9,11 +9,11 @@ keywords: sidebar_position: 2 --- -import LatestRelease from '@site/src/components/LatestRelease'; +import LatestRelease from "@site/src/components/LatestRelease"; # Quickstart with AWS ECS -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Introduction @@ -28,8 +28,8 @@ Fargate task, and perform other common tasks in Amazon ECS with the AWS CLI. This tutorial assumes that the following prerequisites have been met: -- To deploy Hasura EE, you will need a license key. [Please contact Hasura Sales](mailto:sales@hasura.io) if you do not already - have one. +- To deploy Hasura EE, you will need a license key. [Please contact Hasura Sales](mailto:sales@hasura.io) if you do not + already have one. - The latest version of the AWS CLI is installed and configured. For more information about installing or upgrading your AWS CLI, see [Installing the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). diff --git a/docs/docs/enterprise/getting-started/quickstart-docker.mdx b/docs/docs/enterprise/getting-started/quickstart-docker.mdx index d69ab008941..ef7731559df 100644 --- a/docs/docs/enterprise/getting-started/quickstart-docker.mdx +++ b/docs/docs/enterprise/getting-started/quickstart-docker.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Quickstart with Docker description: Quickstart with Docker for Hasura Enterprise Edition -title: 'EE: Quickstart with Docker' +title: "EE: Quickstart with Docker" keywords: - hasura - docs @@ -9,12 +9,12 @@ keywords: sidebar_position: 1 --- -import Thumbnail from '@site/src/components/Thumbnail'; -import LatestRelease from '@site/src/components/LatestRelease'; +import Thumbnail from "@site/src/components/Thumbnail"; +import LatestRelease from "@site/src/components/LatestRelease"; # Quickstart with Docker -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Introduction @@ -172,7 +172,7 @@ you should change it to: graphql-engine:
- {' '}image: hasura/graphql-engine: + {" "}image: hasura/graphql-engine:
diff --git a/docs/docs/enterprise/getting-started/quickstart-google-cloud-run.mdx b/docs/docs/enterprise/getting-started/quickstart-google-cloud-run.mdx index 48515d41004..42d5b19c25b 100644 --- a/docs/docs/enterprise/getting-started/quickstart-google-cloud-run.mdx +++ b/docs/docs/enterprise/getting-started/quickstart-google-cloud-run.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Quickstart with Google Cloud Run description: Quickstart with Google Cloud Run for Hasura Enterprise Edition -title: 'EE: Quickstart with Google Cloud Run' +title: "EE: Quickstart with Google Cloud Run" keywords: - hasura - docs @@ -9,11 +9,11 @@ keywords: sidebar_position: 4 --- -import LatestRelease from '@site/src/components/LatestRelease'; +import LatestRelease from "@site/src/components/LatestRelease"; # Quickstart with Google Cloud Run -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Introduction @@ -27,8 +27,8 @@ This tutorial will help you run Hasura Enterprise Edition as a Google Cloud Run This tutorial assumes that the following prerequisites have been met: -- To deploy Hasura EE, you will need a license key. [Please contact Hasura Sales](mailto:sales@hasura.io) if you do not already - have one. +- To deploy Hasura EE, you will need a license key. [Please contact Hasura Sales](mailto:sales@hasura.io) if you do not + already have one. - The latest version of the `gcloud` CLI is installed and configured. For more information about installing or upgrading your gcloud CLI, see [Installing the gcloud CLI](https://cloud.google.com/sdk/docs/install). - Your `gcloud` user has the @@ -54,10 +54,10 @@ wget https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-mani Edit `env.yaml` and set the right values: ```yaml -HASURA_GRAPHQL_EE_LICENSE_KEY: '' +HASURA_GRAPHQL_EE_LICENSE_KEY: "" HASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres -HASURA_GRAPHQL_REDIS_URL: 'redis://redis:6379' -HASURA_GRAPHQL_RATE_LIMIT_REDIS_URL: 'redis://redis:6379' +HASURA_GRAPHQL_REDIS_URL: "redis://redis:6379" +HASURA_GRAPHQL_RATE_LIMIT_REDIS_URL: "redis://redis:6379" HASURA_GRAPHQL_ADMIN_SECRET: myadminsecretkey ``` diff --git a/docs/docs/enterprise/getting-started/quickstart-kubernetes.mdx b/docs/docs/enterprise/getting-started/quickstart-kubernetes.mdx index f89b6d99925..ffcaec8274f 100644 --- a/docs/docs/enterprise/getting-started/quickstart-kubernetes.mdx +++ b/docs/docs/enterprise/getting-started/quickstart-kubernetes.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Quickstart with Kubernetes description: Quickstart with Kubernetes for Hasura Enterprise Edition -title: 'EE: Quickstart with Kubernetes' +title: "EE: Quickstart with Kubernetes" keywords: - hasura - docs @@ -9,11 +9,11 @@ keywords: sidebar_position: 3 --- -import LatestRelease from '@site/src/components/LatestRelease'; +import LatestRelease from "@site/src/components/LatestRelease"; # Quickstart with Kubernetes -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Introduction @@ -27,8 +27,8 @@ This tutorial helps you set up Hasura Enterprise Edition on Kubernetes and conne This tutorial assumes that the following prerequisites have been met: -- To deploy Hasura EE, you will need a license key. [Please contact Hasura Sales](mailto:sales@hasura.io) if you do not already - have one. +- To deploy Hasura EE, you will need a license key. [Please contact Hasura Sales](mailto:sales@hasura.io) if you do not + already have one. - A functioning Kubernetes cluster. - This tutorial uses a container image hosted on the public Docker hub, so your Kubernetes cluster must have internet access. @@ -53,7 +53,7 @@ Edit `deployment.yaml` and set the right values: --- env: - name: HASURA_GRAPHQL_EE_LICENSE_KEY - value: '' + value: "" - name: HASURA_GRAPHQL_METADATA_DATABASE_URL value: postgres://:@hostname:/ - name: HASURA_GRAPHQL_REDIS_URL @@ -172,7 +172,7 @@ you should change it to: containers:
- {' '}- image: hasura/graphql-engine: + {" "}- image: hasura/graphql-engine:
diff --git a/docs/docs/enterprise/getting-started/start-using-hasura-ee.mdx b/docs/docs/enterprise/getting-started/start-using-hasura-ee.mdx index d13db09607f..1309686ce97 100644 --- a/docs/docs/enterprise/getting-started/start-using-hasura-ee.mdx +++ b/docs/docs/enterprise/getting-started/start-using-hasura-ee.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Start using Hasura EE description: Start using Hasura EE -title: 'EE: Start Using Hasura EE' +title: "EE: Start Using Hasura EE" keywords: - hasura - docs @@ -11,7 +11,7 @@ sidebar_position: 5 # Start Using Hasura EE -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Instructions diff --git a/docs/docs/enterprise/index.mdx b/docs/docs/enterprise/index.mdx index b365c2765d7..e8cb446993b 100644 --- a/docs/docs/enterprise/index.mdx +++ b/docs/docs/enterprise/index.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Hasura Enterprise (EE) description: Documentation for the Hasura Enterprise edition -title: 'EE: Hasura Enterprise' +title: "EE: Hasura Enterprise" keywords: - hasura - docs @@ -9,11 +9,11 @@ keywords: slug: index --- -import Enterprise from '@site/static/icons/features/enterprise.svg'; +import Enterprise from "@site/static/icons/features/enterprise.svg"; # Hasura Enterprise -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Introduction diff --git a/docs/docs/enterprise/metrics.mdx b/docs/docs/enterprise/metrics.mdx index 912522dbbab..bade783aa1f 100644 --- a/docs/docs/enterprise/metrics.mdx +++ b/docs/docs/enterprise/metrics.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Metrics via Prometheus description: Metrics via Prometheus for Hasura Enterprise Edition -title: 'EE: Metrics via Prometheus' +title: "EE: Metrics via Prometheus" keywords: - hasura - docs @@ -11,7 +11,7 @@ sidebar_position: 4 # Metrics via Prometheus -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Enable metrics endpoint @@ -34,8 +34,7 @@ curl 'http://127.0.0.1:8080/v1/metrics' -H 'Authorization: Bearer ' :::note Note -- The metrics endpoint should be configured with a secret to prevent misuse and should not be exposed over the - internet. +- The metrics endpoint should be configured with a secret to prevent misuse and should not be exposed over the internet. ::: diff --git a/docs/docs/enterprise/release-notes.mdx b/docs/docs/enterprise/release-notes.mdx index 420377147af..ff4305e5f6c 100644 --- a/docs/docs/enterprise/release-notes.mdx +++ b/docs/docs/enterprise/release-notes.mdx @@ -2,7 +2,7 @@ sidebar_label: Release notes sidebar_position: 6 description: Release notes for Hasura EE -title: 'EE: Release notes' +title: "EE: Release notes" date: 2022-08-08T16:30:59+05:30 keywords: - hasura @@ -15,9 +15,8 @@ keywords: # Release Notes -
Available on: Enterprise Edition
-
-
- +
Available on: Enterprise (Self-hosted)
+
+
See [Changelog](https://hasura.io/changelog/enterprise-edition). diff --git a/docs/docs/enterprise/upgrade-ce-to-ee.mdx b/docs/docs/enterprise/upgrade-ce-to-ee.mdx index 284570092e0..b9bb7257644 100644 --- a/docs/docs/enterprise/upgrade-ce-to-ee.mdx +++ b/docs/docs/enterprise/upgrade-ce-to-ee.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Upgrade from Hasura CE to Hasura Enterprise description: A guide to upgrade from Hasura CE to Hasura Enterprise -title: 'EE: Upgrade from Hasura CE to Hasura Enterprise' +title: "EE: Upgrade from Hasura CE to Hasura Enterprise" keywords: - hasura - docs @@ -11,7 +11,7 @@ sidebar_position: 1 # Upgrading from Hasura CE to Hasura Enterprise -
Available on: Enterprise Edition
+
Available on: Enterprise (Self-hosted)
## Overview diff --git a/docs/docs/event-triggers/clean-up/auto-cleanup.mdx b/docs/docs/event-triggers/clean-up/auto-cleanup.mdx index 3c02fd66447..2d221a6653d 100644 --- a/docs/docs/event-triggers/clean-up/auto-cleanup.mdx +++ b/docs/docs/event-triggers/clean-up/auto-cleanup.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Auto cleanup description: Cleanup Event Trigger logs for Hasura Cloud/Enterprise Edition -title: 'Auto cleanup of Event Trigger logs' +title: "Auto cleanup of Event Trigger logs" keywords: - hasura - docs @@ -14,13 +14,13 @@ sidebar_position: 2 sidebar_class_name: cloud-and-enterprise-icon --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Thumbnail from '@site/src/components/Thumbnail'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import Thumbnail from "@site/src/components/Thumbnail"; # Auto Cleanup of Event Trigger Logs -
Available on: Cloud, Enterprise Edition
+
Available on: Enterprise
:::note Supported from @@ -50,7 +50,8 @@ provided config. -For an existing Event Trigger, head to the `Modify` tab of the Event Trigger and scroll down to the `Auto-cleanup Event Logs` section. +For an existing Event Trigger, head to the `Modify` tab of the Event Trigger and scroll down to the +`Auto-cleanup Event Logs` section. @@ -70,7 +71,7 @@ event_triggers: definition: enable_manual: true insert: - columns: '*' + columns: "*" retry_conf: interval_sec: 10 num_retries: 0 @@ -81,7 +82,7 @@ event_triggers: clean_invocation_logs: true clear_older_than: 168 paused: false - schedule: '0 0 * * *' + schedule: "0 0 * * *" timeout: 60 ``` @@ -127,8 +128,8 @@ X-Hasura-Role: admin :::caution Warning -If you initially choose not to delete `invocation_logs`, but later they need to be deleted, you will need to delete -the retained logs manually. +If you initially choose not to delete `invocation_logs`, but later they need to be deleted, you will need to delete the +retained logs manually. ::: @@ -171,8 +172,7 @@ X-Hasura-Role: admin } ``` -- Activate the cleaners on all the triggers defined on the sources: `source_1`, - `source_2` +- Activate the cleaners on all the triggers defined on the sources: `source_1`, `source_2` ```json POST /v1/metadata HTTP/1.1 @@ -189,8 +189,7 @@ X-Hasura-Role: admin } ``` -- Activate the cleaners on triggers: `sample_trigger_1`, `sample_trigger_2` - defined on source `default` +- Activate the cleaners on triggers: `sample_trigger_1`, `sample_trigger_2` defined on source `default` ```json POST /v1/metadata HTTP/1.1 diff --git a/docs/docs/graphql-api-explorer.mdx b/docs/docs/graphql-api-explorer.mdx index 49d7914098d..5e7f7d1ea4d 100644 --- a/docs/docs/graphql-api-explorer.mdx +++ b/docs/docs/graphql-api-explorer.mdx @@ -1,6 +1,6 @@ --- description: Hasura GraphQL API Explorer -title: 'Cloud: Hasura GraphQL API Explorer' +title: "Cloud: Hasura GraphQL API Explorer" keywords: - hasura - cloud @@ -17,12 +17,12 @@ sidebar_class_name: cloud-icon slug: graphql-api-explorer/index --- -import Thumbnail from '@site/src/components/Thumbnail'; -import Explorer from '@site/static/icons/features/graphql_api_explorer_2.svg'; +import Thumbnail from "@site/src/components/Thumbnail"; +import Explorer from "@site/static/icons/features/graphql_api_explorer_2.svg"; # Hasura GraphQL API Explorer -
Available on: Cloud
+
Available on: Cloud, Community, Enterprise
## TL;DR diff --git a/docs/docs/observability/errors.mdx b/docs/docs/observability/errors.mdx index 365a0f1e77d..27b747b9331 100644 --- a/docs/docs/observability/errors.mdx +++ b/docs/docs/observability/errors.mdx @@ -1,7 +1,7 @@ --- sidebar_position: 3 sidebar_label: Errors -title: 'Cloud: Errors' +title: "Cloud: Errors" description: Hasura Cloud error analysis keywords: - hasura @@ -11,21 +11,21 @@ keywords: - errors --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Errors -
Available on: Cloud Standard
+
Available on: Cloud
## Overview Troubleshoot errors quickly with powerful analytical tools and filters: - + Drill into a specific operation via the magnifying-glass icon next to the operation summary in the 'Frequent errors' table. You'll be taken to a list of the failed operations, and can choose one to inspect the specific operation content, metadata, and error generated: - + diff --git a/docs/docs/observability/index.mdx b/docs/docs/observability/index.mdx index 5ead45efe97..5eadb1e8b08 100644 --- a/docs/docs/observability/index.mdx +++ b/docs/docs/observability/index.mdx @@ -2,7 +2,7 @@ sidebar_label: Observability sidebar_position: 1 slug: index -title: 'Cloud: Observability' +title: "Cloud: Observability" description: Hasura Cloud observability keywords: - hasura @@ -12,13 +12,13 @@ keywords: - observability --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; -import Observability from '@site/static/icons/features/observability.svg'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; +import Observability from "@site/static/icons/features/observability.svg"; # Observability -
Available on: Cloud Standard
+
Available on: Cloud
## Overview diff --git a/docs/docs/observability/integrations/azure-monitor.mdx b/docs/docs/observability/integrations/azure-monitor.mdx index 9bca6741649..9621dcf4658 100644 --- a/docs/docs/observability/integrations/azure-monitor.mdx +++ b/docs/docs/observability/integrations/azure-monitor.mdx @@ -1,7 +1,7 @@ --- sidebar_position: 3 description: Azure monitor Integration on Hasura Cloud -title: 'Cloud: Azure Monitor Integration' +title: "Cloud: Azure Monitor Integration" keywords: - hasura - docs @@ -13,12 +13,12 @@ keywords: sidebar_label: Azure Monitor --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Azure Monitor Integration -
Available on: Cloud Standard
+
Available on: Professional, Enterprise
## Introduction @@ -44,16 +44,16 @@ above. this context) - From the `Certificates & secrets` tab of the created service principal, Create a client secret by clicking `New client secret`. Add a suitable description and expiry period for the secret and click `Add`. Copy the value of the created secret (Referred to as `Active Directory Client Secret` in this context) - + - Create a [Log Analytics Workspace](https://docs.microsoft.com/en-us/azure/azure-monitor/logs/quick-create-workspace) in Azure. @@ -62,22 +62,22 @@ above. (Referred as `Shared Key` in this context). - From the `Properties` tab of the created log analytics workspace, retrieve `Resource ID` and `Location` (Referred to as `Region` in this context) - + - Assign the Role `Monitoring Metrics Publisher` to the Service principal against the Log analytics workspace. From the `Access control (IAM)` tab of the created log analytics workspace, Click on `Add` and select `Add role assignment`. In the Add role assignment panel, Select the Role as `Monitoring Metrics Publisher` and select the created service principal for role assignment and click `Save`. - + - Create an [Application Insights resource](https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-new-resource>) in @@ -85,16 +85,16 @@ above. - From the `Overview` tab of the created Application Insights resource, retrieve `Instrumentation Key` - + ## Configure Azure Monitor integration On the Project settings page, navigate to **Integrations > Azure Monitor**. Enter the values of config parameters obtained from the steps in pre-requisites in the Azure monitor integration form. @@ -115,18 +115,18 @@ signifies successful exporting of the telemetry to Azure monitor. `Last Exported the timestamp of the last telemetry (log, metric, trace) successfully exported to your Azure monitor dashboard. In case of error while exporting any of telemetries(logs, metrics, traces) to Azure monitor, the dot becomes red and the error messages/instructions are displayed. Click `Update Settings` button to update the config parameters. ## View metrics @@ -148,18 +148,18 @@ To navigate to ,click `View Metrics`. From the `Select a scope` panel, expand the resource group which contains the `Log analytics workspace` and select it and click `Apply`. In the filter menu, select the correct namespace and `Add filter` to view the individual metric. ## View logs @@ -169,9 +169,9 @@ To navigate to click `View Logs`. From the `Select a scope` panel, expand the resource group which contains the `Log analytics workspace` and select it @@ -179,9 +179,9 @@ and click `Apply`. The logs can be filtered using `Log type`. Use `{YOUR_LOG_TYP logs. Custom log types are displayed in the left of the Query panel. ## View traces @@ -191,9 +191,9 @@ To navigate to click `View traces`. Select the appropriate `Application Insights` and click `Transaction search`. The traces can be filtered using `Trace` @@ -201,7 +201,7 @@ and `Dependency` Event types. Clicking any of the `Dependency` result shows the corresponding trace. diff --git a/docs/docs/observability/integrations/datadog.mdx b/docs/docs/observability/integrations/datadog.mdx index 53ece8a51a7..f53770bc950 100644 --- a/docs/docs/observability/integrations/datadog.mdx +++ b/docs/docs/observability/integrations/datadog.mdx @@ -2,7 +2,7 @@ sidebar_label: Datadog sidebar_position: 2 description: Datadog Integration on Hasura Cloud -title: 'Cloud: Datadog Integration' +title: "Cloud: Datadog Integration" keywords: - hasura - docs @@ -13,12 +13,12 @@ keywords: - datadog --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Datadog Integration -
Available on: Cloud Standard
+
Available on: Professional, Enterprise
## Introduction @@ -35,7 +35,7 @@ For Hasura Cloud projects, the Datadog Integration is only available on the `Sta Navigate to the integrations tab on project settings page to find Datadog integration. - + Select the Datadog API region and enter the Datadog API key (can be retrieved by navigating to Datadog's settings page by clicking the `Get API Key` link), host, service name and tags to associate with exported logs, metrics and traces. @@ -48,7 +48,7 @@ by clicking the `Get API Key` link), host, service name and tags to associate wi | Tags | Tags associated with your logs and metrics. Default tags `project_id` and `project_name` are exported with all logs and metrics. A source tag `hasura-cloud-metrics` is added to all exported logs. | | Service Name | The name of the application or service generating the log events. | - + After adding appropriate values, click `Save`. @@ -59,18 +59,18 @@ logs are successfully exported, `Last Exported` is continuously updated, indicat successfully exported to your Datadog dashboard. In case there is an error while exporting logs to datadog, the dot is red and the HTTP status code of the error is displayed right below it. ## View logs @@ -78,12 +78,12 @@ displayed right below it. The logs can be viewed in your Datadog dashboard, under the `Logs` tab. To navigate to the same, click `View Logs`. - + To view only logs exported by Hasura Cloud, filter your logs using `host` and/or `tags` you configured with this integration. @@ -114,15 +114,15 @@ Graphs for all the above metrics can be viewed in your Datadog dashboard, under same, click `View Metrics`. Select the graphs you want to view from the metrics explorer. Alternatively, select the `host` you configured with this integration to see all the graphs corresponding to metrics exported by Hasura Cloud. - + ## View traces @@ -135,7 +135,7 @@ visual representation of where the operation spent its execution over time. For milliseconds in total, of which 758 microseconds was the actual Postgres database processing the query. diff --git a/docs/docs/observability/integrations/index.mdx b/docs/docs/observability/integrations/index.mdx index 312b2deb568..81ba659ab35 100644 --- a/docs/docs/observability/integrations/index.mdx +++ b/docs/docs/observability/integrations/index.mdx @@ -1,7 +1,7 @@ --- sidebar_position: 1 slug: index -title: 'Cloud: Integrations with external services' +title: "Cloud: Integrations with external services" description: Configure integrations with Hasura Cloud keywords: - hasura @@ -15,11 +15,11 @@ keywords: - monitoring framework --- -import HeadingIcon from '@site/src/components/HeadingIcon'; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Integrations with External Services -
Available on: Cloud Standard
+
Available on: Professional, Enterprise
## Overview diff --git a/docs/docs/observability/integrations/newrelic.mdx b/docs/docs/observability/integrations/newrelic.mdx index 5fc70a1c092..5aa90d3ea18 100644 --- a/docs/docs/observability/integrations/newrelic.mdx +++ b/docs/docs/observability/integrations/newrelic.mdx @@ -1,7 +1,7 @@ --- sidebar_position: 2 description: New Relic Integration on Hasura Cloud -title: 'Cloud: New Relic Integration' +title: "Cloud: New Relic Integration" keywords: - hasura - docs @@ -14,12 +14,12 @@ keywords: sidebar_label: New Relic --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # New Relic Integration -
Available on: Cloud Standard
+
Available on: Professional, Enterprise
## Introduction diff --git a/docs/docs/observability/integrations/opentelemetry.mdx b/docs/docs/observability/integrations/opentelemetry.mdx index 94dd76be7e7..1bb8bdc07ef 100644 --- a/docs/docs/observability/integrations/opentelemetry.mdx +++ b/docs/docs/observability/integrations/opentelemetry.mdx @@ -2,7 +2,7 @@ sidebar_label: OpenTelemetry sidebar_position: 5 description: OpenTelemetry Integration on Hasura Cloud -title: 'Cloud: OpenTelemetry Integration' +title: "Cloud: OpenTelemetry Integration" keywords: - hasura - docs @@ -14,12 +14,12 @@ keywords: - open telemetry --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # OpenTelemetry Integration -
Available on: Cloud Standard
+
Available on: Professional, Enterprise
## Introduction @@ -44,7 +44,7 @@ OpenTelemetry spec reaches [stability](https://opentelemetry.io/status/#current- Navigate to the `Integrations` tab on the project settings page to find the OpenTelemetry integration. - + The following config parameters are needed to set up the integration with the APM receiver: @@ -85,9 +85,9 @@ documentation for the request header formats. Headers should be added here as a After adding appropriate values in the OpenTelemetry Integration panel, click Connect Integration. ## Checking the status of the integration @@ -98,18 +98,18 @@ data that was successfully exported. The orange dot reading `Not exported yet` m GraphQL API after configuring the integration. In case of errors while exporting telemetry data to the APM receiver, the dot becomes red and the error messages/instructions are displayed. Click the `Update Settings` button to update the config parameters. ## View traces @@ -121,9 +121,9 @@ flame graph in `Jaeger` where a query took 5.64 milliseconds in total, of which Postgres database processing the query. ## OpenTelemetry collector diff --git a/docs/docs/observability/integrations/prometheus.mdx b/docs/docs/observability/integrations/prometheus.mdx index 338b1a4752e..e9bde50e575 100644 --- a/docs/docs/observability/integrations/prometheus.mdx +++ b/docs/docs/observability/integrations/prometheus.mdx @@ -2,7 +2,7 @@ sidebar_label: Prometheus sidebar_position: 4 description: Prometheus Integration on Hasura Cloud -title: 'Cloud: Prometheus Integration' +title: "Cloud: Prometheus Integration" keywords: - hasura - docs @@ -14,12 +14,12 @@ keywords: - grafana --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Prometheus Integration -
Available on: Cloud Standard
+
Available on: Professional, Enterprise
## Introduction @@ -37,7 +37,7 @@ above. Navigate to the integrations tab on project settings page to find Prometheus integration. - + Enter the Namespace and label values to be associated to the exported metrics and click on Connect Integration. @@ -46,7 +46,7 @@ Enter the Namespace and label values to be associated to the exported metrics an | Namespace (Optional) | The single word prefix relevant to the domain the metrics belong to. [Read more about namespace on Prometheus docs.](https://prometheus.io/docs/practices/naming/#metric-names) | | Labels (Optional) | [Labels](https://prometheus.io/docs/practices/naming/#labels) are key-value pairs associated with your metrics used to differentiate the characteristics of the metric that is being measured. | - + ## Prometheus instance configuration @@ -58,15 +58,15 @@ Access token as Password. The Connection URL is needed to configure the Scrape T The Access Token is generated once the Integration is created. The token is showed only once and cannot be retrieved again. Access token is used as the password for Basic Authentication by the Prometheus Agent. - + The token can be re-generated from the Configuration Panel of the Integration. This action is permanent and cannot be reversed. ### Connection URL @@ -76,13 +76,13 @@ namely scheme, host name and metrics_path. For example, if the connection URL is `https://prometheus-exporter.pro.hasura.io/metrics`, then the scheme is `https`, host name (This includes sub-domains as well) is `prometheus-exporter.pro.hasura.io` and metrics_path is `/metrics`. - + ### Project ID The Project ID is used as the Username for the Basic Authentication by the Prometheus agent. - + The following YAML template can be used as the [config file](https://prometheus.io/docs/prometheus/latest/configuration/configuration/) to establish connectivity with @@ -92,15 +92,15 @@ the exposed Integration. global: scrape_interval: 60s scrape_configs: - - job_name: 'hasura_prometheus_exporter' + - job_name: "hasura_prometheus_exporter" scrape_interval: 60s ## Recommended scrape interval is 60s - metrics_path: '/metrics' ## Replace with metrics Path of the connection URL - scheme: 'https' ## Replace with the scheme of the connection URL + metrics_path: "/metrics" ## Replace with metrics Path of the connection URL + scheme: "https" ## Replace with the scheme of the connection URL basic_auth: - username: 'd01c60e1-1b11-564d-bb09-0a39e3e41b05' ## Replace with project ID - password: 'IrhO3GlR8oXTfsdfdsNs8Nj' ## Replace with Access Token + username: "d01c60e1-1b11-564d-bb09-0a39e3e41b05" ## Replace with project ID + password: "IrhO3GlR8oXTfsdfdsNs8Nj" ## Replace with Access Token static_configs: - - targets: ['prometheus-exporter.pro.hasura.io'] ## Replace with the host name of the connection URL + - targets: ["prometheus-exporter.pro.hasura.io"] ## Replace with the host name of the connection URL ``` ## Checking the status of the integration @@ -110,18 +110,18 @@ Prometheus. When metrics are successfully exported, `Last Exported` is continuou the last metric successfully exported to your Prometheus Instance. In case there is an error while exporting metrics to Prometheus, the dot is red and the error message is displayed right below it. ## Metrics details @@ -155,4 +155,4 @@ If `Namespace` and `Labels` are configured (Optional), the format of the metric The metrics can be queried from the Prometheus Dashboard (or using tools like [Grafana](https://prometheus.io/docs/visualization/grafana/)) - + diff --git a/docs/docs/observability/operations.mdx b/docs/docs/observability/operations.mdx index 57e2c4505af..4416c097bd9 100644 --- a/docs/docs/observability/operations.mdx +++ b/docs/docs/observability/operations.mdx @@ -1,7 +1,7 @@ --- sidebar_position: 5 sidebar_label: Operations -title: 'Cloud: Operations' +title: "Cloud: Operations" description: Hasura Cloud operation analysis keywords: - hasura @@ -10,17 +10,17 @@ keywords: - operations --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Operations -
Available on: Cloud Standard
+
Available on: Cloud
## Introduction -The Operations tab will present a processed real-time log of all requests to the GraphQL Engine. Here you -can also inspect individual operations. +The Operations tab will present a processed real-time log of all requests to the GraphQL Engine. Here you can also +inspect individual operations. @@ -34,7 +34,7 @@ variables" which is disabled by default. When "Capture query variables" is enabled, you are able to inspect the query variables provided for each request. diff --git a/docs/docs/observability/overview.mdx b/docs/docs/observability/overview.mdx index 964e57b10c7..9f6f1493be9 100644 --- a/docs/docs/observability/overview.mdx +++ b/docs/docs/observability/overview.mdx @@ -2,7 +2,7 @@ sidebar_label: Stats Overview sidebar_position: 2 description: Hasura Cloud stats overview -title: 'Cloud: Stats Overview' +title: "Cloud: Stats Overview" keywords: - hasura - docs @@ -10,12 +10,12 @@ keywords: - overview --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Stats Overview -
Available on: Cloud Standard
+
Available on: Cloud
## Overview diff --git a/docs/docs/observability/query-tags.mdx b/docs/docs/observability/query-tags.mdx index d213a3f68f9..5caa85a7da9 100644 --- a/docs/docs/observability/query-tags.mdx +++ b/docs/docs/observability/query-tags.mdx @@ -1,7 +1,7 @@ --- description: Hasura Cloud Query tags sidebar_label: Query Tags -title: 'Cloud Standard & EE: Query Tags' +title: 'Cloud & Enterprise: Query Tags' keywords: - hasura - docs @@ -15,7 +15,7 @@ import HeadingIcon from '@site/src/components/HeadingIcon'; # Query Tags -
Available on: Cloud Standard, Enterprise Edition
+
Available on: Standard, Professional, Enterprise
## Introduction @@ -110,16 +110,16 @@ In the above Metadata spec: tags is enabled for the source and the format used is standard. 2. To disable query tags for any source, set the value of disabled field to true. 3. To override the default format (Standard) for query tags, use the format field. -4. To omit the `request_id` part of the query tags for any source, set the value of omit_request_id field to true. +4. To omit the `request_id` part of the query tags for any source, set the value of omit_request_id field to + true. :::info -When the `use_prepared_statements` flag for a Postgres source is enabled, -omitting the `request_id` part of the query tags is recommended. +When the `use_prepared_statements` flag for a Postgres source is enabled, omitting the `request_id` part of the query +tags is recommended. ::: - ## Example Metadata Specification ```yaml diff --git a/docs/docs/observability/subscription-workers.mdx b/docs/docs/observability/subscription-workers.mdx index 46b0ff27d32..06cbff782dc 100644 --- a/docs/docs/observability/subscription-workers.mdx +++ b/docs/docs/observability/subscription-workers.mdx @@ -2,7 +2,7 @@ sidebar_position: 7 sidebar_label: Subscription workers description: Hasura Cloud subscription workers -title: 'Cloud: Subscription workers' +title: "Cloud: Subscription workers" keywords: - hasura - docs @@ -10,18 +10,18 @@ keywords: - subscription-workers --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Subscription Workers -
Available on: Cloud Standard
+
Available on: Cloud
## Overview Subscription workers offer a subscription-worker-specific version of usage statistics: diff --git a/docs/docs/observability/tracing.mdx b/docs/docs/observability/tracing.mdx index 2372683e66c..cb615a2273a 100644 --- a/docs/docs/observability/tracing.mdx +++ b/docs/docs/observability/tracing.mdx @@ -1,7 +1,7 @@ --- description: Distributed tracing with Hasura Cloud sidebar_label: Distributed tracing -title: 'Cloud: Distributed tracing' +title: "Cloud: Distributed tracing" keywords: - hasura - docs @@ -10,12 +10,12 @@ keywords: sidebar_position: 8 --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Distributed Tracing -
Available on: Enterprise Edition, Cloud Standard
+
Available on: Standard, Professional, Enterprise
## Introduction diff --git a/docs/docs/observability/usage.mdx b/docs/docs/observability/usage.mdx index c2cc73879f3..6ac0f337bd1 100644 --- a/docs/docs/observability/usage.mdx +++ b/docs/docs/observability/usage.mdx @@ -2,7 +2,7 @@ sidebar_position: 4 sidebar_label: Usage summaries description: Hasura Cloud usage analysis -title: 'Cloud: Usage summaries' +title: "Cloud: Usage summaries" keywords: - hasura - docs @@ -11,20 +11,20 @@ keywords: - usage --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Usage Summaries -
Available on: Cloud Standard
+
Available on: Cloud
## Overview Learn about usage with aggregate summaries and filtering tools: - + Drill into an operation via its magnifying-glass icon in the 'Query List' table. You'll be taken to a list of similar operations, and can choose one to inspect for content, metadata, and error generated: - + diff --git a/docs/docs/observability/websockets.mdx b/docs/docs/observability/websockets.mdx index db113bd1d24..7092d90df49 100644 --- a/docs/docs/observability/websockets.mdx +++ b/docs/docs/observability/websockets.mdx @@ -2,7 +2,7 @@ sidebar_position: 6 sidebar_label: Websockets description: Hasura Cloud websockets analysis -title: 'Cloud: Websockets' +title: "Cloud: Websockets" keywords: - hasura - docs @@ -10,15 +10,15 @@ keywords: - websockets --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Websockets -
Available on: Cloud Standard
+
Available on: Cloud, Enterprise (Self-hosted)
## Overview Websockets is a ws-specific version of usage statistics: - + diff --git a/docs/docs/policies/sla.mdx b/docs/docs/policies/sla.mdx index d8e6a0cd3e2..ee134d765d6 100644 --- a/docs/docs/policies/sla.mdx +++ b/docs/docs/policies/sla.mdx @@ -1,5 +1,5 @@ --- -title: 'Cloud Standard & EE: Hasura Service Level Agreement' +title: 'Cloud Standard, Professional, & EE: Hasura Service Level Agreement' description: Hasura Service Level Agreement for Hasura Cloud sidebar_label: Hasura SLA sidebar_position: 0 @@ -12,7 +12,7 @@ sidebar_class_name: cloud-and-enterprise-icon # Hasura Cloud Service Level Agreement (SLA) -
Available on: Cloud Standard, Cloud Enterprise
+
Available on: Standard, Professional, Enterprise (Cloud)
## Overview @@ -24,7 +24,7 @@ applies to paid tiers in Hasura Cloud. We calculate SLA uptime monthly and measure uptime with an HTTP request to the `/v1/version` endpoint on a project at a regular interval. -Cloud Standard users can find more detail regarding uptime in our +Cloud Standard and Cloud Professional users can find more detail regarding uptime in our [terms of service](https://hasura.io/legal/hasura-cloud-terms-of-service/). Cloud Enterprise users should reference their contracts for details. diff --git a/docs/docs/projects/collaborators.mdx b/docs/docs/projects/collaborators.mdx index 820e7e27b33..a47cc2682fa 100644 --- a/docs/docs/projects/collaborators.mdx +++ b/docs/docs/projects/collaborators.mdx @@ -1,7 +1,7 @@ --- sidebar_label: Project collaborators description: Managing collaborators on Hasura Cloud -title: 'Cloud: Project Collaborators' +title: "Cloud: Project Collaborators" keywords: - hasura - docs @@ -11,12 +11,12 @@ keywords: sidebar_position: 3 --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Project Collaborators -
Available on: Cloud
+
Available on: Cloud, Enterprise (Self-hosted)
## Introduction diff --git a/docs/docs/projects/ownership.mdx b/docs/docs/projects/ownership.mdx index 6e03f5a8001..30fe9dd3ca2 100644 --- a/docs/docs/projects/ownership.mdx +++ b/docs/docs/projects/ownership.mdx @@ -25,7 +25,7 @@ original owner will lose all access to the project. :::info Note -If the project is on the `Standard` (pay-as-you-go) tier, the new owner will pay for the entire data usage for the month +If the project is on the `Standard` or `Professional` (pay-as-you-go) tier, the new owner will pay for the entire data usage for the month in which the ownership is transferred. ::: @@ -59,7 +59,7 @@ You can accept an invitation by clicking on the `Accept` button. :::info Note -If the project is on the `Standard` (pay-as-you-go) tier, the new owner must have an active card associated with their +If the project is on the `Standard` or `Professional` (pay-as-you-go) tier, the new owner must have an active card associated with their Hasura Cloud account to accept the invitation. ::: diff --git a/docs/docs/projects/pricing.mdx b/docs/docs/projects/pricing.mdx index a5d1c5d01cb..9737695c544 100644 --- a/docs/docs/projects/pricing.mdx +++ b/docs/docs/projects/pricing.mdx @@ -1,6 +1,6 @@ --- description: Switch pricing plans -title: 'Cloud: Switch pricing plans' +title: "Cloud: Switch pricing plans" keywords: - hasura - docs @@ -10,8 +10,8 @@ sidebar_position: 8 sidebar_label: Switch pricing plans --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Switch Pricing Plans @@ -27,7 +27,7 @@ between these plans. There are three different pricing plans that you can chose from: - Free -- Standard (Pay-as-you-go) +- Professional (Pay-as-you-go) - Enterprise :::info Note @@ -45,20 +45,20 @@ By clicking on the `Projects` tab, you can see all your projects and what plan t ## Switching pricing plans -### Switch from **Free** to **Standard** tier +### Switch from **Free** to **Professional** tier Once the `Free` tier data limit is exhausted, the project becomes inactive. In order to keep it active, you can switch -to the `Standard` plan. +to the `Professional` plan. Go to `Projects` and click on the project you'd like to change. -Now click on the `Usage tab`. To upgrade to the `Standard` plan, click on the `Upgrade` button: +Now click on the `Usage tab`. To upgrade to the `Professional` plan, click on the `Upgrade` button: -Your project is now running on the `Standard` plan. +Your project is now running on the `Professional` plan. -### Switch from **Standard** to **Free** tier +### Switch from **Professional** to **Free** tier Go to `Projects` and click on the project you'd like to change. @@ -66,8 +66,8 @@ Under the `General` tab, find the `Pricing tier` section and click on the edit i -You'll be charged as per the `Standard` plan until the end of the day. From the next day onwards, the project will be on -the `Free` tier. If the `Free` tier limit is exhausted, the project might become inactive. +You'll be charged as per the `Professional` plan until the end of the day. From the next day onwards, the project will +be on the `Free` tier. If the `Free` tier limit is exhausted, the project might become inactive. ### Switch to and from **Enterprise** tier diff --git a/docs/docs/queries/response-caching.mdx b/docs/docs/queries/response-caching.mdx index 6b8a6eab4c9..0a65682985c 100644 --- a/docs/docs/queries/response-caching.mdx +++ b/docs/docs/queries/response-caching.mdx @@ -1,7 +1,7 @@ --- description: Query response caching in Hasura Cloud sidebar_label: Response Caching -title: 'Cloud: Query response caching' +title: "Cloud: Query response caching" keywords: - hasura - docs @@ -12,11 +12,11 @@ sidebar_position: 3 sidebar_class_name: cloud-and-enterprise-icon --- -import HeadingIcon from '@site/src/components/HeadingIcon'; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Query Response Caching -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Introduction diff --git a/docs/docs/security/allow-list.mdx b/docs/docs/security/allow-list.mdx index 3e8bdbff590..8dfe9688a78 100644 --- a/docs/docs/security/allow-list.mdx +++ b/docs/docs/security/allow-list.mdx @@ -9,10 +9,10 @@ keywords: sidebar_position: 8 --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; # Allow List of Operations @@ -147,7 +147,7 @@ query ($id: Int!) { ## Role-based Allow List -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
A role-based Allow List is useful when you would like a query collection(s) to be accessible to only certain roles. diff --git a/docs/docs/security/api-limits.mdx b/docs/docs/security/api-limits.mdx index feb1a937694..e89859a7fba 100644 --- a/docs/docs/security/api-limits.mdx +++ b/docs/docs/security/api-limits.mdx @@ -1,5 +1,5 @@ --- -description: Hasura Cloud Standard and Hasura Enterprise API limits +description: Hasura Cloud Standard, Professional, and Hasura Enterprise API limits keywords: - hasura - docs @@ -10,7 +10,7 @@ keywords: sidebar_position: 2 sidebar_label: API limits sidebar_class_name: cloud-and-enterprise-icon -title: 'Cloud Standard & EE: API Limits' +title: 'Cloud & EE: API Limits' --- import Thumbnail from '@site/src/components/Thumbnail'; @@ -18,7 +18,7 @@ import HeadingIcon from '@site/src/components/HeadingIcon'; # API Limits -
Available on: Cloud, Enterprise Edition
+
Available on: Standard, Professional, Enterprise
## Introduction @@ -200,4 +200,5 @@ All API limits are **not** applied for the admin role, and depth limits are **NO ## Metadata specification -This [API Reference Documentation](/api-reference/metadata-api/api-limits.mdx) describes the metadata API structure to manage API limits. +This [API Reference Documentation](/api-reference/metadata-api/api-limits.mdx) describes the metadata API structure to +manage API limits. diff --git a/docs/docs/security/container-images.mdx b/docs/docs/security/container-images.mdx index 0c5bee0888e..97292dca77e 100644 --- a/docs/docs/security/container-images.mdx +++ b/docs/docs/security/container-images.mdx @@ -1,11 +1,11 @@ --- -title: 'Cloud: Marketplaces' +title: "Cloud: Marketplaces" description: Hasura Cloud Marketplaces keywords: - hasura - Vulnerability - scanning - - container + - container - images - security - cloud @@ -13,10 +13,11 @@ sidebar_label: Proactive vulnerability scanning sidebar_class_name: cloud-and-enterprise-icon --- +# Proactive Vulnerability Scanning of Container Images -# Proactive Vulnerability Scanning of Container Images - -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Overview -Hasura regularly scans all container images used in Hasura Cloud and Hasura Enterprise for vulnerabilities with leading container scanning tools. Those marked “Critical” or “High” are remediated before the next release. + +Hasura regularly scans all container images used in Hasura Cloud and Hasura Enterprise for vulnerabilities with leading +container scanning tools. Those marked “Critical” or “High” are remediated before the next release. diff --git a/docs/docs/security/disable-graphql-introspection.mdx b/docs/docs/security/disable-graphql-introspection.mdx index 935314d1133..9a61f064ac6 100644 --- a/docs/docs/security/disable-graphql-introspection.mdx +++ b/docs/docs/security/disable-graphql-introspection.mdx @@ -1,5 +1,5 @@ --- -description: Hasura Cloud Standard and Hasura Enterprise disable GraphQL introspection +description: Hasura Cloud and EE disable GraphQL introspection title: 'Cloud Standard & EE: Disable GraphQL introspection' keywords: - hasura @@ -20,7 +20,7 @@ import HeadingIcon from '@site/src/components/HeadingIcon'; # Disable GraphQL Introspection -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Introduction diff --git a/docs/docs/security/index.mdx b/docs/docs/security/index.mdx index 0e3334b2b40..bbf7169c38f 100644 --- a/docs/docs/security/index.mdx +++ b/docs/docs/security/index.mdx @@ -1,6 +1,6 @@ --- description: Hasura Cloud Standard and Hasura Enterprise API Security -title: 'Cloud & EE: API Security' +title: "Cloud & EE: API Security" keywords: - hasura - docs @@ -13,13 +13,13 @@ slug: index sidebar_label: API security --- -import Thumbnail from '@site/src/components/Thumbnail'; -import HeadingIcon from '@site/src/components/HeadingIcon'; -import Security from '@site/static/icons/features/security.svg'; +import Thumbnail from "@site/src/components/Thumbnail"; +import HeadingIcon from "@site/src/components/HeadingIcon"; +import Security from "@site/static/icons/features/security.svg"; # API Security -
Available on: Cloud, Enterprise Edition
+
Available on: Cloud, Enterprise
## Introduction diff --git a/docs/docs/security/multiple-admin-secrets.mdx b/docs/docs/security/multiple-admin-secrets.mdx index 58cc96e4a78..e561610130d 100644 --- a/docs/docs/security/multiple-admin-secrets.mdx +++ b/docs/docs/security/multiple-admin-secrets.mdx @@ -1,5 +1,5 @@ --- -description: Hasura Cloud Standard and Hasura Enterprise multiple admin secrets +description: Hasura Cloud and Hasura Enterprise multiple admin secrets title: 'Cloud Standard & EE: Multiple Admin Secrets' keywords: - hasura @@ -21,7 +21,7 @@ import HeadingIcon from '@site/src/components/HeadingIcon'; # Multiple Admin Secrets -
Available on: Cloud, Enterprise Edition
+
Available on: Standard, Professional, Enterprise
## Introduction diff --git a/docs/docs/security/multiple-jwt-secrets.mdx b/docs/docs/security/multiple-jwt-secrets.mdx index a6c9dd29811..fd95fd1200d 100644 --- a/docs/docs/security/multiple-jwt-secrets.mdx +++ b/docs/docs/security/multiple-jwt-secrets.mdx @@ -1,5 +1,5 @@ --- -description: Hasura Cloud Standard and Hasura Enterprise multiple JWT Secrets +description: Hasura Cloud and Hasura Enterprise multiple JWT Secrets title: 'Cloud Standard & EE: Multiple JWT Secrets' keywords: - hasura @@ -20,7 +20,7 @@ import HeadingIcon from '@site/src/components/HeadingIcon'; # Multiple JWT Secrets -
Available on: Cloud, Enterprise Edition
+
Available on: Standard, Professional, Enterprise
## Introduction diff --git a/docs/static/img/projects/project-pricing-plans.png b/docs/static/img/projects/project-pricing-plans.png index aef53d230944aeaeabbed34f8c14ba955b2c2e6e..db61b985ce5005130a283213c2771afcda4e1ee6 100644 GIT binary patch literal 55493 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

9OgIaA*e#gShUW9ln4zNQ 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