Files
grafana/pkg/tsdb/tempo/stream_handler.go
T
Gareth f1f0b8116d Tempo: Add error source (#112358)
* Tempo: Add error source to query data

* use downstreamerrorf

* update

* streaming error source

* fix
2025-10-15 18:46:59 +08:00

67 lines
2.0 KiB
Go

package tempo
import (
"context"
"fmt"
"strings"
"github.com/grafana/grafana-plugin-sdk-go/backend"
)
func (s *Service) SubscribeStream(_ context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) {
s.logger.Debug("Allowing access to stream", "path", req.Path, "user", req.PluginContext.User)
if strings.HasPrefix(req.Path, SearchPathPrefix) {
return &backend.SubscribeStreamResponse{
Status: backend.SubscribeStreamStatusOK,
}, nil
}
if strings.HasPrefix(req.Path, MetricsPathPrefix) {
return &backend.SubscribeStreamResponse{
Status: backend.SubscribeStreamStatusOK,
}, nil
}
return &backend.SubscribeStreamResponse{
Status: backend.SubscribeStreamStatusPermissionDenied,
}, backend.DownstreamErrorf("stream path not supported: %s", req.Path)
}
func (s *Service) PublishStream(_ context.Context, _ *backend.PublishStreamRequest) (*backend.PublishStreamResponse, error) {
s.logger.Debug("PublishStream called")
// Do not allow publishing at all.
return &backend.PublishStreamResponse{
Status: backend.PublishStreamStatusPermissionDenied,
}, nil
}
func (s *Service) RunStream(ctx context.Context, request *backend.RunStreamRequest, sender *backend.StreamSender) error {
s.logger.Debug("New stream call", "path", request.Path)
tempoDatasource, err := s.getDSInfo(ctx, request.PluginContext)
if strings.HasPrefix(request.Path, SearchPathPrefix) {
if err != nil {
return backend.DownstreamErrorf("failed to get datasource information: %w", err)
}
if err = s.runSearchStream(ctx, request, sender, tempoDatasource); err != nil {
return sendError(err, sender)
} else {
return nil
}
}
if strings.HasPrefix(request.Path, MetricsPathPrefix) {
if err != nil {
return backend.DownstreamErrorf("failed to get datasource information: %w", err)
}
if err = s.runMetricsStream(ctx, request, sender, tempoDatasource); err != nil {
return sendError(err, sender)
} else {
return nil
}
}
return fmt.Errorf("unknown path %s", request.Path)
}