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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy