Plugins: Simplify assetpath logic (#107876)

* simplify assetpath logic

* fix tests
This commit is contained in:
Will Browne
2025-07-09 15:48:52 +01:00
committed by GitHub
parent 1d252de1e9
commit 1e0fd825eb
5 changed files with 121 additions and 155 deletions

View File

@ -46,10 +46,6 @@ func DefaultService(cfg *config.PluginManagementCfg) *Service {
// Base returns the base path for the specified plugin. // Base returns the base path for the specified plugin.
func (s *Service) Base(n PluginInfo) (string, error) { func (s *Service) Base(n PluginInfo) (string, error) {
if n.class == plugins.ClassCore {
baseDir := getBaseDir(n.fs.Base())
return path.Join("public/app/plugins", string(n.pluginJSON.Type), baseDir), nil
}
if n.class == plugins.ClassCDN { if n.class == plugins.ClassCDN {
return n.fs.Base(), nil return n.fs.Base(), nil
} }
@ -64,7 +60,6 @@ func (s *Service) Base(n PluginInfo) (string, error) {
if s.cdn.PluginSupported(n.parent.pluginJSON.ID) { if s.cdn.PluginSupported(n.parent.pluginJSON.ID) {
return s.cdn.AssetURL(n.parent.pluginJSON.ID, n.parent.pluginJSON.Info.Version, relPath) return s.cdn.AssetURL(n.parent.pluginJSON.ID, n.parent.pluginJSON.Info.Version, relPath)
} }
return path.Join("public/plugins", n.parent.pluginJSON.ID, relPath), nil
} }
return path.Join("public/plugins", n.pluginJSON.ID), nil return path.Join("public/plugins", n.pluginJSON.ID), nil
@ -73,32 +68,12 @@ func (s *Service) Base(n PluginInfo) (string, error) {
// Module returns the module.js path for the specified plugin. // Module returns the module.js path for the specified plugin.
func (s *Service) Module(n PluginInfo) (string, error) { func (s *Service) Module(n PluginInfo) (string, error) {
if n.class == plugins.ClassCore { if n.class == plugins.ClassCore {
if filepath.Base(n.fs.Base()) == "dist" { if filepath.Base(n.fs.Base()) != "dist" {
// The core plugin has been built externally, use the module from the dist folder return path.Join("core:plugin", filepath.Base(n.fs.Base())), nil
} else {
baseDir := getBaseDir(n.fs.Base())
return path.Join("core:plugin", baseDir), nil
} }
} }
if n.class == plugins.ClassCDN {
return pluginscdn.JoinPath(n.fs.Base(), "module.js")
}
if s.cdn.PluginSupported(n.pluginJSON.ID) { return s.RelativeURL(n, "module.js")
return s.cdn.AssetURL(n.pluginJSON.ID, n.pluginJSON.Info.Version, "module.js")
}
if n.parent != nil {
relPath, err := n.parent.fs.Rel(n.fs.Base())
if err != nil {
return "", err
}
if s.cdn.PluginSupported(n.parent.pluginJSON.ID) {
return s.cdn.AssetURL(n.parent.pluginJSON.ID, n.parent.pluginJSON.Info.Version, path.Join(relPath, "module.js"))
}
return path.Join("public/plugins", n.parent.pluginJSON.ID, relPath, "module.js"), nil
}
return path.Join("public/plugins", n.pluginJSON.ID, "module.js"), nil
} }
// RelativeURL returns the relative URL for an arbitrary plugin asset. // RelativeURL returns the relative URL for an arbitrary plugin asset.
@ -145,15 +120,6 @@ func (s *Service) DefaultLogoPath(pluginType plugins.Type) string {
return path.Join("public/img", fmt.Sprintf("icn-%s.svg", string(pluginType))) return path.Join("public/img", fmt.Sprintf("icn-%s.svg", string(pluginType)))
} }
func getBaseDir(pluginDir string) string {
baseDir := filepath.Base(pluginDir)
// Decoupled core plugins will be suffixed with "dist" if they have been built
if baseDir == "dist" {
return filepath.Base(strings.TrimSuffix(pluginDir, baseDir))
}
return baseDir
}
func (s *Service) GetTranslations(n PluginInfo) (map[string]string, error) { func (s *Service) GetTranslations(n PluginInfo) (map[string]string, error) {
pathToTranslations, err := s.RelativeURL(n, "locales") pathToTranslations, err := s.RelativeURL(n, "locales")
if err != nil { if err != nil {

View File

@ -78,7 +78,7 @@ func TestService(t *testing.T) {
base, err = svc.Base(NewPluginInfo(jsonData["table-old"], plugins.ClassCore, tableOldFS, nil)) base, err = svc.Base(NewPluginInfo(jsonData["table-old"], plugins.ClassCore, tableOldFS, nil))
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, "public/app/plugins/table-old", base) require.Equal(t, "public/plugins/table-old", base)
parentFS := pluginFS(oneCDNURL) parentFS := pluginFS(oneCDNURL)
parentFS.RelFunc = func(_ string) (string, error) { parentFS.RelFunc = func(_ string) (string, error) {
@ -243,9 +243,9 @@ func TestService_ChildPlugins(t *testing.T) {
return childInfo return childInfo
}, },
expected: expected{ expected: expected{
module: "public/plugins/parent/child/module.js", module: "public/plugins/child/module.js",
baseURL: "public/plugins/parent/child", baseURL: "public/plugins/child",
relURL: "public/plugins/parent/child/path/to/file.txt", relURL: "public/plugins/child/path/to/file.txt",
}, },
}, },
{ {
@ -256,8 +256,8 @@ func TestService_ChildPlugins(t *testing.T) {
}, },
expected: expected{ expected: expected{
module: "core:plugin/parent", module: "core:plugin/parent",
baseURL: "public/app/plugins/parent", baseURL: "public/plugins/parent",
relURL: "public/app/plugins/parent/path/to/file.txt", relURL: "public/plugins/parent/path/to/file.txt",
}, },
}, },
{ {
@ -268,8 +268,8 @@ func TestService_ChildPlugins(t *testing.T) {
}, },
expected: expected{ expected: expected{
module: "public/plugins/parent/module.js", module: "public/plugins/parent/module.js",
baseURL: "public/app/plugins/parent", baseURL: "public/plugins/parent",
relURL: "public/app/plugins/parent/path/to/file.txt", relURL: "public/plugins/parent/path/to/file.txt",
}, },
}, },
{ {

View File

@ -85,8 +85,8 @@ func TestLoader_Load(t *testing.T) {
Description: "Data source for Amazon AWS monitoring service", Description: "Data source for Amazon AWS monitoring service",
Keywords: []string{"aws", "amazon"}, Keywords: []string{"aws", "amazon"},
Logos: plugins.Logos{ Logos: plugins.Logos{
Small: "public/app/plugins/datasource/cloudwatch/img/amazon-web-services.png", Small: "public/plugins/cloudwatch/img/amazon-web-services.png",
Large: "public/app/plugins/datasource/cloudwatch/img/amazon-web-services.png", Large: "public/plugins/cloudwatch/img/amazon-web-services.png",
}, },
Links: []plugins.InfoLink{ Links: []plugins.InfoLink{
{Name: "Raise issue", URL: "https://github.com/grafana/grafana/issues/new"}, {Name: "Raise issue", URL: "https://github.com/grafana/grafana/issues/new"},
@ -123,7 +123,7 @@ func TestLoader_Load(t *testing.T) {
QueryOptions: map[string]bool{"minInterval": true}, QueryOptions: map[string]bool{"minInterval": true},
}, },
Module: "core:plugin/cloudwatch", Module: "core:plugin/cloudwatch",
BaseURL: "public/app/plugins/datasource/cloudwatch", BaseURL: "public/plugins/cloudwatch",
FS: mustNewStaticFSForTests(t, filepath.Join(corePluginDir, "app/plugins/datasource/cloudwatch")), FS: mustNewStaticFSForTests(t, filepath.Join(corePluginDir, "app/plugins/datasource/cloudwatch")),
Signature: plugins.SignatureStatusInternal, Signature: plugins.SignatureStatusInternal,
Class: plugins.ClassCore, Class: plugins.ClassCore,

View File

@ -83,8 +83,8 @@ func TestLoader_Load(t *testing.T) {
Description: "Data source for Amazon AWS monitoring service", Description: "Data source for Amazon AWS monitoring service",
Keywords: []string{"aws", "amazon"}, Keywords: []string{"aws", "amazon"},
Logos: plugins.Logos{ Logos: plugins.Logos{
Small: "public/app/plugins/datasource/cloudwatch/img/amazon-web-services.png", Small: "public/plugins/cloudwatch/img/amazon-web-services.png",
Large: "public/app/plugins/datasource/cloudwatch/img/amazon-web-services.png", Large: "public/plugins/cloudwatch/img/amazon-web-services.png",
}, },
Links: []plugins.InfoLink{ Links: []plugins.InfoLink{
{Name: "Raise issue", URL: "https://github.com/grafana/grafana/issues/new"}, {Name: "Raise issue", URL: "https://github.com/grafana/grafana/issues/new"},
@ -121,7 +121,7 @@ func TestLoader_Load(t *testing.T) {
QueryOptions: map[string]bool{"minInterval": true}, QueryOptions: map[string]bool{"minInterval": true},
}, },
Module: "core:plugin/cloudwatch", Module: "core:plugin/cloudwatch",
BaseURL: "public/app/plugins/datasource/cloudwatch", BaseURL: "public/plugins/cloudwatch",
FS: mustNewStaticFSForTests(t, filepath.Join(corePluginDir(t), "app/plugins/datasource/cloudwatch")), FS: mustNewStaticFSForTests(t, filepath.Join(corePluginDir(t), "app/plugins/datasource/cloudwatch")),
Signature: plugins.SignatureStatusInternal, Signature: plugins.SignatureStatusInternal,
Class: plugins.ClassCore, Class: plugins.ClassCore,
@ -1325,8 +1325,8 @@ func TestLoader_Load_NestedPlugins(t *testing.T) {
ExtensionPoints: []plugins.ExtensionPoint{}, ExtensionPoints: []plugins.ExtensionPoint{},
}, },
}, },
Module: "public/plugins/test-datasource/nested/module.js", Module: "public/plugins/test-panel/module.js",
BaseURL: "public/plugins/test-datasource/nested", BaseURL: "public/plugins/test-panel",
FS: mustNewStaticFSForTests(t, filepath.Join(testDataDir(t), "nested-plugins/parent/nested")), FS: mustNewStaticFSForTests(t, filepath.Join(testDataDir(t), "nested-plugins/parent/nested")),
Signature: plugins.SignatureStatusValid, Signature: plugins.SignatureStatusValid,
SignatureType: plugins.SignatureTypeGrafana, SignatureType: plugins.SignatureTypeGrafana,
@ -1497,8 +1497,8 @@ func TestLoader_Load_NestedPlugins(t *testing.T) {
{Name: "License", URL: "https://github.com/grafana/grafana-starter-panel/blob/master/LICENSE"}, {Name: "License", URL: "https://github.com/grafana/grafana-starter-panel/blob/master/LICENSE"},
}, },
Logos: plugins.Logos{ Logos: plugins.Logos{
Small: "public/plugins/myorgid-simple-app/child/img/logo.svg", Small: "public/plugins/myorgid-simple-panel/img/logo.svg",
Large: "public/plugins/myorgid-simple-app/child/img/logo.svg", Large: "public/plugins/myorgid-simple-panel/img/logo.svg",
}, },
Screenshots: []plugins.Screenshots{}, Screenshots: []plugins.Screenshots{},
Description: "Grafana Panel Plugin Template", Description: "Grafana Panel Plugin Template",
@ -1523,8 +1523,8 @@ func TestLoader_Load_NestedPlugins(t *testing.T) {
ExtensionPoints: []plugins.ExtensionPoint{}, ExtensionPoints: []plugins.ExtensionPoint{},
}, },
}, },
Module: "public/plugins/myorgid-simple-app/child/module.js", Module: "public/plugins/myorgid-simple-panel/module.js",
BaseURL: "public/plugins/myorgid-simple-app/child", BaseURL: "public/plugins/myorgid-simple-panel",
FS: mustNewStaticFSForTests(t, filepath.Join(testDataDir(t), "app-with-child/dist/child")), FS: mustNewStaticFSForTests(t, filepath.Join(testDataDir(t), "app-with-child/dist/child")),
IncludedInAppID: parent.ID, IncludedInAppID: parent.ID,
Signature: plugins.SignatureStatusValid, Signature: plugins.SignatureStatusValid,

View File

@ -22,8 +22,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/alertlist/img/icn-singlestat-panel.svg", "small": "public/plugins/alertlist/img/icn-singlestat-panel.svg",
"large": "public/app/plugins/panel/alertlist/img/icn-singlestat-panel.svg" "large": "public/plugins/alertlist/img/icn-singlestat-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -76,8 +76,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/alertmanager/img/logo.svg", "small": "public/plugins/alertmanager/img/logo.svg",
"large": "public/app/plugins/datasource/alertmanager/img/logo.svg" "large": "public/plugins/alertmanager/img/logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -133,8 +133,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/annolist/img/icn-annolist-panel.svg", "small": "public/plugins/annolist/img/icn-annolist-panel.svg",
"large": "public/app/plugins/panel/annolist/img/icn-annolist-panel.svg" "large": "public/plugins/annolist/img/icn-annolist-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -191,22 +191,22 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/azuremonitor/img/logo.jpg", "small": "public/plugins/grafana-azure-monitor-datasource/img/logo.jpg",
"large": "public/app/plugins/datasource/azuremonitor/img/logo.jpg" "large": "public/plugins/grafana-azure-monitor-datasource/img/logo.jpg"
}, },
"build": {}, "build": {},
"screenshots": [ "screenshots": [
{ {
"name": "Azure Contoso Loans", "name": "Azure Contoso Loans",
"path": "public/app/plugins/datasource/azuremonitor/img/contoso_loans_grafana_dashboard.png" "path": "public/plugins/grafana-azure-monitor-datasource/img/contoso_loans_grafana_dashboard.png"
}, },
{ {
"name": "Azure Monitor Network", "name": "Azure Monitor Network",
"path": "public/app/plugins/datasource/azuremonitor/img/azure_monitor_network.png" "path": "public/plugins/grafana-azure-monitor-datasource/img/azure_monitor_network.png"
}, },
{ {
"name": "Azure Monitor CPU", "name": "Azure Monitor CPU",
"path": "public/app/plugins/datasource/azuremonitor/img/azure_monitor_cpu.png" "path": "public/plugins/grafana-azure-monitor-datasource/img/azure_monitor_cpu.png"
} }
], ],
"version": "12.1.0-pre", "version": "12.1.0-pre",
@ -260,8 +260,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/barchart/img/barchart.svg", "small": "public/plugins/barchart/img/barchart.svg",
"large": "public/app/plugins/panel/barchart/img/barchart.svg" "large": "public/plugins/barchart/img/barchart.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -310,8 +310,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/bargauge/img/icon_bar_gauge.svg", "small": "public/plugins/bargauge/img/icon_bar_gauge.svg",
"large": "public/app/plugins/panel/bargauge/img/icon_bar_gauge.svg" "large": "public/plugins/bargauge/img/icon_bar_gauge.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -360,8 +360,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/candlestick/img/candlestick.svg", "small": "public/plugins/candlestick/img/candlestick.svg",
"large": "public/app/plugins/panel/candlestick/img/candlestick.svg" "large": "public/plugins/candlestick/img/candlestick.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -415,8 +415,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/canvas/img/icn-canvas.svg", "small": "public/plugins/canvas/img/icn-canvas.svg",
"large": "public/app/plugins/panel/canvas/img/icn-canvas.svg" "large": "public/plugins/canvas/img/icn-canvas.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -465,8 +465,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/cloudwatch/img/amazon-web-services.png", "small": "public/plugins/cloudwatch/img/amazon-web-services.png",
"large": "public/app/plugins/datasource/cloudwatch/img/amazon-web-services.png" "large": "public/plugins/cloudwatch/img/amazon-web-services.png"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -518,8 +518,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/dashlist/img/icn-dashlist-panel.svg", "small": "public/plugins/dashlist/img/icn-dashlist-panel.svg",
"large": "public/app/plugins/panel/dashlist/img/icn-dashlist-panel.svg" "large": "public/plugins/dashlist/img/icn-dashlist-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -568,8 +568,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/datagrid/img/icn-table-panel.svg", "small": "public/plugins/datagrid/img/icn-table-panel.svg",
"large": "public/app/plugins/panel/datagrid/img/icn-table-panel.svg" "large": "public/plugins/datagrid/img/icn-table-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -622,8 +622,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/elasticsearch/img/elasticsearch.svg", "small": "public/plugins/elasticsearch/img/elasticsearch.svg",
"large": "public/app/plugins/datasource/elasticsearch/img/elasticsearch.svg" "large": "public/plugins/elasticsearch/img/elasticsearch.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -679,8 +679,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/flamegraph/img/icn-flamegraph.svg", "small": "public/plugins/flamegraph/img/icn-flamegraph.svg",
"large": "public/app/plugins/panel/flamegraph/img/icn-flamegraph.svg" "large": "public/plugins/flamegraph/img/icn-flamegraph.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -729,8 +729,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/gauge/img/icon_gauge.svg", "small": "public/plugins/gauge/img/icon_gauge.svg",
"large": "public/app/plugins/panel/gauge/img/icon_gauge.svg" "large": "public/plugins/gauge/img/icon_gauge.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -779,8 +779,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/geomap/img/icn-geomap.svg", "small": "public/plugins/geomap/img/icn-geomap.svg",
"large": "public/app/plugins/panel/geomap/img/icn-geomap.svg" "large": "public/plugins/geomap/img/icn-geomap.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -825,8 +825,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/gettingstarted/img/icn-dashlist-panel.svg", "small": "public/plugins/gettingstarted/img/icn-dashlist-panel.svg",
"large": "public/app/plugins/panel/gettingstarted/img/icn-dashlist-panel.svg" "large": "public/plugins/gettingstarted/img/icn-dashlist-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -875,8 +875,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/cloud-monitoring/img/cloud_monitoring_logo.svg", "small": "public/plugins/stackdriver/img/cloud_monitoring_logo.svg",
"large": "public/app/plugins/datasource/cloud-monitoring/img/cloud_monitoring_logo.svg" "large": "public/plugins/stackdriver/img/cloud_monitoring_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -929,8 +929,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/grafana-pyroscope-datasource/img/grafana_pyroscope_icon.svg", "small": "public/plugins/grafana-pyroscope-datasource/img/grafana_pyroscope_icon.svg",
"large": "public/app/plugins/datasource/grafana-pyroscope-datasource/img/grafana_pyroscope_icon.svg" "large": "public/plugins/grafana-pyroscope-datasource/img/grafana_pyroscope_icon.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -995,8 +995,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/graphite/img/graphite_logo.png", "small": "public/plugins/graphite/img/graphite_logo.png",
"large": "public/app/plugins/datasource/graphite/img/graphite_logo.png" "large": "public/plugins/graphite/img/graphite_logo.png"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1045,8 +1045,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/heatmap/img/icn-heatmap-panel.svg", "small": "public/plugins/heatmap/img/icn-heatmap-panel.svg",
"large": "public/app/plugins/panel/heatmap/img/icn-heatmap-panel.svg" "large": "public/plugins/heatmap/img/icn-heatmap-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1095,8 +1095,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/histogram/img/histogram.svg", "small": "public/plugins/histogram/img/histogram.svg",
"large": "public/app/plugins/panel/histogram/img/histogram.svg" "large": "public/plugins/histogram/img/histogram.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1150,8 +1150,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/influxdb/img/influxdb_logo.svg", "small": "public/plugins/influxdb/img/influxdb_logo.svg",
"large": "public/app/plugins/datasource/influxdb/img/influxdb_logo.svg" "large": "public/plugins/influxdb/img/influxdb_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1212,8 +1212,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/jaeger/img/jaeger_logo.svg", "small": "public/plugins/jaeger/img/jaeger_logo.svg",
"large": "public/app/plugins/datasource/jaeger/img/jaeger_logo.svg" "large": "public/plugins/jaeger/img/jaeger_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1262,8 +1262,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/logs/img/icn-logs-panel.svg", "small": "public/plugins/logs/img/icn-logs-panel.svg",
"large": "public/app/plugins/panel/logs/img/icn-logs-panel.svg" "large": "public/plugins/logs/img/icn-logs-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1320,8 +1320,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/loki/img/loki_icon.svg", "small": "public/plugins/loki/img/loki_icon.svg",
"large": "public/app/plugins/datasource/loki/img/loki_icon.svg" "large": "public/plugins/loki/img/loki_icon.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1370,8 +1370,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/mssql/img/sql_server_logo.svg", "small": "public/plugins/mssql/img/sql_server_logo.svg",
"large": "public/app/plugins/datasource/mssql/img/sql_server_logo.svg" "large": "public/plugins/mssql/img/sql_server_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1420,8 +1420,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/mysql/img/mysql_logo.svg", "small": "public/plugins/mysql/img/mysql_logo.svg",
"large": "public/app/plugins/datasource/mysql/img/mysql_logo.svg" "large": "public/plugins/mysql/img/mysql_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1470,8 +1470,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/news/img/news.svg", "small": "public/plugins/news/img/news.svg",
"large": "public/app/plugins/panel/news/img/news.svg" "large": "public/plugins/news/img/news.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1520,8 +1520,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/nodeGraph/img/icn-node-graph.svg", "small": "public/plugins/nodeGraph/img/icn-node-graph.svg",
"large": "public/app/plugins/panel/nodeGraph/img/icn-node-graph.svg" "large": "public/plugins/nodeGraph/img/icn-node-graph.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1570,8 +1570,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/opentsdb/img/opentsdb_logo.png", "small": "public/plugins/opentsdb/img/opentsdb_logo.png",
"large": "public/app/plugins/datasource/opentsdb/img/opentsdb_logo.png" "large": "public/plugins/opentsdb/img/opentsdb_logo.png"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1624,8 +1624,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/parca/img/logo-small.svg", "small": "public/plugins/parca/img/logo-small.svg",
"large": "public/app/plugins/datasource/parca/img/logo-small.svg" "large": "public/plugins/parca/img/logo-small.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1679,8 +1679,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/piechart/img/icon_piechart.svg", "small": "public/plugins/piechart/img/icon_piechart.svg",
"large": "public/app/plugins/panel/piechart/img/icon_piechart.svg" "large": "public/plugins/piechart/img/icon_piechart.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1729,8 +1729,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/grafana-postgresql-datasource/img/postgresql_logo.svg", "small": "public/plugins/grafana-postgresql-datasource/img/postgresql_logo.svg",
"large": "public/app/plugins/datasource/grafana-postgresql-datasource/img/postgresql_logo.svg" "large": "public/plugins/grafana-postgresql-datasource/img/postgresql_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1783,8 +1783,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/prometheus/img/prometheus_logo.svg", "small": "public/plugins/prometheus/img/prometheus_logo.svg",
"large": "public/app/plugins/datasource/prometheus/img/prometheus_logo.svg" "large": "public/plugins/prometheus/img/prometheus_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1833,8 +1833,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/stat/img/icn-singlestat-panel.svg", "small": "public/plugins/stat/img/icn-singlestat-panel.svg",
"large": "public/app/plugins/panel/stat/img/icn-singlestat-panel.svg" "large": "public/plugins/stat/img/icn-singlestat-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1883,8 +1883,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/state-timeline/img/timeline.svg", "small": "public/plugins/state-timeline/img/timeline.svg",
"large": "public/app/plugins/panel/state-timeline/img/timeline.svg" "large": "public/plugins/state-timeline/img/timeline.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1933,8 +1933,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/status-history/img/status.svg", "small": "public/plugins/status-history/img/status.svg",
"large": "public/app/plugins/panel/status-history/img/status.svg" "large": "public/plugins/status-history/img/status.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -1983,8 +1983,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/table/img/icn-table-panel.svg", "small": "public/plugins/table/img/icn-table-panel.svg",
"large": "public/app/plugins/panel/table/img/icn-table-panel.svg" "large": "public/plugins/table/img/icn-table-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2037,8 +2037,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/tempo/img/tempo_logo.svg", "small": "public/plugins/tempo/img/tempo_logo.svg",
"large": "public/app/plugins/datasource/tempo/img/tempo_logo.svg" "large": "public/plugins/tempo/img/tempo_logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2087,8 +2087,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/grafana-testdata-datasource/img/testdata.svg", "small": "public/plugins/grafana-testdata-datasource/img/testdata.svg",
"large": "public/app/plugins/datasource/grafana-testdata-datasource/img/testdata.svg" "large": "public/plugins/grafana-testdata-datasource/img/testdata.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2137,8 +2137,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/text/img/icn-text-panel.svg", "small": "public/plugins/text/img/icn-text-panel.svg",
"large": "public/app/plugins/panel/text/img/icn-text-panel.svg" "large": "public/plugins/text/img/icn-text-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2187,8 +2187,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/timeseries/img/icn-timeseries-panel.svg", "small": "public/plugins/timeseries/img/icn-timeseries-panel.svg",
"large": "public/app/plugins/panel/timeseries/img/icn-timeseries-panel.svg" "large": "public/plugins/timeseries/img/icn-timeseries-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2237,8 +2237,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/traces/img/traces-panel.svg", "small": "public/plugins/traces/img/traces-panel.svg",
"large": "public/app/plugins/panel/traces/img/traces-panel.svg" "large": "public/plugins/traces/img/traces-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2287,8 +2287,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/trend/img/trend.svg", "small": "public/plugins/trend/img/trend.svg",
"large": "public/app/plugins/panel/trend/img/trend.svg" "large": "public/plugins/trend/img/trend.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2333,8 +2333,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/welcome/img/icn-dashlist-panel.svg", "small": "public/plugins/welcome/img/icn-dashlist-panel.svg",
"large": "public/app/plugins/panel/welcome/img/icn-dashlist-panel.svg" "large": "public/plugins/welcome/img/icn-dashlist-panel.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2383,8 +2383,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/panel/xychart/img/icn-xychart.svg", "small": "public/plugins/xychart/img/icn-xychart.svg",
"large": "public/app/plugins/panel/xychart/img/icn-xychart.svg" "large": "public/plugins/xychart/img/icn-xychart.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2440,8 +2440,8 @@
} }
], ],
"logos": { "logos": {
"small": "public/app/plugins/datasource/zipkin/img/zipkin-logo.svg", "small": "public/plugins/zipkin/img/zipkin-logo.svg",
"large": "public/app/plugins/datasource/zipkin/img/zipkin-logo.svg" "large": "public/plugins/zipkin/img/zipkin-logo.svg"
}, },
"build": {}, "build": {},
"screenshots": null, "screenshots": null,
@ -2467,4 +2467,4 @@
"signatureOrg": "", "signatureOrg": "",
"angularDetected": false "angularDetected": false
} }
] ]