54 lines
1.6 KiB
Go
54 lines
1.6 KiB
Go
package meta
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/plugins"
|
|
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore"
|
|
)
|
|
|
|
const (
|
|
defaultLocalTTL = 1 * time.Hour
|
|
)
|
|
|
|
// PluginAssetsCalculator is an interface for calculating plugin asset information.
|
|
// LocalProvider requires this to calculate loading strategy and module hash.
|
|
type PluginAssetsCalculator interface {
|
|
LoadingStrategy(ctx context.Context, p pluginstore.Plugin) plugins.LoadingStrategy
|
|
ModuleHash(ctx context.Context, p pluginstore.Plugin) string
|
|
}
|
|
|
|
// LocalProvider retrieves plugin metadata for locally installed plugins.
|
|
// It uses the plugin store to access plugins that have already been loaded.
|
|
type LocalProvider struct {
|
|
store pluginstore.Store
|
|
pluginAssets PluginAssetsCalculator
|
|
}
|
|
|
|
// NewLocalProvider creates a new LocalProvider for locally installed plugins.
|
|
// pluginAssets is required for calculating loading strategy and module hash.
|
|
func NewLocalProvider(pluginStore pluginstore.Store, pluginAssets PluginAssetsCalculator) *LocalProvider {
|
|
return &LocalProvider{
|
|
store: pluginStore,
|
|
pluginAssets: pluginAssets,
|
|
}
|
|
}
|
|
|
|
// GetMeta retrieves plugin metadata for locally installed plugins.
|
|
func (p *LocalProvider) GetMeta(ctx context.Context, pluginID, version string) (*Result, error) {
|
|
plugin, exists := p.store.Plugin(ctx, pluginID)
|
|
if !exists {
|
|
return nil, ErrMetaNotFound
|
|
}
|
|
|
|
loadingStrategy := p.pluginAssets.LoadingStrategy(ctx, plugin)
|
|
moduleHash := p.pluginAssets.ModuleHash(ctx, plugin)
|
|
|
|
spec := pluginStorePluginToMeta(plugin, loadingStrategy, moduleHash)
|
|
return &Result{
|
|
Meta: spec,
|
|
TTL: defaultLocalTTL,
|
|
}, nil
|
|
}
|