query

package
v11.1.4-modfix Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2024 License: AGPL-3.0 Imports: 47 Imported by: 0

README

Query service

This query service aims to replace the existing /api/ds/query.

The key differences are:

  1. This service has a stronger type system (not simplejson)
  2. Same workflow regardless if expressions exist
  3. Datasource settings+access is managed in each datasource, not at the beginning
Current /api/ds/query workflow
sequenceDiagram
    autonumber
    actor User as User or Process
    participant api as /api/ds/query
    participant db as Storage<br/>(SQL)
    participant ds as Datasource<br/>Plugin
    participant expr as Expression<br/>Engine

    User->>api: POST Query
    loop Each query
        api->>api: Parse query
        api->>db: Get ds config<br>and secrets
        db->>api: 
    end
    alt No expressions
      alt Single datasource
          api->>ds: QueryData
      else Multiple datasources
        loop Each datasource (concurrently)
          api->>ds: QueryData
        end
        api->>api: Wait for results
      end
    else Expressions exist
        api->>expr: Calculate expressions graph
        loop Each node (eg, refID)
          alt Is query
              expr->>ds: QueryData
          else Is expression
            expr->>expr: Process
          end
        end
    end
    api->>User: return results
/apis/query.grafana.app (in single tenant grafana)
sequenceDiagram
    autonumber
    actor User as User or Process
    participant api as /apis/query.grafana.app
    participant ds as Datasource<br/>Handler/Plugin
    participant db as Storage<br/>(SQL)
    participant expr as Expression<br/>Engine

    User->>api: POST Query
    api->>api: Parse queries
    api->>api: Calculate dependencies
    loop Each datasource (concurrently)
        api->>ds: QueryData
        ds->>ds: Verify user access
        ds->>db: Get settings <br> and secrets
    end
    loop Each expression
        api->>expr: Execute
    end
    api->>api: Verify ResultExpectations
    api->>User: return results

Documentation

Index

Constants

This section is empty.

Variables

View Source
var QueryError = errutil.BadRequest("query.error").MustTemplate(
	"failed to execute query [{{ .Public.refId }}]: {{ .Error }}",
	errutil.WithPublic(
		"failed to execute query [{{ .Public.refId }}]: {{ .Public.error }}",
	))

Functions

func MakePublicQueryError

func MakePublicQueryError(refID, err string) error

func MakeQueryError

func MakeQueryError(refID, err error) error

Types

type CommonDataSourceClientSupplier

type CommonDataSourceClientSupplier struct {
	Client data.QueryDataClient
}

func (*CommonDataSourceClientSupplier) GetDataSourceClient

type DataSourceClientSupplier

type DataSourceClientSupplier interface {
	// Get a client for a given datasource
	// NOTE: authorization headers are not yet added and the client may be shared across multiple users
	GetDataSourceClient(ctx context.Context, ref data.DataSourceRef) (data.QueryDataClient, error)
}

The query runner interface

type QueryAPIBuilder

type QueryAPIBuilder struct {
	// contains filtered or unexported fields
}

func RegisterAPIService

func RegisterAPIService(features featuremgmt.FeatureToggles,
	apiregistration builder.APIRegistrar,
	dataSourcesService datasources.DataSourceService,
	pluginStore pluginstore.Store,
	accessControl accesscontrol.AccessControl,
	pluginClient plugins.Client,
	pCtxProvider *plugincontext.Provider,
	registerer prometheus.Registerer,
	tracer tracing.Tracer,
	legacy service.LegacyDataSourceLookup,
) (*QueryAPIBuilder, error)

func (*QueryAPIBuilder) GetAPIGroupInfo

func (*QueryAPIBuilder) GetAPIRoutes

func (b *QueryAPIBuilder) GetAPIRoutes() *builder.APIRoutes

Register additional routes with the server

func (*QueryAPIBuilder) GetAuthorizer

func (b *QueryAPIBuilder) GetAuthorizer() authorizer.Authorizer

func (*QueryAPIBuilder) GetDesiredDualWriterMode

func (b *QueryAPIBuilder) GetDesiredDualWriterMode(dualWrite bool, modeMap map[string]grafanarest.DualWriterMode) grafanarest.DualWriterMode

func (*QueryAPIBuilder) GetGroupVersion

func (b *QueryAPIBuilder) GetGroupVersion() schema.GroupVersion

func (*QueryAPIBuilder) GetOpenAPIDefinitions

func (b *QueryAPIBuilder) GetOpenAPIDefinitions() common.GetOpenAPIDefinitions

func (*QueryAPIBuilder) InstallSchema

func (b *QueryAPIBuilder) InstallSchema(scheme *runtime.Scheme) error

func (*QueryAPIBuilder) PostProcessOpenAPI

func (b *QueryAPIBuilder) PostProcessOpenAPI(oas *spec3.OpenAPI) (*spec3.OpenAPI, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