1. Packages
  2. Sentry
  3. API Docs
  4. SentryDashboard
Sentry v0.0.9 published on Friday, Nov 15, 2024 by Pulumiverse

sentry.SentryDashboard

Explore with Pulumi AI

Sentry Dashboard resource.

Example Usage

import * as pulumi from "@pulumi/pulumi";
import * as sentry from "@pulumiverse/sentry";

const main = new sentry.SentryDashboard("main", {
    organization: mainSentryOrganization.id,
    title: "Test dashboard",
    widgets: [
        {
            title: "Number of Errors",
            displayType: "big_number",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: ["count()"],
                aggregates: ["count()"],
                conditions: "!event.type:transaction",
                orderBy: "count()",
            }],
            layout: {
                x: 0,
                y: 0,
                w: 1,
                h: 1,
                minH: 1,
            },
        },
        {
            title: "Number of Issues",
            displayType: "big_number",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: ["count_unique(issue)"],
                aggregates: ["count_unique(issue)"],
                conditions: "!event.type:transaction",
                orderBy: "count_unique(issue)",
            }],
            layout: {
                x: 1,
                y: 0,
                w: 1,
                h: 1,
                minH: 1,
            },
        },
        {
            title: "Events",
            displayType: "line",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                name: "Events",
                fields: ["count()"],
                aggregates: ["count()"],
                conditions: "!event.type:transaction",
                orderBy: "count()",
            }],
            layout: {
                x: 2,
                y: 0,
                w: 4,
                h: 2,
                minH: 2,
            },
        },
        {
            title: "Affected Users",
            displayType: "line",
            interval: "5m",
            widgetType: "discover",
            queries: [
                {
                    name: "Known Users",
                    fields: ["count_unique(user)"],
                    aggregates: ["count_unique(user)"],
                    conditions: "has:user.email !event.type:transaction",
                    orderBy: "count_unique(user)",
                },
                {
                    name: "Anonymous Users",
                    fields: ["count_unique(user)"],
                    aggregates: ["count_unique(user)"],
                    conditions: "!has:user.email !event.type:transaction",
                    orderBy: "count_unique(user)",
                },
            ],
            layout: {
                x: 1,
                y: 2,
                w: 1,
                h: 2,
                minH: 2,
            },
        },
        {
            title: "Handled vs. Unhandled",
            displayType: "line",
            interval: "5m",
            widgetType: "discover",
            queries: [
                {
                    name: "Handled",
                    fields: ["count()"],
                    aggregates: ["count()"],
                    conditions: "error.handled:true",
                    orderBy: "count()",
                },
                {
                    name: "Unhandled",
                    fields: ["count()"],
                    aggregates: ["count()"],
                    conditions: "error.handled:false",
                    orderBy: "count()",
                },
            ],
            layout: {
                x: 0,
                y: 2,
                w: 1,
                h: 2,
                minH: 2,
            },
        },
        {
            title: "Errors by Country",
            displayType: "world_map",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: ["count()"],
                aggregates: ["count()"],
                conditions: "!event.type:transaction has:geo.country_code",
                orderBy: "count()",
            }],
            layout: {
                x: 4,
                y: 6,
                w: 2,
                h: 4,
                minH: 2,
            },
        },
        {
            title: "High Throughput Transactions",
            displayType: "table",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: [
                    "count()",
                    "transaction",
                ],
                aggregates: ["count()"],
                columns: ["transaction"],
                conditions: "!event.type:error",
                orderBy: "-count()",
            }],
            layout: {
                x: 0,
                y: 6,
                w: 2,
                h: 4,
                minH: 2,
            },
        },
        {
            title: "Errors by Browser",
            displayType: "table",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: [
                    "browser.name",
                    "count()",
                ],
                aggregates: ["count()"],
                columns: ["browser.name"],
                conditions: "!event.type:transaction has:browser.name",
                orderBy: "-count()",
            }],
            layout: {
                x: 5,
                y: 2,
                w: 1,
                h: 4,
                minH: 2,
            },
        },
        {
            title: "Overall User Misery",
            displayType: "big_number",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: ["user_misery(300)"],
                aggregates: ["user_misery(300)"],
            }],
            layout: {
                x: 0,
                y: 1,
                w: 1,
                h: 1,
                minH: 1,
            },
        },
        {
            title: "Overall Apdex",
            displayType: "big_number",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: ["apdex(300)"],
                aggregates: ["apdex(300)"],
            }],
            layout: {
                x: 1,
                y: 1,
                w: 1,
                h: 1,
                minH: 1,
            },
        },
        {
            title: "High Throughput Transactions",
            displayType: "top_n",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: [
                    "transaction",
                    "count()",
                ],
                aggregates: ["count()"],
                columns: ["transaction"],
                conditions: "!event.type:error",
                orderBy: "-count()",
            }],
            layout: {
                x: 0,
                y: 4,
                w: 2,
                h: 2,
                minH: 2,
            },
        },
        {
            title: "Issues Assigned to Me or My Teams",
            displayType: "table",
            interval: "5m",
            widgetType: "issue",
            queries: [{
                fields: [
                    "assignee",
                    "issue",
                    "title",
                ],
                columns: [
                    "assignee",
                    "issue",
                    "title",
                ],
                conditions: "assigned_or_suggested:me is:unresolved",
                orderBy: "priority",
            }],
            layout: {
                x: 2,
                y: 2,
                w: 2,
                h: 4,
                minH: 2,
            },
        },
        {
            title: "Transactions Ordered by Misery",
            displayType: "table",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: [
                    "transaction",
                    "user_misery(300)",
                ],
                aggregates: ["user_misery(300)"],
                columns: ["transaction"],
                orderBy: "-user_misery(300)",
            }],
            layout: {
                x: 2,
                y: 6,
                w: 2,
                h: 4,
                minH: 2,
            },
        },
        {
            title: "Errors by Browser Over Time",
            displayType: "top_n",
            interval: "5m",
            widgetType: "discover",
            queries: [{
                fields: [
                    "browser.name",
                    "count()",
                ],
                aggregates: ["count()"],
                columns: ["browser.name"],
                conditions: "event.type:error has:browser.name",
                orderBy: "-count()",
            }],
            layout: {
                x: 4,
                y: 2,
                w: 1,
                h: 4,
                minH: 2,
            },
        },
    ],
});
Copy
import pulumi
import pulumiverse_sentry as sentry

main = sentry.SentryDashboard("main",
    organization=main_sentry_organization["id"],
    title="Test dashboard",
    widgets=[
        {
            "title": "Number of Errors",
            "display_type": "big_number",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": ["count()"],
                "aggregates": ["count()"],
                "conditions": "!event.type:transaction",
                "order_by": "count()",
            }],
            "layout": {
                "x": 0,
                "y": 0,
                "w": 1,
                "h": 1,
                "min_h": 1,
            },
        },
        {
            "title": "Number of Issues",
            "display_type": "big_number",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": ["count_unique(issue)"],
                "aggregates": ["count_unique(issue)"],
                "conditions": "!event.type:transaction",
                "order_by": "count_unique(issue)",
            }],
            "layout": {
                "x": 1,
                "y": 0,
                "w": 1,
                "h": 1,
                "min_h": 1,
            },
        },
        {
            "title": "Events",
            "display_type": "line",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "name": "Events",
                "fields": ["count()"],
                "aggregates": ["count()"],
                "conditions": "!event.type:transaction",
                "order_by": "count()",
            }],
            "layout": {
                "x": 2,
                "y": 0,
                "w": 4,
                "h": 2,
                "min_h": 2,
            },
        },
        {
            "title": "Affected Users",
            "display_type": "line",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [
                {
                    "name": "Known Users",
                    "fields": ["count_unique(user)"],
                    "aggregates": ["count_unique(user)"],
                    "conditions": "has:user.email !event.type:transaction",
                    "order_by": "count_unique(user)",
                },
                {
                    "name": "Anonymous Users",
                    "fields": ["count_unique(user)"],
                    "aggregates": ["count_unique(user)"],
                    "conditions": "!has:user.email !event.type:transaction",
                    "order_by": "count_unique(user)",
                },
            ],
            "layout": {
                "x": 1,
                "y": 2,
                "w": 1,
                "h": 2,
                "min_h": 2,
            },
        },
        {
            "title": "Handled vs. Unhandled",
            "display_type": "line",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [
                {
                    "name": "Handled",
                    "fields": ["count()"],
                    "aggregates": ["count()"],
                    "conditions": "error.handled:true",
                    "order_by": "count()",
                },
                {
                    "name": "Unhandled",
                    "fields": ["count()"],
                    "aggregates": ["count()"],
                    "conditions": "error.handled:false",
                    "order_by": "count()",
                },
            ],
            "layout": {
                "x": 0,
                "y": 2,
                "w": 1,
                "h": 2,
                "min_h": 2,
            },
        },
        {
            "title": "Errors by Country",
            "display_type": "world_map",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": ["count()"],
                "aggregates": ["count()"],
                "conditions": "!event.type:transaction has:geo.country_code",
                "order_by": "count()",
            }],
            "layout": {
                "x": 4,
                "y": 6,
                "w": 2,
                "h": 4,
                "min_h": 2,
            },
        },
        {
            "title": "High Throughput Transactions",
            "display_type": "table",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": [
                    "count()",
                    "transaction",
                ],
                "aggregates": ["count()"],
                "columns": ["transaction"],
                "conditions": "!event.type:error",
                "order_by": "-count()",
            }],
            "layout": {
                "x": 0,
                "y": 6,
                "w": 2,
                "h": 4,
                "min_h": 2,
            },
        },
        {
            "title": "Errors by Browser",
            "display_type": "table",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": [
                    "browser.name",
                    "count()",
                ],
                "aggregates": ["count()"],
                "columns": ["browser.name"],
                "conditions": "!event.type:transaction has:browser.name",
                "order_by": "-count()",
            }],
            "layout": {
                "x": 5,
                "y": 2,
                "w": 1,
                "h": 4,
                "min_h": 2,
            },
        },
        {
            "title": "Overall User Misery",
            "display_type": "big_number",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": ["user_misery(300)"],
                "aggregates": ["user_misery(300)"],
            }],
            "layout": {
                "x": 0,
                "y": 1,
                "w": 1,
                "h": 1,
                "min_h": 1,
            },
        },
        {
            "title": "Overall Apdex",
            "display_type": "big_number",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": ["apdex(300)"],
                "aggregates": ["apdex(300)"],
            }],
            "layout": {
                "x": 1,
                "y": 1,
                "w": 1,
                "h": 1,
                "min_h": 1,
            },
        },
        {
            "title": "High Throughput Transactions",
            "display_type": "top_n",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": [
                    "transaction",
                    "count()",
                ],
                "aggregates": ["count()"],
                "columns": ["transaction"],
                "conditions": "!event.type:error",
                "order_by": "-count()",
            }],
            "layout": {
                "x": 0,
                "y": 4,
                "w": 2,
                "h": 2,
                "min_h": 2,
            },
        },
        {
            "title": "Issues Assigned to Me or My Teams",
            "display_type": "table",
            "interval": "5m",
            "widget_type": "issue",
            "queries": [{
                "fields": [
                    "assignee",
                    "issue",
                    "title",
                ],
                "columns": [
                    "assignee",
                    "issue",
                    "title",
                ],
                "conditions": "assigned_or_suggested:me is:unresolved",
                "order_by": "priority",
            }],
            "layout": {
                "x": 2,
                "y": 2,
                "w": 2,
                "h": 4,
                "min_h": 2,
            },
        },
        {
            "title": "Transactions Ordered by Misery",
            "display_type": "table",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": [
                    "transaction",
                    "user_misery(300)",
                ],
                "aggregates": ["user_misery(300)"],
                "columns": ["transaction"],
                "order_by": "-user_misery(300)",
            }],
            "layout": {
                "x": 2,
                "y": 6,
                "w": 2,
                "h": 4,
                "min_h": 2,
            },
        },
        {
            "title": "Errors by Browser Over Time",
            "display_type": "top_n",
            "interval": "5m",
            "widget_type": "discover",
            "queries": [{
                "fields": [
                    "browser.name",
                    "count()",
                ],
                "aggregates": ["count()"],
                "columns": ["browser.name"],
                "conditions": "event.type:error has:browser.name",
                "order_by": "-count()",
            }],
            "layout": {
                "x": 4,
                "y": 2,
                "w": 1,
                "h": 4,
                "min_h": 2,
            },
        },
    ])
