The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/plugins/ifaces.go

168 lines
4.0 KiB

package plugins
import (
"context"
"io/fs"
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana/pkg/plugins/backendplugin"
)
type Installer interface {
// Add adds a new plugin.
Add(ctx context.Context, pluginID, version string, opts CompatOpts) error
// Remove removes an existing plugin.
Remove(ctx context.Context, pluginID, version string) error
}
type PluginSource interface {
PluginClass(ctx context.Context) Class
PluginURIs(ctx context.Context) []string
DefaultSignature(ctx context.Context) (Signature, bool)
}
type FileStore interface {
// File retrieves a plugin file.
File(ctx context.Context, pluginID, pluginVersion, filename string) (*File, error)
}
type File struct {
Content []byte
ModTime time.Time
}
type CompatOpts struct {
grafanaVersion string
os string
arch string
}
func (co CompatOpts) GrafanaVersion() string {
return co.grafanaVersion
}
func (co CompatOpts) OS() string {
return co.os
}
func (co CompatOpts) Arch() string {
return co.arch
}
func NewCompatOpts(grafanaVersion, os, arch string) CompatOpts {
return CompatOpts{grafanaVersion: grafanaVersion, arch: arch, os: os}
}
func NewSystemCompatOpts(os, arch string) CompatOpts {
return CompatOpts{arch: arch, os: os}
}
type UpdateInfo struct {
PluginZipURL string
}
type FS interface {
fs.FS
Base() string
Files() ([]string, error)
}
type FSRemover interface {
Remove() error
}
type FoundBundle struct {
Primary FoundPlugin
Children []*FoundPlugin
}
type FoundPlugin struct {
JSONData JSONData
FS FS
}
// Client is used to communicate with backend plugin implementations.
type Client interface {
backend.QueryDataHandler
backend.CheckHealthHandler
backend.StreamHandler
backend.CallResourceHandler
backend.CollectMetricsHandler
}
// BackendFactoryProvider provides a backend factory for a provided plugin.
type BackendFactoryProvider interface {
BackendFactory(ctx context.Context, p *Plugin) backendplugin.PluginFactoryFunc
}
type SecretsPluginManager interface {
// SecretsManager returns a secretsmanager plugin
SecretsManager(ctx context.Context) *Plugin
}
type StaticRouteResolver interface {
Routes(ctx context.Context) []*StaticRoute
}
type ErrorResolver interface {
PluginErrors(ctx context.Context) []*Error
PluginError(ctx context.Context, pluginID string) *Error
}
type PluginLoaderAuthorizer interface {
// CanLoadPlugin confirms if a plugin is authorized to load
CanLoadPlugin(plugin *Plugin) bool
}
type Licensing interface {
Environment() []string
Edition() string
Path() string
AppURL() string
}
// RoleRegistry handles the plugin RBAC roles and their assignments
type RoleRegistry interface {
DeclarePluginRoles(ctx context.Context, ID, name string, registrations []RoleRegistration) error
}
// ClientMiddleware is an interface representing the ability to create a middleware
// that implements the Client interface.
type ClientMiddleware interface {
// CreateClientMiddleware creates a new client middleware.
CreateClientMiddleware(next Client) Client
}
// The ClientMiddlewareFunc type is an adapter to allow the use of ordinary
// functions as ClientMiddleware's. If f is a function with the appropriate
// signature, ClientMiddlewareFunc(f) is a ClientMiddleware that calls f.
type ClientMiddlewareFunc func(next Client) Client
// CreateClientMiddleware implements the ClientMiddleware interface.
func (fn ClientMiddlewareFunc) CreateClientMiddleware(next Client) Client {
return fn(next)
}
type SignatureCalculator interface {
Calculate(ctx context.Context, src PluginSource, plugin FoundPlugin) (Signature, error)
}
type KeyStore interface {
Get(ctx context.Context, key string) (string, bool, error)
Set(ctx context.Context, key string, value any) error
Delete(ctx context.Context, key string) error
ListKeys(ctx context.Context) ([]string, error)
GetLastUpdated(ctx context.Context) (time.Time, error)
SetLastUpdated(ctx context.Context) error
}
type KeyRetriever interface {
GetPublicKey(ctx context.Context, keyID string) (string, error)
}