From 018938ff9147267e250b0d6ce6b0c483d5e965a7 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sat, 1 Feb 2025 18:34:10 +0000 Subject: [PATCH 1/9] feat: add basic docs promoting PlatformX integration --- docs/admin/integrations/platformx.md | 28 ++++++ .../integrations/platformx-screenshot.png | Bin 0 -> 60231 bytes docs/manifest.json | 81 ++++++++++++++---- 3 files changed, 93 insertions(+), 16 deletions(-) create mode 100644 docs/admin/integrations/platformx.md create mode 100644 docs/images/integrations/platformx-screenshot.png diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md new file mode 100644 index 0000000000000..f5c6b64e8a858 --- /dev/null +++ b/docs/admin/integrations/platformx.md @@ -0,0 +1,28 @@ +# PlatformX by DX + +[DX](https://getdx.com) is a developer intelligence platform used by engineering +leaders and platform engineers. Coder notifications can be transformed to +[PlatformX](https://getdx.com/platformx) events, allowing platform engineers to +measure activity and send pulse surveys to Coder users based on their +experience. + +![PlatformX Events in Coder](../../images/integrations/platformx-screenshot.png) + +## Requirements + +You'll need: + +- A running Coder deployment +- A PlatformX subscription from [DX](https://getdx.com/) +- A platform to host the integration (choose any of these): + - AWS Lambda + - Heroku + - Kubernetes + - Or any other platform that can run Python web applications + +## Getting Started + +Refer to the instructions in the +[coder-platformx-notifications](https://github.com/coder-platformx-notifications) +repository to deploy a lightweight web server to forward Coder Notifications to +PlatformX. diff --git a/docs/images/integrations/platformx-screenshot.png b/docs/images/integrations/platformx-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..20bffb215a93121cc3d317054cc7aed7ff1cef5a GIT binary patch literal 60231 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 QQ{bbmp|4)5di(J|0OD^yy8r+H literal 0 HcmV?d00001 diff --git a/docs/manifest.json b/docs/manifest.json index 119099ab0b061..5294b356c3e07 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1,5 +1,7 @@ { - "versions": ["main"], + "versions": [ + "main" + ], "routes": [ { "title": "About", @@ -200,7 +202,10 @@ "title": "Appearance", "description": "Learn how to configure the appearance of Coder", "path": "./admin/setup/appearance.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "Telemetry", @@ -281,22 +286,34 @@ { "title": "Groups \u0026 Roles", "path": "./admin/users/groups-roles.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "IdP Sync", "path": "./admin/users/idp-sync.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "Organizations", "path": "./admin/users/organizations.md", - "state": ["premium", "beta"] + "state": [ + "premium", + "beta" + ] }, { "title": "Quotas", "path": "./admin/users/quotas.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "Sessions \u0026 API Tokens", @@ -433,7 +450,10 @@ "title": "Process Logging", "description": "Log workspace processes", "path": "./admin/templates/extending-templates/process-logging.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] } ] }, @@ -446,7 +466,10 @@ "title": "Permissions \u0026 Policies", "description": "Learn how to create templates with Terraform", "path": "./admin/templates/template-permissions.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "Troubleshooting Templates", @@ -460,7 +483,10 @@ "description": "Learn how to run external provisioners with Coder", "path": "./admin/provisioners.md", "icon_path": "./images/icons/key.svg", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "External Auth", @@ -504,6 +530,11 @@ "description": "Integrate Coder with Island's Secure Browser", "path": "./admin/integrations/island.md" }, + { + "title": "PlatformX by DX", + "description": "Integrate Coder PlatformX by getDX", + "path": "./admin/integrations/platformx.md" + }, { "title": "Hashicorp Vault", "description": "Integrate Coder with Hashicorp Vault", @@ -531,13 +562,19 @@ "title": "Workspace Proxies", "description": "Run geo distributed workspace proxies", "path": "./admin/networking/workspace-proxies.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "High Availability", "description": "Learn how to configure Coder for High Availability", "path": "./admin/networking/high-availability.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "Troubleshooting", @@ -571,19 +608,25 @@ "title": "Notifications", "description": "Configure notifications for your deployment", "path": "./admin/monitoring/notifications/index.md", - "state": ["beta"], + "state": [ + "beta" + ], "children": [ { "title": "Slack Notifications", "description": "Learn how to setup Slack notifications", "path": "./admin/monitoring/notifications/slack.md", - "state": ["beta"] + "state": [ + "beta" + ] }, { "title": "Microsoft Teams Notifications", "description": "Learn how to setup Microsoft Teams notifications", "path": "./admin/monitoring/notifications/teams.md", - "state": ["beta"] + "state": [ + "beta" + ] } ] } @@ -599,7 +642,10 @@ "title": "Audit Logs", "description": "Audit actions taken inside Coder", "path": "./admin/security/audit-logs.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] }, { "title": "Secrets", @@ -610,7 +656,10 @@ "title": "Database Encryption", "description": "Encrypt the database to prevent unauthorized access", "path": "./admin/security/database-encryption.md", - "state": ["enterprise", "premium"] + "state": [ + "enterprise", + "premium" + ] } ] }, From dadcbf3b155785cb2807141d1a020756701c30ea Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sat, 1 Feb 2025 18:34:41 +0000 Subject: [PATCH 2/9] fix: link to github repo --- docs/admin/integrations/platformx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md index f5c6b64e8a858..a90ba15c54a09 100644 --- a/docs/admin/integrations/platformx.md +++ b/docs/admin/integrations/platformx.md @@ -23,6 +23,6 @@ You'll need: ## Getting Started Refer to the instructions in the -[coder-platformx-notifications](https://github.com/coder-platformx-notifications) +[coder-platformx-notifications](https://github.com/coder/coder-platformx-notifications) repository to deploy a lightweight web server to forward Coder Notifications to PlatformX. From b441228ebcd6e6fbd9572092ebda57cc3dca00d7 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sat, 1 Feb 2025 18:49:19 +0000 Subject: [PATCH 3/9] lint --- docs/admin/integrations/platformx.md | 2 +- docs/manifest.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md index a90ba15c54a09..4e720a3a363e7 100644 --- a/docs/admin/integrations/platformx.md +++ b/docs/admin/integrations/platformx.md @@ -1,4 +1,4 @@ -# PlatformX by DX +# DX PlatformX [DX](https://getdx.com) is a developer intelligence platform used by engineering leaders and platform engineers. Coder notifications can be transformed to diff --git a/docs/manifest.json b/docs/manifest.json index 5294b356c3e07..9b377210300bc 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -531,8 +531,8 @@ "path": "./admin/integrations/island.md" }, { - "title": "PlatformX by DX", - "description": "Integrate Coder PlatformX by getDX", + "title": "DX PlatformX", + "description": "Integrate Coder with DX PlatformX", "path": "./admin/integrations/platformx.md" }, { From 75a2d2c662a1d3a19f9d6cdfb6bc2b4630e2c5e3 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sat, 1 Feb 2025 18:53:33 +0000 Subject: [PATCH 4/9] clarify Coder version --- docs/admin/integrations/platformx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md index 4e720a3a363e7..143bd9bd5700d 100644 --- a/docs/admin/integrations/platformx.md +++ b/docs/admin/integrations/platformx.md @@ -12,7 +12,7 @@ experience. You'll need: -- A running Coder deployment +- A running Coder v2.19+ deployment - A PlatformX subscription from [DX](https://getdx.com/) - A platform to host the integration (choose any of these): - AWS Lambda From 73c009bf3e166137a0d8e74eeec30bafc4404c99 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sun, 2 Feb 2025 00:34:28 +0000 Subject: [PATCH 5/9] clarify value --- docs/admin/integrations/platformx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md index 143bd9bd5700d..c3b632716acc8 100644 --- a/docs/admin/integrations/platformx.md +++ b/docs/admin/integrations/platformx.md @@ -3,7 +3,7 @@ [DX](https://getdx.com) is a developer intelligence platform used by engineering leaders and platform engineers. Coder notifications can be transformed to [PlatformX](https://getdx.com/platformx) events, allowing platform engineers to -measure activity and send pulse surveys to Coder users based on their +measure activity and send pulse surveys to subsets of Coder users to guage their experience. ![PlatformX Events in Coder](../../images/integrations/platformx-screenshot.png) From 4c6d6f8b994801c4fdbae63bb575d267cbc5010e Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sun, 2 Feb 2025 00:57:54 +0000 Subject: [PATCH 6/9] fix wording --- docs/admin/integrations/platformx.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md index c3b632716acc8..5c7f5d618c314 100644 --- a/docs/admin/integrations/platformx.md +++ b/docs/admin/integrations/platformx.md @@ -3,8 +3,8 @@ [DX](https://getdx.com) is a developer intelligence platform used by engineering leaders and platform engineers. Coder notifications can be transformed to [PlatformX](https://getdx.com/platformx) events, allowing platform engineers to -measure activity and send pulse surveys to subsets of Coder users to guage their -experience. +measure activity and send pulse surveys to subsets of Coder users to measure +their experience. ![PlatformX Events in Coder](../../images/integrations/platformx-screenshot.png) From 03a1da6657fdd296bf90e4e1943b0c3142795246 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sun, 2 Feb 2025 00:58:09 +0000 Subject: [PATCH 7/9] idk grammar --- docs/admin/integrations/platformx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md index 5c7f5d618c314..530fb0454721d 100644 --- a/docs/admin/integrations/platformx.md +++ b/docs/admin/integrations/platformx.md @@ -3,7 +3,7 @@ [DX](https://getdx.com) is a developer intelligence platform used by engineering leaders and platform engineers. Coder notifications can be transformed to [PlatformX](https://getdx.com/platformx) events, allowing platform engineers to -measure activity and send pulse surveys to subsets of Coder users to measure +measure activity and send pulse surveys to subsets of Coder users to understand their experience. ![PlatformX Events in Coder](../../images/integrations/platformx-screenshot.png) From c0be21aa8f9f8617195795491fa48ae1ba12fb7c Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Sun, 2 Feb 2025 22:05:39 +0000 Subject: [PATCH 8/9] make lint/fmt/gen --- docs/manifest.json | 76 ++++++++++------------------------------------ 1 file changed, 16 insertions(+), 60 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 9b377210300bc..871f300f36ef9 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1,7 +1,5 @@ { - "versions": [ - "main" - ], + "versions": ["main"], "routes": [ { "title": "About", @@ -202,10 +200,7 @@ "title": "Appearance", "description": "Learn how to configure the appearance of Coder", "path": "./admin/setup/appearance.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "Telemetry", @@ -286,34 +281,22 @@ { "title": "Groups \u0026 Roles", "path": "./admin/users/groups-roles.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "IdP Sync", "path": "./admin/users/idp-sync.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "Organizations", "path": "./admin/users/organizations.md", - "state": [ - "premium", - "beta" - ] + "state": ["premium", "beta"] }, { "title": "Quotas", "path": "./admin/users/quotas.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "Sessions \u0026 API Tokens", @@ -450,10 +433,7 @@ "title": "Process Logging", "description": "Log workspace processes", "path": "./admin/templates/extending-templates/process-logging.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] } ] }, @@ -466,10 +446,7 @@ "title": "Permissions \u0026 Policies", "description": "Learn how to create templates with Terraform", "path": "./admin/templates/template-permissions.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "Troubleshooting Templates", @@ -483,10 +460,7 @@ "description": "Learn how to run external provisioners with Coder", "path": "./admin/provisioners.md", "icon_path": "./images/icons/key.svg", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "External Auth", @@ -562,19 +536,13 @@ "title": "Workspace Proxies", "description": "Run geo distributed workspace proxies", "path": "./admin/networking/workspace-proxies.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "High Availability", "description": "Learn how to configure Coder for High Availability", "path": "./admin/networking/high-availability.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "Troubleshooting", @@ -608,25 +576,19 @@ "title": "Notifications", "description": "Configure notifications for your deployment", "path": "./admin/monitoring/notifications/index.md", - "state": [ - "beta" - ], + "state": ["beta"], "children": [ { "title": "Slack Notifications", "description": "Learn how to setup Slack notifications", "path": "./admin/monitoring/notifications/slack.md", - "state": [ - "beta" - ] + "state": ["beta"] }, { "title": "Microsoft Teams Notifications", "description": "Learn how to setup Microsoft Teams notifications", "path": "./admin/monitoring/notifications/teams.md", - "state": [ - "beta" - ] + "state": ["beta"] } ] } @@ -642,10 +604,7 @@ "title": "Audit Logs", "description": "Audit actions taken inside Coder", "path": "./admin/security/audit-logs.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] }, { "title": "Secrets", @@ -656,10 +615,7 @@ "title": "Database Encryption", "description": "Encrypt the database to prevent unauthorized access", "path": "./admin/security/database-encryption.md", - "state": [ - "enterprise", - "premium" - ] + "state": ["enterprise", "premium"] } ] }, From 7bda04d01081d1689401bd649d90614d30bc5616 Mon Sep 17 00:00:00 2001 From: Edward Angert Date: Mon, 3 Feb 2025 17:35:30 -0500 Subject: [PATCH 9/9] docs: update PlatformX doc with steps from README (#16406) copied and reformatted the steps from the https://github.com/coder/coder-platformx-notifications README to include them as an example in the Coder docs [preview](https://coder.com/docs/@ea-dx-integration/admin/integrations/platformx) --------- Co-authored-by: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> --- docs/admin/integrations/platformx.md | 54 ++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/docs/admin/integrations/platformx.md b/docs/admin/integrations/platformx.md index 530fb0454721d..207087b23562e 100644 --- a/docs/admin/integrations/platformx.md +++ b/docs/admin/integrations/platformx.md @@ -12,17 +12,59 @@ their experience. You'll need: -- A running Coder v2.19+ deployment +- Coder v2.19+ - A PlatformX subscription from [DX](https://getdx.com/) -- A platform to host the integration (choose any of these): +- A platform to host the integration, such as: - AWS Lambda + - Google Cloud Run - Heroku - Kubernetes - Or any other platform that can run Python web applications -## Getting Started +## coder-platformx-events-middleware -Refer to the instructions in the +Coder sends [notifications](../monitoring/notifications/index.md) via webhooks +to coder-platformx-events-middleware, which processes and reformats the payload +into a structure compatible with [PlatformX by DX](https://help.getdx.com/en/articles/7880779-getting-started). + +For more information about coder-platformx-events-middleware and how to +integrate it with your Coder deployment and PlatformX events, refer to the [coder-platformx-notifications](https://github.com/coder/coder-platformx-notifications) -repository to deploy a lightweight web server to forward Coder Notifications to -PlatformX. +repository. + +### Supported Notification Types + +coder-platformx-events-middleware supports the following [Coder notifications](../monitoring/notifications/index.md): + +- Workspace Created +- Workspace Manually Updated +- User Account Created +- User Account Suspended +- User Account Activated + +### Environment Variables + +The application expects the following environment variables when started. +For local development, create a `.env` file in the project root with the following variables. +A `.env.sample` file is included: + +| Variable | Description | Example | +|------------------|--------------------------------------------|----------------------------------------------| +| `LOG_LEVEL` | Logging level (`DEBUG`, `INFO`, `WARNING`) | `INFO` | +| `GETDX_API_KEY` | API key for PlatformX | `your-api-key` | +| `EVENTS_TRACKED` | Comma-separated list of tracked events | `"Workspace Created,User Account Suspended"` | + +### Logging + +Logs are printed to the console and can be adjusted using the `LOG_LEVEL` variable. The available levels are: + +| Level | Description | +|-----------|---------------------------------------| +| `DEBUG` | Most verbose, useful for debugging | +| `INFO` | Standard logging for normal operation | +| `WARNING` | Logs only warnings and errors | + +### API Endpoints + +- `GET /` - Health check endpoint +- `POST /` - Webhook receiver