mirror of
https://github.com/grafana/grafana.git
synced 2025-07-29 05:42:28 +08:00

* chore(angularsupport): delete feature toggle to disable angular * feat(angular-support): remove config.angularSupportEnabled * chore(jest): remove angular from setup file * chore(angular): delete angular deprecation ui components * refactor(angular): move migration featureflags into migration notice * chore(dashboard): remove angular deprecation notices * chore(annotations): remove angular editor loader * feat(appwrapper): no more angular app loading * feat(pluginscatalog): clean up angular plugin warnings and logic * chore(angular): delete angular app and associated files * feat(plugins): delete old angular graph plugin * feat(plugins): delete old angular table panel * feat(frontend): remove unused appEvent type * feat(dashboards): clean up angular from panel options and menu * feat(plugins): remove graph and table-old from built in plugins and delete sdk * feat(frontend): remove angular related imports in routes and explore graph * feat(theme): remove angular panel styles from global styles * chore(i18n): run make i18n-extract * test(api_plugins_test): refresh snapshot due to deleting old graph and table plugins * chore(angulardeprecation): delete angular migration notice components and usage * test(frontend): clean up tests that assert rendering angular deprecation notices * chore(backend): remove autoMigrateOldPanels feature flag * chore(config): remove angularSupportEnabled from config preventing loading angular plugins * chore(graphpanel): remove autoMigrateGraphPanel from feature toggles * chore(tablepanel): delete autoMigrateTablePanel feature flag * chore(piechart): delete autoMigratePiechartPanel feature flag * chore(worldmappanel): remove autoMigrateWorldmapPanel feature toggle * chore(statpanel): remove autoMigrateStatPanel feature flag * feat(dashboards): remove automigrate feature flags and always auto migrate angular panels * test(pluginsintegration): fix failing loader test * test(frontend): wip: fix failures and skip erroring migration tests * chore(codeowners): remove deleted angular related files and directories * test(graphite): remove angular mock from test file * test(dashboards): skip failing exporter test, remove angularSupportEnabled flags * test(dashbaord): skip another failing panel menu test * Tests: fixes pkg/services/pluginsintegration/loader/loader_test.go (#100505) * Tests: fixes pkg/services/pluginsintegration/plugins_integration_test.go * Trigger Build * chore(dashboards): remove angularComponent from getPanelMenu, update test * feat(dashboards): remove all usage of AngularComponent and getAngularLoader * chore(betterer): refresh results file * feat(plugins): remove PluginAngularBadge component and usage * feat(datasource_srv): remove usage of getLegacyAngularInjector * feat(queryeditor): delete AngularQueryComponentScope type * Chore: removes Angular from plugin_loader * Chore: remove angular from getPlugin * Chore: fix i18n * Trigger Build * Chore: remove more Angular from importPanelPlugin * Chore: remove search options warning * Chore: remove and deprecate Angular related * chore(angular): remove angular dependencies from core and runtime * chore(runtime): delete angular injector * chore(data): delete angular scope from event bus * chore(plugin-catalog): remove code pushing app plugins angular config page * chore(yarn): refresh lock file * chore(frontend): remove ng-loader from webpack configs, remove systemjs cjs plugin * chore(navigation): remove tether-drop cleanup from GrafanaRouter, delete dependency * chore(runtime): delete AngularLoader * chore(betterer): refresh results file * chore(betterer): fix out of sync results file * feat(query): fix type and import errors in QueryEditorRow * test(dashboards): delete skipped angular related tests * Tests: add back tests and fix betterer * Tests: fix broken test * Trigger build * chore(i18n): remove angular deprecation related strings * test: clean up connections and plugins catalog tests * chore(betterer): update results file --------- Co-authored-by: Hugo Häggmark <hugo.haggmark@gmail.com>
151 lines
5.7 KiB
Go
151 lines
5.7 KiB
Go
package pluginconfig
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/grafana/grafana/pkg/util"
|
|
|
|
"github.com/grafana/grafana-azure-sdk-go/v2/azsettings"
|
|
|
|
"github.com/grafana/grafana/pkg/plugins/config"
|
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
// ProvidePluginManagementConfig returns a new config.PluginManagementCfg.
|
|
// It is used to provide configuration to Grafana's implementation of the plugin management system.
|
|
func ProvidePluginManagementConfig(cfg *setting.Cfg, settingProvider setting.Provider, features featuremgmt.FeatureToggles) (*config.PluginManagementCfg, error) {
|
|
plugins := settingProvider.Section("plugins")
|
|
allowedUnsigned := cfg.PluginsAllowUnsigned
|
|
if len(plugins.KeyValue("allow_loading_unsigned_plugins").Value()) > 0 {
|
|
allowedUnsigned = strings.Split(plugins.KeyValue("allow_loading_unsigned_plugins").Value(), ",")
|
|
}
|
|
|
|
return config.NewPluginManagementCfg(
|
|
settingProvider.KeyValue("", "app_mode").MustBool(cfg.Env == setting.Dev),
|
|
cfg.PluginsPath,
|
|
extractPluginSettings(settingProvider),
|
|
allowedUnsigned,
|
|
cfg.PluginsCDNURLTemplate,
|
|
cfg.AppURL,
|
|
config.Features{
|
|
ExternalCorePluginsEnabled: features.IsEnabledGlobally(featuremgmt.FlagExternalCorePlugins),
|
|
SkipHostEnvVarsEnabled: features.IsEnabledGlobally(featuremgmt.FlagPluginsSkipHostEnvVars),
|
|
SriChecksEnabled: features.IsEnabledGlobally(featuremgmt.FlagPluginsSriChecks),
|
|
PluginsCDNSyncLoaderEnabled: features.IsEnabledGlobally(featuremgmt.FlagPluginsCDNSyncLoader),
|
|
LocalizationForPlugins: features.IsEnabledGlobally(featuremgmt.FlagLocalizationForPlugins),
|
|
},
|
|
cfg.GrafanaComAPIURL,
|
|
cfg.DisablePlugins,
|
|
cfg.HideAngularDeprecation,
|
|
cfg.ForwardHostEnvVars,
|
|
cfg.GrafanaComSSOAPIToken,
|
|
), nil
|
|
}
|
|
|
|
// PluginInstanceCfg contains the configuration for a plugin instance.
|
|
// It is used to provide configuration to the plugin instance either via env vars or via each plugin request.
|
|
type PluginInstanceCfg struct {
|
|
GrafanaAppURL string
|
|
Features featuremgmt.FeatureToggles
|
|
|
|
Tracing config.Tracing
|
|
|
|
PluginSettings setting.PluginSettings
|
|
|
|
AWSAllowedAuthProviders []string
|
|
AWSAssumeRoleEnabled bool
|
|
AWSExternalId string
|
|
AWSSessionDuration string
|
|
AWSListMetricsPageLimit string
|
|
AWSForwardSettingsPlugins []string
|
|
|
|
Azure *azsettings.AzureSettings
|
|
AzureAuthEnabled bool
|
|
|
|
ProxySettings setting.SecureSocksDSProxySettings
|
|
|
|
GrafanaVersion string
|
|
|
|
ConcurrentQueryCount int
|
|
ResponseLimit int64
|
|
|
|
UserFacingDefaultError string
|
|
|
|
DataProxyRowLimit int64
|
|
|
|
SQLDatasourceMaxOpenConnsDefault int
|
|
SQLDatasourceMaxIdleConnsDefault int
|
|
SQLDatasourceMaxConnLifetimeDefault int
|
|
|
|
SigV4AuthEnabled bool
|
|
SigV4VerboseLogging bool
|
|
}
|
|
|
|
// ProvidePluginInstanceConfig returns a new PluginInstanceCfg.
|
|
func ProvidePluginInstanceConfig(cfg *setting.Cfg, settingProvider setting.Provider, features featuremgmt.FeatureToggles) (*PluginInstanceCfg, error) {
|
|
aws := settingProvider.Section("aws")
|
|
allowedAuth := cfg.AWSAllowedAuthProviders
|
|
if len(aws.KeyValue("allowed_auth_providers").Value()) > 0 {
|
|
allowedAuth = util.SplitString(aws.KeyValue("allowed_auth_providers").Value())
|
|
}
|
|
awsForwardSettingsPlugins := cfg.AWSForwardSettingsPlugins
|
|
if len(aws.KeyValue("forward_settings_to_plugins").Value()) > 0 {
|
|
awsForwardSettingsPlugins = util.SplitString(aws.KeyValue("forward_settings_to_plugins").Value())
|
|
}
|
|
|
|
tracingCfg, err := newTracingCfg(cfg)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("new opentelemetry cfg: %w", err)
|
|
}
|
|
|
|
if cfg.Azure == nil {
|
|
cfg.Azure = &azsettings.AzureSettings{}
|
|
}
|
|
|
|
return &PluginInstanceCfg{
|
|
GrafanaAppURL: cfg.AppURL,
|
|
Features: features,
|
|
Tracing: tracingCfg,
|
|
PluginSettings: extractPluginSettings(settingProvider),
|
|
AWSAllowedAuthProviders: allowedAuth,
|
|
AWSAssumeRoleEnabled: aws.KeyValue("assume_role_enabled").MustBool(cfg.AWSAssumeRoleEnabled),
|
|
AWSExternalId: aws.KeyValue("external_id").Value(),
|
|
AWSSessionDuration: aws.KeyValue("session_duration").Value(),
|
|
AWSListMetricsPageLimit: aws.KeyValue("list_metrics_page_limit").Value(),
|
|
AWSForwardSettingsPlugins: awsForwardSettingsPlugins,
|
|
Azure: cfg.Azure,
|
|
AzureAuthEnabled: cfg.Azure.AzureAuthEnabled,
|
|
ProxySettings: cfg.SecureSocksDSProxy,
|
|
GrafanaVersion: cfg.BuildVersion,
|
|
ConcurrentQueryCount: cfg.ConcurrentQueryCount,
|
|
UserFacingDefaultError: cfg.UserFacingDefaultError,
|
|
DataProxyRowLimit: cfg.DataProxyRowLimit,
|
|
SQLDatasourceMaxOpenConnsDefault: cfg.SqlDatasourceMaxOpenConnsDefault,
|
|
SQLDatasourceMaxIdleConnsDefault: cfg.SqlDatasourceMaxIdleConnsDefault,
|
|
SQLDatasourceMaxConnLifetimeDefault: cfg.SqlDatasourceMaxConnLifetimeDefault,
|
|
ResponseLimit: cfg.ResponseLimit,
|
|
SigV4AuthEnabled: cfg.SigV4AuthEnabled,
|
|
SigV4VerboseLogging: cfg.SigV4VerboseLogging,
|
|
}, nil
|
|
}
|
|
|
|
func extractPluginSettings(settingProvider setting.Provider) setting.PluginSettings {
|
|
ps := setting.PluginSettings{}
|
|
for sectionName, sectionCopy := range settingProvider.Current() {
|
|
if !strings.HasPrefix(sectionName, "plugin.") {
|
|
continue
|
|
}
|
|
// Calling Current() returns a redacted version of section. We need to replace the map values with the unredacted values.
|
|
section := settingProvider.Section(sectionName)
|
|
for k := range sectionCopy {
|
|
sectionCopy[k] = section.KeyValue(k).MustString("")
|
|
}
|
|
pluginID := strings.Replace(sectionName, "plugin.", "", 1)
|
|
ps[pluginID] = sectionCopy
|
|
}
|
|
|
|
return ps
|
|
}
|