Skip to content

feat: Add Dash0 alerting and config components#3022

Closed
fadhilijuma wants to merge 1 commit intosuperplanehq:mainfrom
fadhilijuma:feat/dash0-expand-components-2906
Closed

feat: Add Dash0 alerting and config components#3022
fadhilijuma wants to merge 1 commit intosuperplanehq:mainfrom
fadhilijuma:feat/dash0-expand-components-2906

Conversation

@fadhilijuma
Copy link
Contributor

@fadhilijuma fadhilijuma commented Feb 10, 2026

Implements #2906

Summary

This PR expands the existing Dash0 integration with seven additional components so users can build richer Dash0 workflows in SuperPlane.

Added components:

  • Trigger: dash0.onAlertEvent
  • Actions:
    • dash0.sendLogEvent
    • dash0.getCheckDetails
    • dash0.createSyntheticCheck
    • dash0.updateSyntheticCheck
    • dash0.createCheckRule
    • dash0.updateCheckRule

Implementation Details

Integration

  • Extended Dash0 integration configuration and client behavior for additional endpoints/use cases.
  • Added webhook-handler registration for Dash0 so webhook-based trigger setup is properly provisioned.

Trigger

  • Implemented On Alert Event trigger with event-type filtering (fired, resolved).
  • Added normalization for incoming Dash0 webhook payload fields (check identity, severity, labels, summary/description, timestamp).

Actions

  • Implemented OTLP HTTP log ingestion for Send Log Event.
  • Implemented check enrichment flow for Get Check Details.
  • Implemented config API upsert flows for synthetic checks and check rules (create/update pairs).
  • Added validation and normalization for JSON rule/spec payloads to reduce configuration errors and improve compatibility with expected Dash0 shapes.

Frontend

  • Added Dash0 workflow mapper definitions for all new trigger/action components.
  • Added/updated mapper base/types wiring in web_src/src/pages/workflowv2/mappers/dash0/.

Documentation

  • Regenerated Dash0 component docs via generator (docs/components/Dash0.mdx).

Demo Video

https://www.dropbox.com/scl/fi/xtgr2ti3v06rc7j8qix4n/Screen-Recording-2026-02-11-at-00.43.42.mov?rlkey=cca70xz52rkvzr9hkkckk1m2s&st=vg61cq0j&dl=0

Manual Functional Validation

  • Verified trigger/action configuration in UI for new Dash0 components.
  • Verified create/get flows and execution behavior across newly added components.

Signed-off-by: Fadhili Juma <ffumwa@gmail.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

This is the final PR Bugbot will review for you during this billing cycle

Your free Bugbot reviews will reset on February 12

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

responseBody, err := c.execRequest(operation, http.MethodPost, requestURL, strings.NewReader(data.Encode()), "application/x-www-form-urlencoded")
if err != nil {
return nil, err
return nil, fmt.Errorf("%s: %w", operation, err)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Double-prefixed operation string in all client error messages

Medium Severity

Every client method passes the operation string to execRequest, which already prefixes all its errors with that operation. Then callers wrap the returned error with the same operation again via fmt.Errorf("%s: %w", operation, err). This produces confusing double-prefixed error messages like "dash0 client: list check rules: dash0 client: list check rules: execute request: ...". The pattern is consistent across all eight methods that call execRequest.

Additional Locations (2)

Fix in Cursor Fix in Web

specification["labels"] = labels
}

return specification, nil
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alias keys not removed during check rule normalization

Medium Severity

validateDash0CheckRuleSpecification reads from alias keys (alert, expr, keep_firing_for) via firstNonEmptyMappedString and writes the canonical keys (name, expression, keepFiringFor), but never deletes the alias keys from the specification map. When a user provides a spec with Prometheus-style keys like {"alert": "MyRule", "expr": "vector(1)"}, the resulting payload sent to the Dash0 API contains both the alias and canonical versions of each field, which may cause unexpected API behavior.

Fix in Cursor Fix in Web

@lucaspin
Copy link
Contributor

@fadhilijuma please, use separate PRs for each component. It's a bit complicated to review this much code in one go

@AleksandarCole
Copy link
Collaborator

Hey @fadhilijuma - first of all, thanks for submitting this one!
While you're working on splitting the PRs here's a quick feedback for the components - instead of having Specification (JSON) field for creating/updating checks and check rules, can we please have regular form elements for this configuration (inputs, select, multiselect etc.)

@fadhilijuma
Copy link
Contributor Author

@AleksandarCole okay. Let me work on that.

@fadhilijuma
Copy link
Contributor Author

Superseded by split Dash0 component PRs for issue #2906:\n- #3027 On Alert Event\n- #3030 Send Log Event\n- #3032 Get Check Details\n- #3033 Create Synthetic Check\n- #3034 Update Synthetic Check\n- #3035 Create Check Rule\n- #3036 Update Check Rule\n\nClosing this monolith PR to keep review scope per component.

@fadhilijuma fadhilijuma deleted the feat/dash0-expand-components-2906 branch February 13, 2026 05:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr:stage-1/3 Needs to pass basic review. wfh

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants