diff --git a/Makefile b/Makefile index aea67a0639e..fb62d406225 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ gen-cue: ## Do all CUE/Thema code generation go generate ./kinds/gen.go go generate ./pkg/framework/coremodel go generate ./public/app/plugins/gen.go - go generate ./kinds/report.go + go generate ./pkg/kindsys/report.go gen-go: $(WIRE) gen-cue @echo "generate go files" diff --git a/kinds/report.go b/kinds/report.go deleted file mode 100644 index 993c31331e6..00000000000 --- a/kinds/report.go +++ /dev/null @@ -1,97 +0,0 @@ -//go:build ignore -// +build ignore - -//go:generate go run report.go - -package main - -import ( - "context" - "encoding/json" - "fmt" - "os" - "path/filepath" - - "github.com/grafana/codejen" - "github.com/grafana/grafana/pkg/kindsys" - "github.com/grafana/grafana/pkg/registry/corekind" -) - -const reportFileName = "report.json" - -func main() { - report := buildKindStateReport() - reportJSON := elsedie(json.MarshalIndent(report, "", " "))("error generating json output") - - path := filepath.Join(kindsys.DeclParentPath, reportFileName) - file := codejen.NewFile(path, reportJSON, reportJenny{}) - filesystem := elsedie(file.ToFS())("error building in-memory file system") - - cwd := elsedie(os.Getwd())("error getting working directory") - groot := filepath.Dir(cwd) - - if _, set := os.LookupEnv("CODEGEN_VERIFY"); set { - if err := filesystem.Verify(context.Background(), groot); err != nil { - die(fmt.Errorf("generated code is out of sync with inputs:\n%s\nrun `make gen-cue` to regenerate", err)) - } - } else if err := filesystem.Write(context.Background(), groot); err != nil { - die(fmt.Errorf("error while writing generated code to disk:\n%s", err)) - } -} - -type KindStateReport struct { - Core []kindsys.CoreStructuredProperties `json:"core"` - Raw []kindsys.RawProperties `json:"raw"` - Composable []kindsys.ComposableProperties `json:"composable"` -} - -func emptyKindStateReport() KindStateReport { - return KindStateReport{ - Core: make([]kindsys.CoreStructuredProperties, 0), - Raw: make([]kindsys.RawProperties, 0), - Composable: make([]kindsys.ComposableProperties, 0), - } -} - -func buildKindStateReport() KindStateReport { - r := emptyKindStateReport() - b := corekind.NewBase(nil) - - for _, k := range b.All() { - switch props := k.Props().(type) { - case kindsys.CoreStructuredProperties: - r.Core = append(r.Core, props) - case kindsys.RawProperties: - r.Raw = append(r.Raw, props) - case kindsys.ComposableProperties: - r.Composable = append(r.Composable, props) - } - } - - return r -} - -type reportJenny struct{} - -func (reportJenny) JennyName() string { - return "ReportJenny" -} - -func elsedie[T any](t T, err error) func(msg string) T { - if err != nil { - return func(msg string) T { - fmt.Fprintf(os.Stderr, "%s: %s\n", msg, err) - os.Exit(1) - return t - } - } - - return func(msg string) T { - return t - } -} - -func die(err error) { - fmt.Fprint(os.Stderr, err, "\n") - os.Exit(1) -} diff --git a/kinds/report.json b/kinds/report.json deleted file mode 100644 index 9dd5449d52f..00000000000 --- a/kinds/report.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "core": [ - { - "name": "Dashboard", - "pluralName": "Dashboards", - "machineName": "dashboard", - "pluralMachineName": "dashboards", - "lineageIsGroup": false, - "maturity": "merged", - "currentVersion": [ - 0, - 0 - ] - }, - { - "name": "Playlist", - "pluralName": "Playlists", - "machineName": "playlist", - "pluralMachineName": "playlists", - "lineageIsGroup": false, - "maturity": "merged", - "currentVersion": [ - 0, - 0 - ] - }, - { - "name": "Team", - "pluralName": "Teams", - "machineName": "team", - "pluralMachineName": "teams", - "lineageIsGroup": false, - "maturity": "merged", - "currentVersion": [ - 0, - 0 - ] - } - ], - "raw": [ - { - "name": "SVG", - "pluralName": "SVGs", - "machineName": "svg", - "pluralMachineName": "svgs", - "lineageIsGroup": false, - "maturity": "merged", - "extensions": [ - "svg" - ] - } - ], - "composable": [] -} \ No newline at end of file diff --git a/pkg/kindsys/report.go b/pkg/kindsys/report.go new file mode 100644 index 00000000000..9303a654717 --- /dev/null +++ b/pkg/kindsys/report.go @@ -0,0 +1,178 @@ +//go:build ignore +// +build ignore + +//go:generate go run report.go + +package main + +import ( + "context" + "encoding/json" + "fmt" + "os" + "sort" + "strings" + + "github.com/grafana/codejen" + "github.com/grafana/grafana/pkg/kindsys" + "github.com/grafana/grafana/pkg/plugins/pfs/corelist" + "github.com/grafana/grafana/pkg/registry/corekind" +) + +const reportFileName = "report.json" + +func main() { + report := buildKindStateReport() + reportJSON := elsedie(json.MarshalIndent(report, "", " "))("error generating json output") + + file := codejen.NewFile(reportFileName, reportJSON, reportJenny{}) + filesystem := elsedie(file.ToFS())("error building in-memory file system") + + if _, set := os.LookupEnv("CODEGEN_VERIFY"); set { + if err := filesystem.Verify(context.Background(), ""); err != nil { + die(fmt.Errorf("generated code is out of sync with inputs:\n%s\nrun `make gen-cue` to regenerate", err)) + } + } else if err := filesystem.Write(context.Background(), ""); err != nil { + die(fmt.Errorf("error while writing generated code to disk:\n%s", err)) + } +} + +// static list of planned core kinds so that we can inject ones that +// haven't been started on yet as "planned" +var plannedCoreKinds = []string { + "Dashboard", + "Playlist", + "Team", + "User", + "Folder", + "DataSource", + "APIKey", + "ServiceAccount", + "Thumb", + "Query", + "QueryHistory", +} + +type KindStateReport struct { + Core []kindsys.CoreStructuredProperties `json:"core"` + Raw []kindsys.RawProperties `json:"raw"` + Composable []kindsys.ComposableProperties `json:"composable"` +} + +func emptyKindStateReport() KindStateReport { + return KindStateReport{ + Core: make([]kindsys.CoreStructuredProperties, 0), + Raw: make([]kindsys.RawProperties, 0), + Composable: make([]kindsys.ComposableProperties, 0), + } +} + +func buildKindStateReport() KindStateReport { + r := emptyKindStateReport() + b := corekind.NewBase(nil) + + seen := make(map[string]bool) + for _, k := range b.All() { + seen[k.Props().Common().Name] = true + switch props := k.Props().(type) { + case kindsys.CoreStructuredProperties: + r.Core = append(r.Core, props) + case kindsys.RawProperties: + r.Raw = append(r.Raw, props) + } + } + + for _, kn := range plannedCoreKinds { + if seen[kn] { + continue + } + r.Core = append(r.Core, kindsys.CoreStructuredProperties{ + CommonProperties: kindsys.CommonProperties{ + Name: kn, + PluralName: kn + "s", + MachineName: machinize(kn), + PluralMachineName: machinize(kn) + "s", + Maturity: "planned", + }, + }) + } + + all := kindsys.AllSlots(nil) + // TODO this is all hacks until #59001, which will unite plugins with kindsys + for _, tree := range corelist.New(nil) { + rp := tree.RootPlugin() + for _, slot := range all { + if may, _ := slot.ForPluginType(string(rp.Meta().Type)); may { + n := fmt.Sprintf("%s-%s", strings.Title(rp.Meta().Id), slot.Name()) + props := kindsys.ComposableProperties{ + CommonProperties: kindsys.CommonProperties{ + Name: n, + PluralName: n + "s", + MachineName: machinize(n), + PluralMachineName: machinize(n) + "s", + LineageIsGroup: slot.IsGroup(), + Maturity: "planned", + }, + } + if ck, has := rp.SlotImplementations()[slot.Name()]; has { + props.CommonProperties.Maturity = "merged" + props.CurrentVersion = ck.Latest().Version() + } + r.Composable = append(r.Composable, props) + } + } + } + + sort.Slice(r.Core, func(i, j int) bool { + return r.Core[i].Common().Name < r.Core[j].Common().Name + }) + sort.Slice(r.Composable, func(i, j int) bool { + return r.Composable[i].Common().Name < r.Composable[j].Common().Name + }) + + return r +} + +func machinize(s string) string { + return strings.Map(func(r rune) rune { + switch { + case r >= 'a' && r <= 'z': + fallthrough + case r >= '0' && r <= '9': + fallthrough + case r == '_': + return r + case r >= 'A' && r <= 'Z': + return r + 32 + case r == '-': + return '_' + default: + return -1 + } + }, s) +} + +type reportJenny struct{} + +func (reportJenny) JennyName() string { + return "ReportJenny" +} + +func elsedie[T any](t T, err error) func(msg string) T { + if err != nil { + return func(msg string) T { + fmt.Fprintf(os.Stderr, "%s: %s\n", msg, err) + os.Exit(1) + return t + } + } + + return func(msg string) T { + return t + } +} + +func die(err error) { + fmt.Fprint(os.Stderr, err, "\n") + os.Exit(1) +} diff --git a/pkg/kindsys/report.json b/pkg/kindsys/report.json new file mode 100644 index 00000000000..531851127c2 --- /dev/null +++ b/pkg/kindsys/report.json @@ -0,0 +1,907 @@ +{ + "core": [ + { + "name": "APIKey", + "pluralName": "APIKeys", + "machineName": "apikey", + "pluralMachineName": "apikeys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Dashboard", + "pluralName": "Dashboards", + "machineName": "dashboard", + "pluralMachineName": "dashboards", + "lineageIsGroup": false, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "DataSource", + "pluralName": "DataSources", + "machineName": "datasource", + "pluralMachineName": "datasources", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Folder", + "pluralName": "Folders", + "machineName": "folder", + "pluralMachineName": "folders", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Playlist", + "pluralName": "Playlists", + "machineName": "playlist", + "pluralMachineName": "playlists", + "lineageIsGroup": false, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Query", + "pluralName": "Querys", + "machineName": "query", + "pluralMachineName": "querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "QueryHistory", + "pluralName": "QueryHistorys", + "machineName": "queryhistory", + "pluralMachineName": "queryhistorys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "ServiceAccount", + "pluralName": "ServiceAccounts", + "machineName": "serviceaccount", + "pluralMachineName": "serviceaccounts", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Team", + "pluralName": "Teams", + "machineName": "team", + "pluralMachineName": "teams", + "lineageIsGroup": false, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Thumb", + "pluralName": "Thumbs", + "machineName": "thumb", + "pluralMachineName": "thumbs", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "User", + "pluralName": "Users", + "machineName": "user", + "pluralMachineName": "users", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + } + ], + "raw": [ + { + "name": "SVG", + "pluralName": "SVGs", + "machineName": "svg", + "pluralMachineName": "svgs", + "lineageIsGroup": false, + "maturity": "merged", + "extensions": [ + "svg" + ] + } + ], + "composable": [ + { + "name": "AlertGroups-Panel", + "pluralName": "AlertGroups-Panels", + "machineName": "alertgroups_panel", + "pluralMachineName": "alertgroups_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Alertlist-Panel", + "pluralName": "Alertlist-Panels", + "machineName": "alertlist_panel", + "pluralMachineName": "alertlist_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Alertmanager-DSOptions", + "pluralName": "Alertmanager-DSOptionss", + "machineName": "alertmanager_dsoptions", + "pluralMachineName": "alertmanager_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Alertmanager-Query", + "pluralName": "Alertmanager-Querys", + "machineName": "alertmanager_query", + "pluralMachineName": "alertmanager_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Annolist-Panel", + "pluralName": "Annolist-Panels", + "machineName": "annolist_panel", + "pluralMachineName": "annolist_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Barchart-Panel", + "pluralName": "Barchart-Panels", + "machineName": "barchart_panel", + "pluralMachineName": "barchart_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Bargauge-Panel", + "pluralName": "Bargauge-Panels", + "machineName": "bargauge_panel", + "pluralMachineName": "bargauge_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Cloudwatch-DSOptions", + "pluralName": "Cloudwatch-DSOptionss", + "machineName": "cloudwatch_dsoptions", + "pluralMachineName": "cloudwatch_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Cloudwatch-Query", + "pluralName": "Cloudwatch-Querys", + "machineName": "cloudwatch_query", + "pluralMachineName": "cloudwatch_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Dashboard-DSOptions", + "pluralName": "Dashboard-DSOptionss", + "machineName": "dashboard_dsoptions", + "pluralMachineName": "dashboard_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Dashboard-Query", + "pluralName": "Dashboard-Querys", + "machineName": "dashboard_query", + "pluralMachineName": "dashboard_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Dashlist-Panel", + "pluralName": "Dashlist-Panels", + "machineName": "dashlist_panel", + "pluralMachineName": "dashlist_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Debug-Panel", + "pluralName": "Debug-Panels", + "machineName": "debug_panel", + "pluralMachineName": "debug_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Elasticsearch-DSOptions", + "pluralName": "Elasticsearch-DSOptionss", + "machineName": "elasticsearch_dsoptions", + "pluralMachineName": "elasticsearch_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Elasticsearch-Query", + "pluralName": "Elasticsearch-Querys", + "machineName": "elasticsearch_query", + "pluralMachineName": "elasticsearch_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Flamegraph-Panel", + "pluralName": "Flamegraph-Panels", + "machineName": "flamegraph_panel", + "pluralMachineName": "flamegraph_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Gauge-Panel", + "pluralName": "Gauge-Panels", + "machineName": "gauge_panel", + "pluralMachineName": "gauge_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Geomap-Panel", + "pluralName": "Geomap-Panels", + "machineName": "geomap_panel", + "pluralMachineName": "geomap_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Gettingstarted-Panel", + "pluralName": "Gettingstarted-Panels", + "machineName": "gettingstarted_panel", + "pluralMachineName": "gettingstarted_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Grafana-Azure-Monitor-Datasource-DSOptions", + "pluralName": "Grafana-Azure-Monitor-Datasource-DSOptionss", + "machineName": "grafana_azure_monitor_datasource_dsoptions", + "pluralMachineName": "grafana_azure_monitor_datasource_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Grafana-Azure-Monitor-Datasource-Query", + "pluralName": "Grafana-Azure-Monitor-Datasource-Querys", + "machineName": "grafana_azure_monitor_datasource_query", + "pluralMachineName": "grafana_azure_monitor_datasource_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Grafana-DSOptions", + "pluralName": "Grafana-DSOptionss", + "machineName": "grafana_dsoptions", + "pluralMachineName": "grafana_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Grafana-Query", + "pluralName": "Grafana-Querys", + "machineName": "grafana_query", + "pluralMachineName": "grafana_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Graph-Panel", + "pluralName": "Graph-Panels", + "machineName": "graph_panel", + "pluralMachineName": "graph_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Graphite-DSOptions", + "pluralName": "Graphite-DSOptionss", + "machineName": "graphite_dsoptions", + "pluralMachineName": "graphite_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Graphite-Query", + "pluralName": "Graphite-Querys", + "machineName": "graphite_query", + "pluralMachineName": "graphite_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Histogram-Panel", + "pluralName": "Histogram-Panels", + "machineName": "histogram_panel", + "pluralMachineName": "histogram_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Icon-Panel", + "pluralName": "Icon-Panels", + "machineName": "icon_panel", + "pluralMachineName": "icon_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Jaeger-DSOptions", + "pluralName": "Jaeger-DSOptionss", + "machineName": "jaeger_dsoptions", + "pluralMachineName": "jaeger_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Jaeger-Query", + "pluralName": "Jaeger-Querys", + "machineName": "jaeger_query", + "pluralMachineName": "jaeger_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Live-Panel", + "pluralName": "Live-Panels", + "machineName": "live_panel", + "pluralMachineName": "live_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Logs-Panel", + "pluralName": "Logs-Panels", + "machineName": "logs_panel", + "pluralMachineName": "logs_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Loki-DSOptions", + "pluralName": "Loki-DSOptionss", + "machineName": "loki_dsoptions", + "pluralMachineName": "loki_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Loki-Query", + "pluralName": "Loki-Querys", + "machineName": "loki_query", + "pluralMachineName": "loki_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Mssql-DSOptions", + "pluralName": "Mssql-DSOptionss", + "machineName": "mssql_dsoptions", + "pluralMachineName": "mssql_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Mssql-Query", + "pluralName": "Mssql-Querys", + "machineName": "mssql_query", + "pluralMachineName": "mssql_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Mysql-DSOptions", + "pluralName": "Mysql-DSOptionss", + "machineName": "mysql_dsoptions", + "pluralMachineName": "mysql_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Mysql-Query", + "pluralName": "Mysql-Querys", + "machineName": "mysql_query", + "pluralMachineName": "mysql_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "News-Panel", + "pluralName": "News-Panels", + "machineName": "news_panel", + "pluralMachineName": "news_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "NodeGraph-Panel", + "pluralName": "NodeGraph-Panels", + "machineName": "nodegraph_panel", + "pluralMachineName": "nodegraph_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Parca-DSOptions", + "pluralName": "Parca-DSOptionss", + "machineName": "parca_dsoptions", + "pluralMachineName": "parca_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Parca-Query", + "pluralName": "Parca-Querys", + "machineName": "parca_query", + "pluralMachineName": "parca_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Phlare-DSOptions", + "pluralName": "Phlare-DSOptionss", + "machineName": "phlare_dsoptions", + "pluralMachineName": "phlare_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Phlare-Query", + "pluralName": "Phlare-Querys", + "machineName": "phlare_query", + "pluralMachineName": "phlare_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Piechart-Panel", + "pluralName": "Piechart-Panels", + "machineName": "piechart_panel", + "pluralMachineName": "piechart_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Postgres-DSOptions", + "pluralName": "Postgres-DSOptionss", + "machineName": "postgres_dsoptions", + "pluralMachineName": "postgres_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Postgres-Query", + "pluralName": "Postgres-Querys", + "machineName": "postgres_query", + "pluralMachineName": "postgres_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Prometheus-DSOptions", + "pluralName": "Prometheus-DSOptionss", + "machineName": "prometheus_dsoptions", + "pluralMachineName": "prometheus_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Prometheus-Query", + "pluralName": "Prometheus-Querys", + "machineName": "prometheus_query", + "pluralMachineName": "prometheus_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Stackdriver-DSOptions", + "pluralName": "Stackdriver-DSOptionss", + "machineName": "stackdriver_dsoptions", + "pluralMachineName": "stackdriver_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Stackdriver-Query", + "pluralName": "Stackdriver-Querys", + "machineName": "stackdriver_query", + "pluralMachineName": "stackdriver_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Stat-Panel", + "pluralName": "Stat-Panels", + "machineName": "stat_panel", + "pluralMachineName": "stat_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Table-Old-Panel", + "pluralName": "Table-Old-Panels", + "machineName": "table_old_panel", + "pluralMachineName": "table_old_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Tempo-DSOptions", + "pluralName": "Tempo-DSOptionss", + "machineName": "tempo_dsoptions", + "pluralMachineName": "tempo_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Tempo-Query", + "pluralName": "Tempo-Querys", + "machineName": "tempo_query", + "pluralMachineName": "tempo_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Testdata-DSOptions", + "pluralName": "Testdata-DSOptionss", + "machineName": "testdata_dsoptions", + "pluralMachineName": "testdata_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Testdata-Query", + "pluralName": "Testdata-Querys", + "machineName": "testdata_query", + "pluralMachineName": "testdata_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Text-Panel", + "pluralName": "Text-Panels", + "machineName": "text_panel", + "pluralMachineName": "text_panels", + "lineageIsGroup": true, + "maturity": "merged", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Traces-Panel", + "pluralName": "Traces-Panels", + "machineName": "traces_panel", + "pluralMachineName": "traces_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Welcome-Panel", + "pluralName": "Welcome-Panels", + "machineName": "welcome_panel", + "pluralMachineName": "welcome_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Xychart-Panel", + "pluralName": "Xychart-Panels", + "machineName": "xychart_panel", + "pluralMachineName": "xychart_panels", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Zipkin-DSOptions", + "pluralName": "Zipkin-DSOptionss", + "machineName": "zipkin_dsoptions", + "pluralMachineName": "zipkin_dsoptionss", + "lineageIsGroup": true, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + }, + { + "name": "Zipkin-Query", + "pluralName": "Zipkin-Querys", + "machineName": "zipkin_query", + "pluralMachineName": "zipkin_querys", + "lineageIsGroup": false, + "maturity": "planned", + "currentVersion": [ + 0, + 0 + ] + } + ] +} \ No newline at end of file