* add uninstall flow * add install flow * small cleanup * smaller-footprint solution * cleanup + make bp start auto * fix interface contract * improve naming * accept version arg * ensure use of shared logger * make installer a field * add plugin decommissioning * add basic error checking * fix api docs * making initialization idempotent * add mutex * fix comment * fix test * add test for decommission * improve existing test * add more test coverage * more tests * change test func to use read lock * refactoring + adding test asserts * improve purging old install flow * improve dupe checking * change log name * skip over dupe scanned * make test assertion more flexible * remove trailing line * fix pointer receiver name * update comment * add context to API * add config flag * add base http api test + fix update functionality * simplify existing check * clean up test * refactor tests based on feedback * add single quotes to errs * use gcmp in tests + fix logo issue * make plugin list testing more flexible * address feedback * fix API test * fix linter * undo preallocate * Update docs/sources/administration/configuration.md Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com> * Update docs/sources/administration/configuration.md Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com> * Update docs/sources/administration/configuration.md Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com> * fix linting issue in test * add docs placeholder * update install notes * Update docs/sources/plugins/marketplace.md Co-authored-by: Marcus Olsson <marcus.olsson@hey.com> * update access wording * add more placeholder docs * add link to more info * PR feedback - improved errors, refactor, lock fix * improve err details * propagate plugin version errors * don't autostart renderer * add H1 * fix imports Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com> Co-authored-by: Marcus Olsson <marcus.olsson@hey.com>
99 lines
3.7 KiB
Go
99 lines
3.7 KiB
Go
package plugins
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
)
|
|
|
|
// Manager is the plugin manager service interface.
|
|
type Manager interface {
|
|
// Renderer gets the renderer plugin.
|
|
Renderer() *RendererPlugin
|
|
// GetDataSource gets a data source plugin with a certain ID.
|
|
GetDataSource(id string) *DataSourcePlugin
|
|
// GetDataPlugin gets a data plugin with a certain ID.
|
|
GetDataPlugin(id string) DataPlugin
|
|
// GetPlugin gets a plugin with a certain ID.
|
|
GetPlugin(id string) *PluginBase
|
|
// GetApp gets an app plugin with a certain ID.
|
|
GetApp(id string) *AppPlugin
|
|
// DataSourceCount gets the number of data sources.
|
|
DataSourceCount() int
|
|
// DataSources gets all data sources.
|
|
DataSources() []*DataSourcePlugin
|
|
// Apps gets all app plugins.
|
|
Apps() []*AppPlugin
|
|
// PanelCount gets the number of panels.
|
|
PanelCount() int
|
|
// AppCount gets the number of apps.
|
|
AppCount() int
|
|
// GetEnabledPlugins gets enabled plugins.
|
|
// GetEnabledPlugins gets enabled plugins.
|
|
GetEnabledPlugins(orgID int64) (*EnabledPlugins, error)
|
|
// GrafanaLatestVersion gets the latest Grafana version.
|
|
GrafanaLatestVersion() string
|
|
// GrafanaHasUpdate returns whether Grafana has an update.
|
|
GrafanaHasUpdate() bool
|
|
// Plugins gets all plugins.
|
|
Plugins() []*PluginBase
|
|
// StaticRoutes gets all static routes.
|
|
StaticRoutes() []*PluginStaticRoute
|
|
// GetPluginSettings gets settings for a certain plugin.
|
|
GetPluginSettings(orgID int64) (map[string]*models.PluginSettingInfoDTO, error)
|
|
// GetPluginDashboards gets dashboards for a certain org/plugin.
|
|
GetPluginDashboards(orgID int64, pluginID string) ([]*PluginDashboardInfoDTO, error)
|
|
// GetPluginMarkdown gets markdown for a certain plugin/name.
|
|
GetPluginMarkdown(pluginID string, name string) ([]byte, error)
|
|
// ImportDashboard imports a dashboard.
|
|
ImportDashboard(pluginID, path string, orgID, folderID int64, dashboardModel *simplejson.Json,
|
|
overwrite bool, inputs []ImportDashboardInput, user *models.SignedInUser,
|
|
requestHandler DataRequestHandler) (PluginDashboardInfoDTO, error)
|
|
// ScanningErrors returns plugin scanning errors encountered.
|
|
ScanningErrors() []PluginError
|
|
// LoadPluginDashboard loads a plugin dashboard.
|
|
LoadPluginDashboard(pluginID, path string) (*models.Dashboard, error)
|
|
// IsAppInstalled returns whether an app is installed.
|
|
IsAppInstalled(id string) bool
|
|
// Install installs a plugin.
|
|
Install(ctx context.Context, pluginID, version string) error
|
|
// Uninstall uninstalls a plugin.
|
|
Uninstall(ctx context.Context, pluginID string) error
|
|
}
|
|
|
|
type ImportDashboardInput struct {
|
|
Type string `json:"type"`
|
|
PluginId string `json:"pluginId"`
|
|
Name string `json:"name"`
|
|
Value string `json:"value"`
|
|
}
|
|
|
|
// DataRequestHandler is a data request handler interface.
|
|
type DataRequestHandler interface {
|
|
// HandleRequest handles a data request.
|
|
HandleRequest(context.Context, *models.DataSource, DataQuery) (DataResponse, error)
|
|
}
|
|
|
|
type PluginInstaller interface {
|
|
// Install finds the plugin given the provided information
|
|
// and installs in the provided plugins directory.
|
|
Install(ctx context.Context, pluginID, version, pluginsDirectory, pluginZipURL, pluginRepoURL string) error
|
|
// Uninstall removes the specified plugin from the provided plugins directory.
|
|
Uninstall(ctx context.Context, pluginID, pluginPath string) error
|
|
}
|
|
|
|
type PluginInstallerLogger interface {
|
|
Successf(format string, args ...interface{})
|
|
Failuref(format string, args ...interface{})
|
|
|
|
Info(args ...interface{})
|
|
Infof(format string, args ...interface{})
|
|
Debug(args ...interface{})
|
|
Debugf(format string, args ...interface{})
|
|
Warn(args ...interface{})
|
|
Warnf(format string, args ...interface{})
|
|
Error(args ...interface{})
|
|
Errorf(format string, args ...interface{})
|
|
}
|