datasources

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: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ScopeRoot   = "datasources"
	ScopePrefix = ScopeRoot + ":uid:"

	ActionRead             = "datasources:read"
	ActionQuery            = "datasources:query"
	ActionCreate           = "datasources:create"
	ActionWrite            = "datasources:write"
	ActionDelete           = "datasources:delete"
	ActionIDRead           = "datasources.id:read"
	ActionPermissionsRead  = "datasources.permissions:read"
	ActionPermissionsWrite = "datasources.permissions:write"
)
View Source
const (
	DS_GRAPHITE       = "graphite"
	DS_INFLUXDB       = "influxdb"
	DS_INFLUXDB_08    = "influxdb_08"
	DS_ES             = "elasticsearch"
	DS_PROMETHEUS     = "prometheus"
	DS_ALERTMANAGER   = "alertmanager"
	DS_JAEGER         = "jaeger"
	DS_LOKI           = "loki"
	DS_OPENTSDB       = "opentsdb"
	DS_TEMPO          = "tempo"
	DS_ZIPKIN         = "zipkin"
	DS_MYSQL          = "mysql"
	DS_POSTGRES       = "grafana-postgresql-datasource"
	DS_MSSQL          = "mssql"
	DS_ACCESS_DIRECT  = "direct"
	DS_ACCESS_PROXY   = "proxy"
	DS_ES_OPEN_DISTRO = "grafana-es-open-distro-datasource"
	DS_ES_OPENSEARCH  = "grafana-opensearch-datasource"
	DS_AZURE_MONITOR  = "grafana-azure-monitor-datasource"
	DS_TESTDATA       = "grafana-testdata-datasource"
	// CustomHeaderName is the prefix that is used to store the name of a custom header.
	CustomHeaderName = "httpHeaderName"
	// CustomHeaderValue is the prefix that is used to store the value of a custom header.
	CustomHeaderValue = "httpHeaderValue"
)
View Source
const (
	QuotaTargetSrv quota.TargetSrv = "data_source"
	QuotaTarget    quota.Target    = "data_source"
)

Variables

View Source
var (
	ScopeID       = accesscontrol.Scope("datasources", "id", accesscontrol.Parameter(":datasourceId"))
	ScopeAll      = accesscontrol.GetResourceAllScope(ScopeRoot)
	ScopeProvider = accesscontrol.NewScopeProvider(ScopeRoot)
)
View Source
var (
	// ConfigurationPageAccess is used to protect the "Configure > Data sources" tab access
	ConfigurationPageAccess = accesscontrol.EvalAny(
		accesscontrol.EvalPermission(accesscontrol.ActionDatasourcesExplore),
		accesscontrol.EvalPermission(ActionCreate),
		accesscontrol.EvalAll(
			accesscontrol.EvalPermission(ActionRead),
			accesscontrol.EvalAny(
				accesscontrol.EvalPermission(ActionDelete),
				accesscontrol.EvalPermission(ActionWrite),
			),
		),
	)

	// NewPageAccess is used to protect the "Configure > Data sources > New" page access
	NewPageAccess = accesscontrol.EvalAll(
		accesscontrol.EvalPermission(ActionRead),
		accesscontrol.EvalPermission(ActionCreate),
	)

	// EditPageAccess is used to protect the "Configure > Data sources > Edit" page access
	EditPageAccess = accesscontrol.EvalAll(
		accesscontrol.EvalPermission(ActionRead),
		accesscontrol.EvalPermission(ActionWrite),
	)
)
View Source
var (
	ErrDataSourceNotFound                = errors.New("data source not found")
	ErrDataSourceNameExists              = errors.New("data source with the same name already exists")
	ErrDataSourceUidExists               = errors.New("data source with the same uid already exists")
	ErrDataSourceUpdatingOldVersion      = errors.New("trying to update old version of datasource")
	ErrDataSourceAccessDenied            = errors.New("data source access denied")
	ErrDataSourceFailedGenerateUniqueUid = errors.New("failed to generate unique datasource ID")
	ErrDataSourceIdentifierNotSet        = errors.New("unique identifier and org id are needed to be able to get or delete a datasource")
	ErrDatasourceIsReadOnly              = errors.New("data source is readonly, can only be updated from configuration")
	ErrDataSourceNameInvalid             = errutil.ValidationFailed("datasource.nameInvalid", errutil.WithPublicMessage("Invalid datasource name."))
	ErrDataSourceURLInvalid              = errutil.ValidationFailed("datasource.urlInvalid", errutil.WithPublicMessage("Invalid datasource url."))
	ErrDataSourceAPIVersionInvalid       = errutil.ValidationFailed("datasource.apiVersionInvalid", errutil.WithPublicMessage("Invalid datasource apiVersion."))
)

Functions

This section is empty.

Types

type AddDataSourceCommand

type AddDataSourceCommand struct {
	Name            string            `json:"name"`
	Type            string            `json:"type" binding:"Required"`
	Access          DsAccess          `json:"access" binding:"Required"`
	URL             string            `json:"url"`
	Database        string            `json:"database"`
	User            string            `json:"user"`
	BasicAuth       bool              `json:"basicAuth"`
	BasicAuthUser   string            `json:"basicAuthUser"`
	WithCredentials bool              `json:"withCredentials"`
	IsDefault       bool              `json:"isDefault"`
	JsonData        *simplejson.Json  `json:"jsonData"`
	SecureJsonData  map[string]string `json:"secureJsonData"`
	UID             string            `json:"uid"`
	// swagger:ignore
	APIVersion string `json:"apiVersion"`
	// swagger:ignore
	IsPrunable bool

	OrgID                   int64             `json:"-"`
	UserID                  int64             `json:"-"`
	ReadOnly                bool              `json:"-"`
	EncryptedSecureJsonData map[string][]byte `json:"-"`
	UpdateSecretFn          UpdateSecretFn    `json:"-"`
}

Also acts as api DTO

type CacheService

type CacheService interface {
	// GetDatasource gets a datasource identified by datasource numeric identifier.
	GetDatasource(ctx context.Context, datasourceID int64, user identity.Requester, skipCache bool) (*DataSource, error)

	// GetDatasourceByUID gets a datasource identified by datasource unique identifier (UID).
	GetDatasourceByUID(ctx context.Context, datasourceUID string, user identity.Requester, skipCache bool) (*DataSource, error)
}

CacheService interface for retrieving a cached datasource.

type DataSource

type DataSource struct {
	ID      int64 `json:"id,omitempty" xorm:"pk autoincr 'id'"`
	OrgID   int64 `json:"orgId,omitempty" xorm:"org_id"`
	Version int   `json:"version,omitempty"`

	Name   string   `json:"name"`
	Type   string   `json:"type"`
	Access DsAccess `json:"access"`
	URL    string   `json:"url" xorm:"url"`
	// swagger:ignore
	Password      string `json:"-"`
	User          string `json:"user"`
	Database      string `json:"database"`
	BasicAuth     bool   `json:"basicAuth"`
	BasicAuthUser string `json:"basicAuthUser"`
	// swagger:ignore
	BasicAuthPassword string            `json:"-"`
	WithCredentials   bool              `json:"withCredentials"`
	IsDefault         bool              `json:"isDefault"`
	JsonData          *simplejson.Json  `json:"jsonData"`
	SecureJsonData    map[string][]byte `json:"secureJsonData"`
	ReadOnly          bool              `json:"readOnly"`
	UID               string            `json:"uid" xorm:"uid"`
	// swagger:ignore
	APIVersion string `json:"apiVersion" xorm:"api_version"`
	// swagger:ignore
	IsPrunable bool `xorm:"is_prunable"`

	Created time.Time `json:"created,omitempty"`
	Updated time.Time `json:"updated,omitempty"`
}

func (DataSource) AllowedCookies

func (ds DataSource) AllowedCookies() []string

AllowedCookies parses the jsondata.keepCookies and returns a list of allowed cookies, otherwise an empty list.

func (DataSource) TeamHTTPHeaders

func (ds DataSource) TeamHTTPHeaders() (*TeamHTTPHeaders, error)

type DataSourceService

type DataSourceService interface {
	// GetDataSource gets a datasource.
	GetDataSource(ctx context.Context, query *GetDataSourceQuery) (*DataSource, error)

	// GetDataSources gets datasources.
	GetDataSources(ctx context.Context, query *GetDataSourcesQuery) ([]*DataSource, error)

	// GetAllDataSources gets all datasources.
	GetAllDataSources(ctx context.Context, query *GetAllDataSourcesQuery) (res []*DataSource, err error)

	// GetPrunableProvisionedDataSources gets all provisioned data sources that can be pruned.
	GetPrunableProvisionedDataSources(ctx context.Context) (res []*DataSource, err error)

	// GetDataSourcesByType gets datasources by type.
	GetDataSourcesByType(ctx context.Context, query *GetDataSourcesByTypeQuery) ([]*DataSource, error)

	// AddDataSource adds a new datasource.
	AddDataSource(ctx context.Context, cmd *AddDataSourceCommand) (*DataSource, error)

	// DeleteDataSource deletes an existing datasource.
	DeleteDataSource(ctx context.Context, cmd *DeleteDataSourceCommand) error

	// UpdateDataSource updates an existing datasource.
	UpdateDataSource(ctx context.Context, cmd *UpdateDataSourceCommand) (*DataSource, error)

	// GetHTTPTransport gets a datasource specific HTTP transport.
	GetHTTPTransport(ctx context.Context, ds *DataSource, provider httpclient.Provider, customMiddlewares ...sdkhttpclient.Middleware) (http.RoundTripper, error)

	// DecryptedValues decrypts the encrypted secureJSONData of the provided datasource and
	// returns the decrypted values.
	DecryptedValues(ctx context.Context, ds *DataSource) (map[string]string, error)

	// DecryptedValue decrypts the encrypted datasource secureJSONData identified by key
	// and returns the decrypted value.
	DecryptedValue(ctx context.Context, ds *DataSource, key string) (string, bool, error)

	// DecryptedBasicAuthPassword decrypts the encrypted datasource basic authentication
	// password and returns the decrypted value.
	DecryptedBasicAuthPassword(ctx context.Context, ds *DataSource) (string, error)

	// DecryptedPassword decrypts the encrypted datasource password and returns the
	// decrypted value.
	DecryptedPassword(ctx context.Context, ds *DataSource) (string, error)

	// CustomHeaders returns a map of custom headers the user might have
	// configured for this Datasource. Not every datasource can has the option
	// to configure those.
	CustomHeaders(ctx context.Context, ds *DataSource) (http.Header, error)
}

