mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 05:43:00 +08:00
Introduce TSDB service (#31520)
* Introduce TSDB service Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> Co-authored-by: Erik Sundell <erik.sundell87@gmail.com> Co-authored-by: Will Browne <will.browne@grafana.com> Co-authored-by: Torkel Ödegaard <torkel@grafana.org> Co-authored-by: Will Browne <wbrowne@users.noreply.github.com> Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
This commit is contained in:
@ -3,55 +3,16 @@ package plugins
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"github.com/grafana/grafana/pkg/plugins/backendplugin"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
)
|
||||
|
||||
var (
|
||||
const (
|
||||
PluginTypeApp = "app"
|
||||
PluginTypeDashboard = "dashboard"
|
||||
)
|
||||
|
||||
type PluginState string
|
||||
|
||||
var (
|
||||
PluginStateAlpha PluginState = "alpha"
|
||||
)
|
||||
|
||||
type PluginSignatureState struct {
|
||||
Status PluginSignatureStatus
|
||||
Type PluginSignatureType
|
||||
SigningOrg string
|
||||
}
|
||||
|
||||
type PluginSignatureStatus string
|
||||
|
||||
func (pss PluginSignatureStatus) IsValid() bool {
|
||||
return pss == pluginSignatureValid
|
||||
}
|
||||
|
||||
func (pss PluginSignatureStatus) IsInternal() bool {
|
||||
return pss == pluginSignatureInternal
|
||||
}
|
||||
|
||||
const (
|
||||
pluginSignatureInternal PluginSignatureStatus = "internal" // core plugin, no signature
|
||||
pluginSignatureValid PluginSignatureStatus = "valid" // signed and accurate MANIFEST
|
||||
pluginSignatureInvalid PluginSignatureStatus = "invalid" // invalid signature
|
||||
pluginSignatureModified PluginSignatureStatus = "modified" // valid signature, but content mismatch
|
||||
pluginSignatureUnsigned PluginSignatureStatus = "unsigned" // no MANIFEST file
|
||||
)
|
||||
|
||||
type PluginSignatureType string
|
||||
|
||||
const (
|
||||
grafanaType PluginSignatureType = "grafana"
|
||||
privateType PluginSignatureType = "private"
|
||||
)
|
||||
|
||||
type PluginNotFoundError struct {
|
||||
PluginID string
|
||||
}
|
||||
@ -60,25 +21,25 @@ func (e PluginNotFoundError) Error() string {
|
||||
return fmt.Sprintf("plugin with ID %q not found", e.PluginID)
|
||||
}
|
||||
|
||||
type duplicatePluginError struct {
|
||||
type DuplicatePluginError struct {
|
||||
Plugin *PluginBase
|
||||
ExistingPlugin *PluginBase
|
||||
}
|
||||
|
||||
func (e duplicatePluginError) Error() string {
|
||||
func (e DuplicatePluginError) Error() string {
|
||||
return fmt.Sprintf("plugin with ID %q already loaded from %q", e.Plugin.Id, e.ExistingPlugin.PluginDir)
|
||||
}
|
||||
|
||||
func (e duplicatePluginError) Is(err error) bool {
|
||||
func (e DuplicatePluginError) Is(err error) bool {
|
||||
// nolint:errorlint
|
||||
_, ok := err.(duplicatePluginError)
|
||||
_, ok := err.(DuplicatePluginError)
|
||||
return ok
|
||||
}
|
||||
|
||||
// PluginLoader can load a plugin.
|
||||
type PluginLoader interface {
|
||||
// Load loads a plugin and registers it with the manager.
|
||||
Load(decoder *json.Decoder, base *PluginBase, backendPluginManager backendplugin.Manager) error
|
||||
// Load loads a plugin and returns it.
|
||||
Load(decoder *json.Decoder, base *PluginBase, backendPluginManager backendplugin.Manager) (interface{}, error)
|
||||
}
|
||||
|
||||
// PluginBase is the base plugin type.
|
||||
@ -112,39 +73,6 @@ type PluginBase struct {
|
||||
Root *PluginBase
|
||||
}
|
||||
|
||||
func (pb *PluginBase) registerPlugin(base *PluginBase) error {
|
||||
if p, exists := Plugins[pb.Id]; exists {
|
||||
return duplicatePluginError{Plugin: pb, ExistingPlugin: p}
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(base.PluginDir, setting.StaticRootPath) {
|
||||
plog.Info("Registering plugin", "id", pb.Id)
|
||||
}
|
||||
|
||||
if len(pb.Dependencies.Plugins) == 0 {
|
||||
pb.Dependencies.Plugins = []PluginDependencyItem{}
|
||||
}
|
||||
|
||||
if pb.Dependencies.GrafanaVersion == "" {
|
||||
pb.Dependencies.GrafanaVersion = "*"
|
||||
}
|
||||
|
||||
for _, include := range pb.Includes {
|
||||
if include.Role == "" {
|
||||
include.Role = models.ROLE_VIEWER
|
||||
}
|
||||
}
|
||||
|
||||
// Copy relevant fields from the base
|
||||
pb.PluginDir = base.PluginDir
|
||||
pb.Signature = base.Signature
|
||||
pb.SignatureType = base.SignatureType
|
||||
pb.SignatureOrg = base.SignatureOrg
|
||||
|
||||
Plugins[pb.Id] = pb
|
||||
return nil
|
||||
}
|
||||
|
||||
type PluginDependencies struct {
|
||||
GrafanaVersion string `json:"grafanaVersion"`
|
||||
Plugins []PluginDependencyItem `json:"plugins"`
|
||||
@ -214,11 +142,3 @@ type EnabledPlugins struct {
|
||||
DataSources map[string]*DataSourcePlugin
|
||||
Apps []*AppPlugin
|
||||
}
|
||||
|
||||
func NewEnabledPlugins() EnabledPlugins {
|
||||
return EnabledPlugins{
|
||||
Panels: make([]*PanelPlugin, 0),
|
||||
DataSources: make(map[string]*DataSourcePlugin),
|
||||
Apps: make([]*AppPlugin, 0),
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user