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/services/pluginsintegration/pluginerrs/errors.go

82 lines
1.7 KiB

package pluginerrs
import (
"context"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/plugins/log"
)
var _ plugins.ErrorResolver = (*Store)(nil)
type Store struct {
errs ErrorTracker
}
func ProvideStore(errs ErrorTracker) *Store {
return &Store{
errs: errs,
}
}
func (s *Store) PluginErrors(ctx context.Context) []*plugins.Error {
errs := s.errs.Errors(ctx)
for _, err := range errs {
err.ErrorCode = err.AsErrorCode()
}
return errs
}
func (s *Store) PluginError(ctx context.Context, pluginID string) *plugins.Error {
err := s.errs.Error(ctx, pluginID)
if err == nil {
return nil
}
err.ErrorCode = err.AsErrorCode()
return err
}
type ErrorRegistry struct {
errs map[string]*plugins.Error
log log.Logger
}
type ErrorTracker interface {
Record(ctx context.Context, err *plugins.Error)
Clear(ctx context.Context, pluginID string)
Errors(ctx context.Context) []*plugins.Error
Error(ctx context.Context, pluginID string) *plugins.Error
}
func ProvideErrorTracker() *ErrorRegistry {
return newErrorRegistry()
}
func newErrorRegistry() *ErrorRegistry {
return &ErrorRegistry{
errs: make(map[string]*plugins.Error),
log: log.New("plugins.errors"),
}
}
func (r *ErrorRegistry) Record(_ context.Context, err *plugins.Error) {
r.errs[err.PluginID] = err
}
func (r *ErrorRegistry) Clear(_ context.Context, pluginID string) {
delete(r.errs, pluginID)
}
func (r *ErrorRegistry) Errors(_ context.Context) []*plugins.Error {
errs := make([]*plugins.Error, 0, len(r.errs))
for _, err := range r.errs {
errs = append(errs, err)
}
return errs
}
func (r *ErrorRegistry) Error(_ context.Context, pluginID string) *plugins.Error {
return r.errs[pluginID]
}