Skip to content

[Feature Request] Action Widget — clickable buttons that fire HTTP requests #302

Description

@cj36457

[Feature Request] Action Widget — clickable buttons that fire HTTP requests

Summary

We're exploring the idea of adding a new Action Widget type to the dashboard grid (alongside the existing Stat Widget) that fires an HTTP request when clicked. This would let teams trigger CI pipelines, re-runs, or external integrations directly from the dashboard — without leaving the page.

We're not sure this belongs in robotframework-dashboard — it might be out of scope, or there might be a better way to achieve this that we haven't thought of. We'd genuinely appreciate your perspective on whether this is worth pursuing, and we're completely open to alternative approaches. If this isn't the right direction for the project, no hard feelings at all.

Simpler alternative (if the full action widget is too heavy or too far from the project's focus): a Custom Links setting that adds user-defined links to the navbar, so teams can at least navigate to external trigger pages or CI dispatch URLs from the dashboard.


Problem

Our team uses robotframework-dashboard as the central place to monitor test results. When we see a failure, the next step is almost always "re-run this suite" or "trigger a smoke test." Today that means:

  1. Leave the dashboard
  2. Navigate to GitHub Actions (or Jenkins, or whatever CI)
  3. Find the right workflow
  4. Fill in the inputs
  5. Dispatch

This context switch breaks the flow. The dashboard already knows what failed — it should be able to help us act on it.

We built a standalone HTML page with trigger buttons as a workaround, and honestly that might be the right answer. But we wanted to raise the idea here in case it's something that would benefit the broader community, or in case there's a simpler path we're not seeing.


Proposal: Action Widget

What it is

A new widget type that users can add via Customize View > + Add action widget, similar to how stat widgets work today. Each action widget is:

  • A clickable button in the dashboard grid
  • Configured with a label, URL, HTTP method, and optional request body (JSON)
  • Optionally styled with text color and background color (like stat widgets)
  • Draggable and resizable within the GridStack grid

User flow

  1. Enter Customize View mode
  2. Click "+ Add action widget" (new tile, next to "Add stat widget")
  3. Modal appears with fields:
    • Label (e.g., "Run Smoke US")
    • URL (e.g., https://api.github.com/repos/org/repo/actions/workflows/smoke.yml/dispatches)
    • HTTP Method (dropdown: POST, PUT, PATCH — default POST)
    • Request Body (optional JSON textarea, e.g., {"ref": "main", "inputs": {"region": "us"}})
    • Headers (optional key-value pairs, e.g., Authorization: Bearer $token)
    • Confirmation (toggle: require a "Are you sure?" dialog before firing — default ON)
    • Text Color / Background Color (color pickers, like stat widgets)
  4. Click Add — widget appears in grid
  5. Click Save to persist to localStorage

When clicked

  1. If confirmation is enabled, show a confirm dialog: "Trigger 'Run Smoke US'?"
  2. Fire the HTTP request
  3. Show inline feedback:
    • Success (2xx): green flash + brief message (e.g., "Triggered successfully")
    • Failure (4xx/5xx): red flash + status code + response body snippet
  4. Widget returns to idle state

Auth token handling

Sensitive tokens should NOT be persisted in localStorage. Two options:

  • Option A (recommended): A single "API Token" prompt on the dashboard page (session-only, stored in JS memory, cleared on tab close). All action widgets reference this token via a {{token}} placeholder in the Headers field.
  • Option B: Let users paste tokens directly in the Headers config. Add a warning that these are stored in localStorage (not secure for shared machines).

Storage

Same as stat widgets — persisted in localStorage under the existing settings JSON structure. Example:

{
  "actionWidgets": [
    {
      "id": "aw-1",
      "label": "Run Smoke US",
      "url": "https://api.github.com/repos/org/repo/actions/workflows/smoke.yml/dispatches",
      "method": "POST",
      "body": "{\"ref\": \"main\", \"inputs\": {\"region\": \"us\"}}",
      "headers": {"Authorization": "Bearer {{token}}"},
      "confirm": true,
      "textColor": "#ffffff",
      "bgColor": "#4f8ff7",
      "grid": {"x": 0, "y": 10, "w": 4, "h": 1}
    }
  ]
}

CORS consideration

Action widgets fire requests from the browser. Endpoints must allow CORS, or teams can route through a lightweight proxy. This is the same constraint any browser-based tool faces — worth documenting but not a blocker for the feature itself.


Simpler Alternative: Custom Links in Navbar

If the full action widget is too much scope for a first pass, a simpler version would still be valuable:

What it is

A new setting (in the Theme or Defaults tab) that lets users add custom links to the navigation bar.

Configuration

In the Settings modal, a new section:

Field Example
Label "Trigger Regression"
URL https://github.com/org/repo/actions/workflows/regression.yml
Open in new tab Yes (default)

Users can add multiple links. Links appear as nav items after the existing pages (Overview, Dashboard, Compare, Tables).

Storage

{
  "customLinks": [
    {"label": "Trigger Regression", "url": "https://...", "newTab": true},
    {"label": "Grafana", "url": "https://grafana.example.com/dashboard/tests", "newTab": true}
  ]
}

Why this is still useful

  • Zero security concerns (no HTTP requests, no tokens)
  • Tiny implementation surface (navbar already has dynamic items)
  • Bridges the dashboard to external tools (CI, monitoring, wikis, trigger pages)
  • Could ship as a quick win in a minor release

Use Cases

Use case Widget config
Re-run failed smoke test POST to GitHub Actions workflow_dispatch with env/region inputs
Trigger full regression POST to GitHub Actions with test_strategy: regression
Notify Slack channel POST to Slack webhook URL with a message body
Refresh dashboard data POST to the dashboard server's own /refresh-dashboard endpoint
Clear stale results POST to /remove-outputs with tag-based cleanup

Prior Art

  • Grafana has annotation buttons and action links on panels
  • Jenkins Blue Ocean has re-run buttons inline with build results
  • Datadog dashboards support notebook action buttons that trigger external workflows

Summary of asks

Feature Scope Value
Action Widget New widget type in GridStack grid Trigger CI/webhooks directly from dashboard
Custom Links (fallback) Navbar config Navigate to external tools without leaving dashboard

Happy to help with implementation if the direction is agreed. And if this isn't something that fits the project's vision, we'd welcome any suggestions on the best way to achieve this externally — whether that's a companion page, a wrapper, or something else entirely. Thanks for a great project!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions