Documentation ¶
Index ¶
- Constants
- Variables
- type AddDataSourceCommand
- type CacheService
- type DataSource
- type DataSourceService
- type DatasourcesPermissionFilterQuery
- type DeleteDataSourceCommand
- type DsAccess
- type ErrDatasourceSecretsPluginUserFriendly
- type GetAllDataSourcesQuery
- type GetDataSourceQuery
- type GetDataSourcesByTypeQuery
- type GetDataSourcesQuery
- type TeamHTTPHeader
- type TeamHTTPHeaders
- type TeamHTTPHeadersJSONData
- type TeamHeaders
- type UpdateDataSourceCommand
- type UpdateSecretFn
Constants ¶
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" )
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" )
const ( QuotaTargetSrv quota.TargetSrv = "data_source" QuotaTarget quota.Target = "data_source" )
Variables ¶
var ( ScopeID = accesscontrol.Scope("datasources", "id", accesscontrol.Parameter(":datasourceId")) ScopeAll = accesscontrol.GetResourceAllScope(ScopeRoot) ScopeProvider = accesscontrol.NewScopeProvider(ScopeRoot) )
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), ) )
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 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 ¶
func (e ErrDatasourceSecretsPluginUserFriendly) Error() string
type GetAllDataSourcesQuery ¶
type GetAllDataSourcesQuery struct{}
type GetDataSourceQuery ¶
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 GetDataSourcesQuery ¶
type GetDataSourcesQuery struct { OrgID int64 DataSourceLimit int User *user.SignedInUser }
type TeamHTTPHeader ¶
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