Copy
package main

import (
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
	"github.com/pulumiverse/pulumi-sentry/sdk/go/sentry"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := sentry.NewSentryDashboard(ctx, "main", &sentry.SentryDashboardArgs{
			Organization: pulumi.Any(mainSentryOrganization.Id),
			Title:        pulumi.String("Test dashboard"),
			Widgets: sentry.SentryDashboardWidgetArray{
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Number of Errors"),
					DisplayType: pulumi.String("big_number"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Conditions: pulumi.String("!event.type:transaction"),
							OrderBy:    pulumi.String("count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(0),
						Y:    pulumi.Int(0),
						W:    pulumi.Int(1),
						H:    pulumi.Int(1),
						MinH: pulumi.Int(1),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Number of Issues"),
					DisplayType: pulumi.String("big_number"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("count_unique(issue)"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count_unique(issue)"),
							},
							Conditions: pulumi.String("!event.type:transaction"),
							OrderBy:    pulumi.String("count_unique(issue)"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(1),
						Y:    pulumi.Int(0),
						W:    pulumi.Int(1),
						H:    pulumi.Int(1),
						MinH: pulumi.Int(1),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Events"),
					DisplayType: pulumi.String("line"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Name: pulumi.String("Events"),
							Fields: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Conditions: pulumi.String("!event.type:transaction"),
							OrderBy:    pulumi.String("count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(2),
						Y:    pulumi.Int(0),
						W:    pulumi.Int(4),
						H:    pulumi.Int(2),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Affected Users"),
					DisplayType: pulumi.String("line"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Name: pulumi.String("Known Users"),
							Fields: pulumi.StringArray{
								pulumi.String("count_unique(user)"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count_unique(user)"),
							},
							Conditions: pulumi.String("has:user.email !event.type:transaction"),
							OrderBy:    pulumi.String("count_unique(user)"),
						},
						&sentry.SentryDashboardWidgetQueryArgs{
							Name: pulumi.String("Anonymous Users"),
							Fields: pulumi.StringArray{
								pulumi.String("count_unique(user)"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count_unique(user)"),
							},
							Conditions: pulumi.String("!has:user.email !event.type:transaction"),
							OrderBy:    pulumi.String("count_unique(user)"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(1),
						Y:    pulumi.Int(2),
						W:    pulumi.Int(1),
						H:    pulumi.Int(2),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Handled vs. Unhandled"),
					DisplayType: pulumi.String("line"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Name: pulumi.String("Handled"),
							Fields: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Conditions: pulumi.String("error.handled:true"),
							OrderBy:    pulumi.String("count()"),
						},
						&sentry.SentryDashboardWidgetQueryArgs{
							Name: pulumi.String("Unhandled"),
							Fields: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Conditions: pulumi.String("error.handled:false"),
							OrderBy:    pulumi.String("count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(0),
						Y:    pulumi.Int(2),
						W:    pulumi.Int(1),
						H:    pulumi.Int(2),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Errors by Country"),
					DisplayType: pulumi.String("world_map"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Conditions: pulumi.String("!event.type:transaction has:geo.country_code"),
							OrderBy:    pulumi.String("count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(4),
						Y:    pulumi.Int(6),
						W:    pulumi.Int(2),
						H:    pulumi.Int(4),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("High Throughput Transactions"),
					DisplayType: pulumi.String("table"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("count()"),
								pulumi.String("transaction"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Columns: pulumi.StringArray{
								pulumi.String("transaction"),
							},
							Conditions: pulumi.String("!event.type:error"),
							OrderBy:    pulumi.String("-count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(0),
						Y:    pulumi.Int(6),
						W:    pulumi.Int(2),
						H:    pulumi.Int(4),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Errors by Browser"),
					DisplayType: pulumi.String("table"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("browser.name"),
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Columns: pulumi.StringArray{
								pulumi.String("browser.name"),
							},
							Conditions: pulumi.String("!event.type:transaction has:browser.name"),
							OrderBy:    pulumi.String("-count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(5),
						Y:    pulumi.Int(2),
						W:    pulumi.Int(1),
						H:    pulumi.Int(4),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Overall User Misery"),
					DisplayType: pulumi.String("big_number"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("user_misery(300)"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("user_misery(300)"),
							},
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(0),
						Y:    pulumi.Int(1),
						W:    pulumi.Int(1),
						H:    pulumi.Int(1),
						MinH: pulumi.Int(1),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Overall Apdex"),
					DisplayType: pulumi.String("big_number"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("apdex(300)"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("apdex(300)"),
							},
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(1),
						Y:    pulumi.Int(1),
						W:    pulumi.Int(1),
						H:    pulumi.Int(1),
						MinH: pulumi.Int(1),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("High Throughput Transactions"),
					DisplayType: pulumi.String("top_n"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("transaction"),
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Columns: pulumi.StringArray{
								pulumi.String("transaction"),
							},
							Conditions: pulumi.String("!event.type:error"),
							OrderBy:    pulumi.String("-count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(0),
						Y:    pulumi.Int(4),
						W:    pulumi.Int(2),
						H:    pulumi.Int(2),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Issues Assigned to Me or My Teams"),
					DisplayType: pulumi.String("table"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("issue"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("assignee"),
								pulumi.String("issue"),
								pulumi.String("title"),
							},
							Columns: pulumi.StringArray{
								pulumi.String("assignee"),
								pulumi.String("issue"),
								pulumi.String("title"),
							},
							Conditions: pulumi.String("assigned_or_suggested:me is:unresolved"),
							OrderBy:    pulumi.String("priority"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(2),
						Y:    pulumi.Int(2),
						W:    pulumi.Int(2),
						H:    pulumi.Int(4),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Transactions Ordered by Misery"),
					DisplayType: pulumi.String("table"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("transaction"),
								pulumi.String("user_misery(300)"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("user_misery(300)"),
							},
							Columns: pulumi.StringArray{
								pulumi.String("transaction"),
							},
							OrderBy: pulumi.String("-user_misery(300)"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(2),
						Y:    pulumi.Int(6),
						W:    pulumi.Int(2),
						H:    pulumi.Int(4),
						MinH: pulumi.Int(2),
					},
				},
				&sentry.SentryDashboardWidgetArgs{
					Title:       pulumi.String("Errors by Browser Over Time"),
					DisplayType: pulumi.String("top_n"),
					Interval:    pulumi.String("5m"),
					WidgetType:  pulumi.String("discover"),
					Queries: sentry.SentryDashboardWidgetQueryArray{
						&sentry.SentryDashboardWidgetQueryArgs{
							Fields: pulumi.StringArray{
								pulumi.String("browser.name"),
								pulumi.String("count()"),
							},
							Aggregates: pulumi.StringArray{
								pulumi.String("count()"),
							},
							Columns: pulumi.StringArray{
								pulumi.String("browser.name"),
							},
							Conditions: pulumi.String("event.type:error has:browser.name"),
							OrderBy:    pulumi.String("-count()"),
						},
					},
					Layout: &sentry.SentryDashboardWidgetLayoutArgs{
						X:    pulumi.Int(4),
						Y:    pulumi.Int(2),
						W:    pulumi.Int(1),
						H:    pulumi.Int(4),
						MinH: pulumi.Int(2),
					},
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Sentry = Pulumiverse.Sentry;

return await Deployment.RunAsync(() => 
{
    var main = new Sentry.SentryDashboard("main", new()
    {
        Organization = mainSentryOrganization.Id,
        Title = "Test dashboard",
        Widgets = new[]
        {
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Number of Errors",
                DisplayType = "big_number",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Conditions = "!event.type:transaction",
                        OrderBy = "count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 0,
                    Y = 0,
                    W = 1,
                    H = 1,
                    MinH = 1,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Number of Issues",
                DisplayType = "big_number",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "count_unique(issue)",
                        },
                        Aggregates = new[]
                        {
                            "count_unique(issue)",
                        },
                        Conditions = "!event.type:transaction",
                        OrderBy = "count_unique(issue)",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 1,
                    Y = 0,
                    W = 1,
                    H = 1,
                    MinH = 1,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Events",
                DisplayType = "line",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Name = "Events",
                        Fields = new[]
                        {
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Conditions = "!event.type:transaction",
                        OrderBy = "count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 2,
                    Y = 0,
                    W = 4,
                    H = 2,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Affected Users",
                DisplayType = "line",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Name = "Known Users",
                        Fields = new[]
                        {
                            "count_unique(user)",
                        },
                        Aggregates = new[]
                        {
                            "count_unique(user)",
                        },
                        Conditions = "has:user.email !event.type:transaction",
                        OrderBy = "count_unique(user)",
                    },
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Name = "Anonymous Users",
                        Fields = new[]
                        {
                            "count_unique(user)",
                        },
                        Aggregates = new[]
                        {
                            "count_unique(user)",
                        },
                        Conditions = "!has:user.email !event.type:transaction",
                        OrderBy = "count_unique(user)",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 1,
                    Y = 2,
                    W = 1,
                    H = 2,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Handled vs. Unhandled",
                DisplayType = "line",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Name = "Handled",
                        Fields = new[]
                        {
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Conditions = "error.handled:true",
                        OrderBy = "count()",
                    },
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Name = "Unhandled",
                        Fields = new[]
                        {
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Conditions = "error.handled:false",
                        OrderBy = "count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 0,
                    Y = 2,
                    W = 1,
                    H = 2,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Errors by Country",
                DisplayType = "world_map",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Conditions = "!event.type:transaction has:geo.country_code",
                        OrderBy = "count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 4,
                    Y = 6,
                    W = 2,
                    H = 4,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "High Throughput Transactions",
                DisplayType = "table",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "count()",
                            "transaction",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Columns = new[]
                        {
                            "transaction",
                        },
                        Conditions = "!event.type:error",
                        OrderBy = "-count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 0,
                    Y = 6,
                    W = 2,
                    H = 4,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Errors by Browser",
                DisplayType = "table",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "browser.name",
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Columns = new[]
                        {
                            "browser.name",
                        },
                        Conditions = "!event.type:transaction has:browser.name",
                        OrderBy = "-count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 5,
                    Y = 2,
                    W = 1,
                    H = 4,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Overall User Misery",
                DisplayType = "big_number",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "user_misery(300)",
                        },
                        Aggregates = new[]
                        {
                            "user_misery(300)",
                        },
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 0,
                    Y = 1,
                    W = 1,
                    H = 1,
                    MinH = 1,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Overall Apdex",
                DisplayType = "big_number",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "apdex(300)",
                        },
                        Aggregates = new[]
                        {
                            "apdex(300)",
                        },
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 1,
                    Y = 1,
                    W = 1,
                    H = 1,
                    MinH = 1,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "High Throughput Transactions",
                DisplayType = "top_n",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "transaction",
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Columns = new[]
                        {
                            "transaction",
                        },
                        Conditions = "!event.type:error",
                        OrderBy = "-count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 0,
                    Y = 4,
                    W = 2,
                    H = 2,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Issues Assigned to Me or My Teams",
                DisplayType = "table",
                Interval = "5m",
                WidgetType = "issue",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "assignee",
                            "issue",
                            "title",
                        },
                        Columns = new[]
                        {
                            "assignee",
                            "issue",
                            "title",
                        },
                        Conditions = "assigned_or_suggested:me is:unresolved",
                        OrderBy = "priority",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 2,
                    Y = 2,
                    W = 2,
                    H = 4,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Transactions Ordered by Misery",
                DisplayType = "table",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "transaction",
                            "user_misery(300)",
                        },
                        Aggregates = new[]
                        {
                            "user_misery(300)",
                        },
                        Columns = new[]
                        {
                            "transaction",
                        },
                        OrderBy = "-user_misery(300)",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 2,
                    Y = 6,
                    W = 2,
                    H = 4,
                    MinH = 2,
                },
            },
            new Sentry.Inputs.SentryDashboardWidgetArgs
            {
                Title = "Errors by Browser Over Time",
                DisplayType = "top_n",
                Interval = "5m",
                WidgetType = "discover",
                Queries = new[]
                {
                    new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                    {
                        Fields = new[]
                        {
                            "browser.name",
                            "count()",
                        },
                        Aggregates = new[]
                        {
                            "count()",
                        },
                        Columns = new[]
                        {
                            "browser.name",
                        },
                        Conditions = "event.type:error has:browser.name",
                        OrderBy = "-count()",
                    },
                },
                Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
                {
                    X = 4,
                    Y = 2,
                    W = 1,
                    H = 4,
                    MinH = 2,
                },
            },
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.sentry.SentryDashboard;
import com.pulumi.sentry.SentryDashboardArgs;
import com.pulumi.sentry.inputs.SentryDashboardWidgetArgs;
import com.pulumi.sentry.inputs.SentryDashboardWidgetLayoutArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var main = new SentryDashboard("main", SentryDashboardArgs.builder()
            .organization(mainSentryOrganization.id())
            .title("Test dashboard")
            .widgets(            
                SentryDashboardWidgetArgs.builder()
                    .title("Number of Errors")
                    .displayType("big_number")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields("count()")
                        .aggregates("count()")
                        .conditions("!event.type:transaction")
                        .orderBy("count()")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(0)
                        .y(0)
                        .w(1)
                        .h(1)
                        .minH(1)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Number of Issues")
                    .displayType("big_number")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields("count_unique(issue)")
                        .aggregates("count_unique(issue)")
                        .conditions("!event.type:transaction")
                        .orderBy("count_unique(issue)")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(1)
                        .y(0)
                        .w(1)
                        .h(1)
                        .minH(1)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Events")
                    .displayType("line")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .name("Events")
                        .fields("count()")
                        .aggregates("count()")
                        .conditions("!event.type:transaction")
                        .orderBy("count()")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(2)
                        .y(0)
                        .w(4)
                        .h(2)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Affected Users")
                    .displayType("line")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(                    
                        SentryDashboardWidgetQueryArgs.builder()
                            .name("Known Users")
                            .fields("count_unique(user)")
                            .aggregates("count_unique(user)")
                            .conditions("has:user.email !event.type:transaction")
                            .orderBy("count_unique(user)")
                            .build(),
                        SentryDashboardWidgetQueryArgs.builder()
                            .name("Anonymous Users")
                            .fields("count_unique(user)")
                            .aggregates("count_unique(user)")
                            .conditions("!has:user.email !event.type:transaction")
                            .orderBy("count_unique(user)")
                            .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(1)
                        .y(2)
                        .w(1)
                        .h(2)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Handled vs. Unhandled")
                    .displayType("line")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(                    
                        SentryDashboardWidgetQueryArgs.builder()
                            .name("Handled")
                            .fields("count()")
                            .aggregates("count()")
                            .conditions("error.handled:true")
                            .orderBy("count()")
                            .build(),
                        SentryDashboardWidgetQueryArgs.builder()
                            .name("Unhandled")
                            .fields("count()")
                            .aggregates("count()")
                            .conditions("error.handled:false")
                            .orderBy("count()")
                            .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(0)
                        .y(2)
                        .w(1)
                        .h(2)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Errors by Country")
                    .displayType("world_map")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields("count()")
                        .aggregates("count()")
                        .conditions("!event.type:transaction has:geo.country_code")
                        .orderBy("count()")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(4)
                        .y(6)
                        .w(2)
                        .h(4)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("High Throughput Transactions")
                    .displayType("table")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields(                        
                            "count()",
                            "transaction")
                        .aggregates("count()")
                        .columns("transaction")
                        .conditions("!event.type:error")
                        .orderBy("-count()")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(0)
                        .y(6)
                        .w(2)
                        .h(4)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Errors by Browser")
                    .displayType("table")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields(                        
                            "browser.name",
                            "count()")
                        .aggregates("count()")
                        .columns("browser.name")
                        .conditions("!event.type:transaction has:browser.name")
                        .orderBy("-count()")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(5)
                        .y(2)
                        .w(1)
                        .h(4)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Overall User Misery")
                    .displayType("big_number")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields("user_misery(300)")
                        .aggregates("user_misery(300)")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(0)
                        .y(1)
                        .w(1)
                        .h(1)
                        .minH(1)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Overall Apdex")
                    .displayType("big_number")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields("apdex(300)")
                        .aggregates("apdex(300)")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(1)
                        .y(1)
                        .w(1)
                        .h(1)
                        .minH(1)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("High Throughput Transactions")
                    .displayType("top_n")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields(                        
                            "transaction",
                            "count()")
                        .aggregates("count()")
                        .columns("transaction")
                        .conditions("!event.type:error")
                        .orderBy("-count()")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(0)
                        .y(4)
                        .w(2)
                        .h(2)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Issues Assigned to Me or My Teams")
                    .displayType("table")
                    .interval("5m")
                    .widgetType("issue")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields(                        
                            "assignee",
                            "issue",
                            "title")
                        .columns(                        
                            "assignee",
                            "issue",
                            "title")
                        .conditions("assigned_or_suggested:me is:unresolved")
                        .orderBy("priority")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(2)
                        .y(2)
                        .w(2)
                        .h(4)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Transactions Ordered by Misery")
                    .displayType("table")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields(                        
                            "transaction",
                            "user_misery(300)")
                        .aggregates("user_misery(300)")
                        .columns("transaction")
                        .orderBy("-user_misery(300)")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(2)
                        .y(6)
                        .w(2)
                        .h(4)
                        .minH(2)
                        .build())
                    .build(),
                SentryDashboardWidgetArgs.builder()
                    .title("Errors by Browser Over Time")
                    .displayType("top_n")
                    .interval("5m")
                    .widgetType("discover")
                    .queries(SentryDashboardWidgetQueryArgs.builder()
                        .fields(                        
                            "browser.name",
                            "count()")
                        .aggregates("count()")
                        .columns("browser.name")
                        .conditions("event.type:error has:browser.name")
                        .orderBy("-count()")
                        .build())
                    .layout(SentryDashboardWidgetLayoutArgs.builder()
                        .x(4)
                        .y(2)
                        .w(1)
                        .h(4)
                        .minH(2)
                        .build())
                    .build())
            .build());

    }
}
Copy
resources:
  main:
    type: sentry:SentryDashboard
    properties:
      organization: ${mainSentryOrganization.id}
      title: Test dashboard
      widgets:
        - title: Number of Errors
          displayType: big_number
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - count()
              aggregates:
                - count()
              conditions: '!event.type:transaction'
              orderBy: count()
          layout:
            x: 0
            y: 0
            w: 1
            h: 1
            minH: 1
        - title: Number of Issues
          displayType: big_number
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - count_unique(issue)
              aggregates:
                - count_unique(issue)
              conditions: '!event.type:transaction'
              orderBy: count_unique(issue)
          layout:
            x: 1
            y: 0
            w: 1
            h: 1
            minH: 1
        - title: Events
          displayType: line
          interval: 5m
          widgetType: discover
          queries:
            - name: Events
              fields:
                - count()
              aggregates:
                - count()
              conditions: '!event.type:transaction'
              orderBy: count()
          layout:
            x: 2
            y: 0
            w: 4
            h: 2
            minH: 2
        - title: Affected Users
          displayType: line
          interval: 5m
          widgetType: discover
          queries:
            - name: Known Users
              fields:
                - count_unique(user)
              aggregates:
                - count_unique(user)
              conditions: has:user.email !event.type:transaction
              orderBy: count_unique(user)
            - name: Anonymous Users
              fields:
                - count_unique(user)
              aggregates:
                - count_unique(user)
              conditions: '!has:user.email !event.type:transaction'
              orderBy: count_unique(user)
          layout:
            x: 1
            y: 2
            w: 1
            h: 2
            minH: 2
        - title: Handled vs. Unhandled
          displayType: line
          interval: 5m
          widgetType: discover
          queries:
            - name: Handled
              fields:
                - count()
              aggregates:
                - count()
              conditions: error.handled:true
              orderBy: count()
            - name: Unhandled
              fields:
                - count()
              aggregates:
                - count()
              conditions: error.handled:false
              orderBy: count()
          layout:
            x: 0
            y: 2
            w: 1
            h: 2
            minH: 2
        - title: Errors by Country
          displayType: world_map
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - count()
              aggregates:
                - count()
              conditions: '!event.type:transaction has:geo.country_code'
              orderBy: count()
          layout:
            x: 4
            y: 6
            w: 2
            h: 4
            minH: 2
        - title: High Throughput Transactions
          displayType: table
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - count()
                - transaction
              aggregates:
                - count()
              columns:
                - transaction
              conditions: '!event.type:error'
              orderBy: -count()
          layout:
            x: 0
            y: 6
            w: 2
            h: 4
            minH: 2
        - title: Errors by Browser
          displayType: table
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - browser.name
                - count()
              aggregates:
                - count()
              columns:
                - browser.name
              conditions: '!event.type:transaction has:browser.name'
              orderBy: -count()
          layout:
            x: 5
            y: 2
            w: 1
            h: 4
            minH: 2
        - title: Overall User Misery
          displayType: big_number
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - user_misery(300)
              aggregates:
                - user_misery(300)
          layout:
            x: 0
            y: 1
            w: 1
            h: 1
            minH: 1
        - title: Overall Apdex
          displayType: big_number
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - apdex(300)
              aggregates:
                - apdex(300)
          layout:
            x: 1
            y: 1
            w: 1
            h: 1
            minH: 1
        - title: High Throughput Transactions
          displayType: top_n
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - transaction
                - count()
              aggregates:
                - count()
              columns:
                - transaction
              conditions: '!event.type:error'
              orderBy: -count()
          layout:
            x: 0
            y: 4
            w: 2
            h: 2
            minH: 2
        - title: Issues Assigned to Me or My Teams
          displayType: table
          interval: 5m
          widgetType: issue
          queries:
            - fields:
                - assignee
                - issue
                - title
              columns:
                - assignee
                - issue
                - title
              conditions: assigned_or_suggested:me is:unresolved
              orderBy: priority
          layout:
            x: 2
            y: 2
            w: 2
            h: 4
            minH: 2
        - title: Transactions Ordered by Misery
          displayType: table
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - transaction
                - user_misery(300)
              aggregates:
                - user_misery(300)
              columns:
                - transaction
              orderBy: -user_misery(300)
          layout:
            x: 2
            y: 6
            w: 2
            h: 4
            minH: 2
        - title: Errors by Browser Over Time
          displayType: top_n
          interval: 5m
          widgetType: discover
          queries:
            - fields:
                - browser.name
                - count()
              aggregates:
                - count()
              columns:
                - browser.name
              conditions: event.type:error has:browser.name
              orderBy: -count()
          layout:
            x: 4
            y: 2
            w: 1
            h: 4
            minH: 2
Copy

Create SentryDashboard Resource

Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.

Constructor syntax

new SentryDashboard(name: string, args: SentryDashboardArgs, opts?: CustomResourceOptions);
@overload
def SentryDashboard(resource_name: str,
                    args: SentryDashboardArgs,
                    opts: Optional[ResourceOptions] = None)

@overload
def SentryDashboard(resource_name: str,
                    opts: Optional[ResourceOptions] = None,
                    organization: Optional[str] = None,
                    title: Optional[str] = None,
                    widgets: Optional[Sequence[SentryDashboardWidgetArgs]] = None)
func NewSentryDashboard(ctx *Context, name string, args SentryDashboardArgs, opts ...ResourceOption) (*SentryDashboard, error)
public SentryDashboard(string name, SentryDashboardArgs args, CustomResourceOptions? opts = null)
public SentryDashboard(String name, SentryDashboardArgs args)
public SentryDashboard(String name, SentryDashboardArgs args, CustomResourceOptions options)
type: sentry:SentryDashboard
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.

Parameters

name This property is required. string
The unique name of the resource.
args This property is required. SentryDashboardArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.
resource_name This property is required. str
The unique name of the resource.
args This property is required. SentryDashboardArgs
The arguments to resource properties.
opts ResourceOptions
Bag of options to control resource's behavior.
ctx Context
Context object for the current deployment.
name This property is required. string
The unique name of the resource.
args This property is required. SentryDashboardArgs
The arguments to resource properties.
opts ResourceOption
Bag of options to control resource's behavior.
name This property is required. string
The unique name of the resource.
args This property is required. SentryDashboardArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.
name This property is required. String
The unique name of the resource.
args This property is required. SentryDashboardArgs
The arguments to resource properties.
options CustomResourceOptions
Bag of options to control resource's behavior.

Constructor example

The following reference example uses placeholder values for all input properties.

var sentryDashboardResource = new Sentry.SentryDashboard("sentryDashboardResource", new()
{
    Organization = "string",
    Title = "string",
    Widgets = new[]
    {
        new Sentry.Inputs.SentryDashboardWidgetArgs
        {
            DisplayType = "string",
            Layout = new Sentry.Inputs.SentryDashboardWidgetLayoutArgs
            {
                H = 0,
                MinH = 0,
                W = 0,
                X = 0,
                Y = 0,
            },
            Queries = new[]
            {
                new Sentry.Inputs.SentryDashboardWidgetQueryArgs
                {
                    Aggregates = new[]
                    {
                        "string",
                    },
                    Columns = new[]
                    {
                        "string",
                    },
                    Conditions = "string",
                    FieldAliases = new[]
                    {
                        "string",
                    },
                    Fields = new[]
                    {
                        "string",
                    },
                    Id = "string",
                    Name = "string",
                    OrderBy = "string",
                },
            },
            Title = "string",
            Id = "string",
            Interval = "string",
            Limit = 0,
            WidgetType = "string",
        },
    },
});
Copy
example, err := sentry.NewSentryDashboard(ctx, "sentryDashboardResource", &sentry.SentryDashboardArgs{
	Organization: pulumi.String("string"),
	Title:        pulumi.String("string"),
	Widgets: sentry.SentryDashboardWidgetArray{
		&sentry.SentryDashboardWidgetArgs{
			DisplayType: pulumi.String("string"),
			Layout: &sentry.SentryDashboardWidgetLayoutArgs{
				H:    pulumi.Int(0),
				MinH: pulumi.Int(0),
				W:    pulumi.Int(0),
				X:    pulumi.Int(0),
				Y:    pulumi.Int(0),
			},
			Queries: sentry.SentryDashboardWidgetQueryArray{
				&sentry.SentryDashboardWidgetQueryArgs{
					Aggregates: pulumi.StringArray{
						pulumi.String("string"),
					},
					Columns: pulumi.StringArray{
						pulumi.String("string"),
					},
					Conditions: pulumi.String("string"),
					FieldAliases: pulumi.StringArray{
						pulumi.String("string"),
					},
					Fields: pulumi.StringArray{
						pulumi.String("string"),
					},
					Id:      pulumi.String("string"),
					Name:    pulumi.String("string"),
					OrderBy: pulumi.String("string"),
				},
			},
			Title:      pulumi.String("string"),
			Id:         pulumi.String("string"),
			Interval:   pulumi.String("string"),
			Limit:      pulumi.Int(0),
			WidgetType: pulumi.String("string"),
		},
	},
})
Copy
var sentryDashboardResource = new SentryDashboard("sentryDashboardResource", SentryDashboardArgs.builder()
    .organization("string")
    .title("string")
    .widgets(SentryDashboardWidgetArgs.builder()
        .displayType("string")
        .layout(SentryDashboardWidgetLayoutArgs.builder()
            .h(0)
            .minH(0)
            .w(0)
            .x(0)
            .y(0)
            .build())
        .queries(SentryDashboardWidgetQueryArgs.builder()
            .aggregates("string")
            .columns("string")
            .conditions("string")
            .fieldAliases("string")
            .fields("string")
            .id("string")
            .name("string")
            .orderBy("string")
            .build())
        .title("string")
        .id("string")
        .interval("string")
        .limit(0)
        .widgetType("string")
        .build())
    .build());
Copy
sentry_dashboard_resource = sentry.SentryDashboard("sentryDashboardResource",
    organization="string",
    title="string",
    widgets=[{
        "display_type": "string",
        "layout": {
            "h": 0,
            "min_h": 0,
            "w": 0,
            "x": 0,
            "y": 0,
        },
        "queries": [{
            "aggregates": ["string"],
            "columns": ["string"],
            "conditions": "string",
            "field_aliases": ["string"],
            "fields": ["string"],
            "id": "string",
            "name": "string",
            "order_by": "string",
        }],
        "title": "string",
        "id": "string",
        "interval": "string",
        "limit": 0,
        "widget_type": "string",
    }])
Copy
const sentryDashboardResource = new sentry.SentryDashboard("sentryDashboardResource", {
    organization: "string",
    title: "string",
    widgets: [{
        displayType: "string",
        layout: {
            h: 0,
            minH: 0,
            w: 0,
            x: 0,
            y: 0,
        },
        queries: [{
            aggregates: ["string"],
            columns: ["string"],
            conditions: "string",
            fieldAliases: ["string"],
            fields: ["string"],
            id: "string",
            name: "string",
            orderBy: "string",
        }],
        title: "string",
        id: "string",
        interval: "string",
        limit: 0,
        widgetType: "string",
    }],
});
Copy
type: sentry:SentryDashboard
properties:
    organization: string
    title: string
    widgets:
        - displayType: string
          id: string
          interval: string
          layout:
            h: 0
            minH: 0
            w: 0
            x: 0
            "y": 0
          limit: 0
          queries:
            - aggregates:
                - string
              columns:
                - string
              conditions: string
              fieldAliases:
                - string
              fields:
                - string
              id: string
              name: string
              orderBy: string
          title: string
          widgetType: string
Copy

SentryDashboard Resource Properties

To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

Inputs

In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.

The SentryDashboard resource accepts the following input properties:

Organization This property is required. string
The slug of the organization the dashboard belongs to.
Title This property is required. string
Dashboard title.
Widgets List<Pulumiverse.Sentry.Inputs.SentryDashboardWidget>
Dashboard widgets.
Organization This property is required. string
The slug of the organization the dashboard belongs to.
Title This property is required. string
Dashboard title.
Widgets []SentryDashboardWidgetArgs
Dashboard widgets.
organization This property is required. String
The slug of the organization the dashboard belongs to.
title This property is required. String
Dashboard title.
widgets List<SentryDashboardWidget>
Dashboard widgets.
organization This property is required. string
The slug of the organization the dashboard belongs to.
title This property is required. string
Dashboard title.
widgets SentryDashboardWidget[]
Dashboard widgets.
organization This property is required. str
The slug of the organization the dashboard belongs to.
title This property is required. str
Dashboard title.
widgets Sequence[SentryDashboardWidgetArgs]
Dashboard widgets.
organization This property is required. String
The slug of the organization the dashboard belongs to.
title This property is required. String
Dashboard title.
widgets List<Property Map>
Dashboard widgets.

Outputs

All input properties are implicitly available as output properties. Additionally, the SentryDashboard resource produces the following output properties:

Id string
The provider-assigned unique ID for this managed resource.
InternalId string
The internal ID for this dashboard.
Id string
The provider-assigned unique ID for this managed resource.
InternalId string
The internal ID for this dashboard.
id String
The provider-assigned unique ID for this managed resource.
internalId String
The internal ID for this dashboard.
id string
The provider-assigned unique ID for this managed resource.
internalId string
The internal ID for this dashboard.
id str
The provider-assigned unique ID for this managed resource.
internal_id str
The internal ID for this dashboard.
id String
The provider-assigned unique ID for this managed resource.
internalId String
The internal ID for this dashboard.

Look up Existing SentryDashboard Resource

Get an existing SentryDashboard resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

public static get(name: string, id: Input<ID>, state?: SentryDashboardState, opts?: CustomResourceOptions): SentryDashboard
@staticmethod
def get(resource_name: str,
        id: str,
        opts: Optional[ResourceOptions] = None,
        internal_id: Optional[str] = None,
        organization: Optional[str] = None,
        title: Optional[str] = None,
        widgets: Optional[Sequence[SentryDashboardWidgetArgs]] = None) -> SentryDashboard
func GetSentryDashboard(ctx *Context, name string, id IDInput, state *SentryDashboardState, opts ...ResourceOption) (*SentryDashboard, error)
public static SentryDashboard Get(string name, Input<string> id, SentryDashboardState? state, CustomResourceOptions? opts = null)
public static SentryDashboard get(String name, Output<String> id, SentryDashboardState state, CustomResourceOptions options)
resources:  _:    type: sentry:SentryDashboard    get:      id: ${id}
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
resource_name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
The following state arguments are supported:
InternalId string
The internal ID for this dashboard.
Organization string
The slug of the organization the dashboard belongs to.
Title string
Dashboard title.
Widgets List<Pulumiverse.Sentry.Inputs.SentryDashboardWidget>
Dashboard widgets.
InternalId string
The internal ID for this dashboard.
Organization string
The slug of the organization the dashboard belongs to.
Title string
Dashboard title.
Widgets []SentryDashboardWidgetArgs
Dashboard widgets.
internalId String
The internal ID for this dashboard.
organization String
The slug of the organization the dashboard belongs to.
title String
Dashboard title.
widgets List<SentryDashboardWidget>
Dashboard widgets.
internalId string
The internal ID for this dashboard.
organization string
The slug of the organization the dashboard belongs to.
title string
Dashboard title.
widgets SentryDashboardWidget[]
Dashboard widgets.
internal_id str
The internal ID for this dashboard.
organization str
The slug of the organization the dashboard belongs to.
title str
Dashboard title.
widgets Sequence[SentryDashboardWidgetArgs]
Dashboard widgets.
internalId String
The internal ID for this dashboard.
organization String
The slug of the organization the dashboard belongs to.
title String
Dashboard title.
widgets List<Property Map>
Dashboard widgets.

Supporting Types

SentryDashboardWidget
, SentryDashboardWidgetArgs

DisplayType This property is required. string
Layout This property is required. Pulumiverse.Sentry.Inputs.SentryDashboardWidgetLayout
Queries This property is required. List<Pulumiverse.Sentry.Inputs.SentryDashboardWidgetQuery>
Title This property is required. string
Id string
The ID of this resource.
Interval string
Limit int
WidgetType string
DisplayType This property is required. string
Layout This property is required. SentryDashboardWidgetLayout
Queries This property is required. []SentryDashboardWidgetQuery
Title This property is required. string
Id string
The ID of this resource.
Interval string
Limit int
WidgetType string
displayType This property is required. String
layout This property is required. SentryDashboardWidgetLayout
queries This property is required. List<SentryDashboardWidgetQuery>
title This property is required. String
id String
The ID of this resource.
interval String
limit Integer
widgetType String
displayType This property is required. string
layout This property is required. SentryDashboardWidgetLayout
queries This property is required. SentryDashboardWidgetQuery[]
title This property is required. string
id string
The ID of this resource.
interval string
limit number
widgetType string
display_type This property is required. str
layout This property is required. SentryDashboardWidgetLayout
queries This property is required. Sequence[SentryDashboardWidgetQuery]
title This property is required. str
id str
The ID of this resource.
interval str
limit int
widget_type str
displayType This property is required. String
layout This property is required. Property Map
queries This property is required. List<Property Map>
title This property is required. String
id String
The ID of this resource.
interval String
limit Number
widgetType String

SentryDashboardWidgetLayout
, SentryDashboardWidgetLayoutArgs

H This property is required. int
MinH This property is required. int
W This property is required. int
X This property is required. int
Y This property is required. int
H This property is required. int
MinH This property is required. int
W This property is required. int
X This property is required. int
Y This property is required. int
h This property is required. Integer
minH This property is required. Integer
w This property is required. Integer
x This property is required. Integer
y This property is required. Integer
h This property is required. number
minH This property is required. number
w This property is required. number
x This property is required. number
y This property is required. number
h This property is required. int
min_h This property is required. int
w This property is required. int
x This property is required. int
y This property is required. int
h This property is required. Number
minH This property is required. Number
w This property is required. Number
x This property is required. Number
y This property is required. Number

SentryDashboardWidgetQuery
, SentryDashboardWidgetQueryArgs

Aggregates List<string>
Columns List<string>
Conditions string
FieldAliases List<string>
Fields List<string>
Id string
The ID of this resource.
Name string
OrderBy string
Aggregates []string
Columns []string
Conditions string
FieldAliases []string
Fields []string
Id string
The ID of this resource.
Name string
OrderBy string
aggregates List<String>
columns List<String>
conditions String
fieldAliases List<String>
fields List<String>
id String
The ID of this resource.
name String
orderBy String
aggregates string[]
columns string[]
conditions string
fieldAliases string[]
fields string[]
id string
The ID of this resource.
name string
orderBy string
aggregates Sequence[str]
columns Sequence[str]
conditions str
field_aliases Sequence[str]
fields Sequence[str]
id str
The ID of this resource.
name str
order_by str
aggregates List<String>
columns List<String>
conditions String
fieldAliases List<String>
fields List<String>
id String
The ID of this resource.
name String
orderBy String

Package Details

Repository
sentry pulumiverse/pulumi-sentry
License
Apache-2.0
Notes
This Pulumi package is based on the sentry Terraform Provider.