DataSourceService interface for interacting with datasources.

type DatasourcesPermissionFilterQuery

type DatasourcesPermissionFilterQuery struct {
	User        *user.SignedInUser
	Datasources []*DataSource
}

type DeleteDataSourceCommand

type DeleteDataSourceCommand struct {
	ID   int64
	UID  string
	Name string

	OrgID int64

	DeletedDatasourcesCount int64

	UpdateSecretFn UpdateSecretFn

	// Optional way to skip publishing delete event for data sources that are
	// deleted just to be re-created with the same UID during provisioning.
	// In such case we don't want to publish the event that triggers clean-up
	// of related resources (like correlations)
	SkipPublish bool
}

DeleteDataSourceCommand will delete a DataSource based on OrgID as well as the UID (preferred), ID, or Name. At least one of the UID, ID, or Name properties must be set in addition to OrgID.

type DsAccess

type DsAccess string

type ErrDatasourceSecretsPluginUserFriendly

type ErrDatasourceSecretsPluginUserFriendly struct {
	Err string
}

Specific error type for grpc secrets management so that we can show more detailed plugin errors to users

func (ErrDatasourceSecretsPluginUserFriendly) Error

type GetAllDataSourcesQuery

type GetAllDataSourcesQuery struct{}

type GetDataSourceQuery

type GetDataSourceQuery struct {
	ID   int64
	UID  string
	Name string

	OrgID int64
}

GetDataSourceQuery will get a DataSource based on OrgID as well as the UID (preferred), ID, or Name. At least one of the UID, ID, or Name properties must be set in addition to OrgID.

type GetDataSourcesByTypeQuery

type GetDataSourcesByTypeQuery struct {
	OrgID    int64 // optional: filter by org_id
	Type     string
	AliasIDs []string
}

type GetDataSourcesQuery

type GetDataSourcesQuery struct {
	OrgID           int64
	DataSourceLimit int
	User            *user.SignedInUser
}

type TeamHTTPHeader

type TeamHTTPHeader struct {
	Header string `json:"header"`
	Value  string `json:"value"`
}

type TeamHTTPHeaders

type TeamHTTPHeaders struct {
	Headers        TeamHeaders `json:"headers"`
	RestrictAccess bool        `json:"restrictAccess"`
}

func GetTeamHTTPHeaders

func GetTeamHTTPHeaders(jsonData *simplejson.Json) (*TeamHTTPHeaders, error)

type TeamHTTPHeadersJSONData

type TeamHTTPHeadersJSONData struct {
	TeamHTTPHeaders TeamHTTPHeaders `json:"teamHttpHeaders"`
}

type TeamHeaders

type TeamHeaders map[string][]TeamHTTPHeader

type UpdateDataSourceCommand

type UpdateDataSourceCommand struct {
	Name            string            `json:"name" binding:"Required"`
	Type            string            `json:"type" binding:"Required"`
	Access          DsAccess          `json:"access" binding:"Required"`
	URL             string            `json:"url"`
	User            string            `json:"user"`
	Database        string            `json:"database"`
	BasicAuth       bool              `json:"basicAuth"`
	BasicAuthUser   string            `json:"basicAuthUser"`
	WithCredentials bool              `json:"withCredentials"`
	IsDefault       bool              `json:"isDefault"`
	JsonData        *simplejson.Json  `json:"jsonData"`
	SecureJsonData  map[string]string `json:"secureJsonData"`
	Version         int               `json:"version"`
	UID             string            `json:"uid"`
	// swagger:ignore
	APIVersion string `json:"apiVersion"`
	// swagger:ignore
	IsPrunable bool

	OrgID                   int64             `json:"-"`
	ID                      int64             `json:"-"`
	ReadOnly                bool              `json:"-"`
	EncryptedSecureJsonData map[string][]byte `json:"-"`
	UpdateSecretFn          UpdateSecretFn    `json:"-"`
	IgnoreOldSecureJsonData bool              `json:"-"`
}

Also acts as api DTO

type UpdateSecretFn

type UpdateSecretFn func() error

Function for updating secrets along with datasources, to ensure atomicity

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL