-
Notifications
You must be signed in to change notification settings - Fork 57
/
manager.go
91 lines (80 loc) · 2.78 KB
/
manager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package automanagement
import (
"context"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
// Manager is a helper to simplify instance management for plugin
// developers. It gets instancemgmt.InstanceManager on every call thus making
// sure datasource instance disposed on configuration change and new datasource
// instance created.
type Manager struct {
instancemgmt.InstanceManager
}
// NewManager creates Manager. It accepts datasource
// instance factory.
func NewManager(instanceManager instancemgmt.InstanceManager) *Manager {
return &Manager{InstanceManager: instanceManager}
}
func (m *Manager) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
h, err := m.Get(req.PluginContext)
if err != nil {
return nil, err
}
if ds, ok := h.(backend.QueryDataHandler); ok {
return ds.QueryData(ctx, req)
}
return nil, status.Error(codes.Unimplemented, "unimplemented")
}
func (m *Manager) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) {
h, err := m.Get(req.PluginContext)
if err != nil {
return nil, err
}
if ds, ok := h.(backend.CheckHealthHandler); ok {
return ds.CheckHealth(ctx, req)
}
return nil, status.Error(codes.Unimplemented, "unimplemented")
}
func (m *Manager) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
h, err := m.Get(req.PluginContext)
if err != nil {
return err
}
if ds, ok := h.(backend.CallResourceHandler); ok {
return ds.CallResource(ctx, req, sender)
}
return status.Error(codes.Unimplemented, "unimplemented")
}
func (m *Manager) SubscribeStream(ctx context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) {
h, err := m.Get(req.PluginContext)
if err != nil {
return nil, err
}
if ds, ok := h.(backend.StreamHandler); ok {
return ds.SubscribeStream(ctx, req)
}
return nil, status.Error(codes.Unimplemented, "unimplemented")
}
func (m *Manager) PublishStream(ctx context.Context, req *backend.PublishStreamRequest) (*backend.PublishStreamResponse, error) {
h, err := m.Get(req.PluginContext)
if err != nil {
return nil, err
}
if ds, ok := h.(backend.StreamHandler); ok {
return ds.PublishStream(ctx, req)
}
return nil, status.Error(codes.Unimplemented, "unimplemented")
}
func (m *Manager) RunStream(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender) error {
h, err := m.Get(req.PluginContext)
if err != nil {
return err
}
if ds, ok := h.(backend.StreamHandler); ok {
return ds.RunStream(ctx, req, sender)
}
return status.Error(codes.Unimplemented, "unimplemented")
}