mirror of
https://github.com/grafana/grafana.git
synced 2025-02-10 23:55:47 -06:00
* Encryption: Add support to encrypt/decrypt sjd * Add datasources.Service as a proxy to datasources db operations * Encrypt ds.SecureJsonData before calling SQLStore * Move ds cache code into ds service * Fix tlsmanager tests * Fix pluginproxy tests * Remove some securejsondata.GetEncryptedJsonData usages * Add pluginsettings.Service as a proxy for plugin settings db operations * Add AlertNotificationService as a proxy for alert notification db operations * Remove some securejsondata.GetEncryptedJsonData usages * Remove more securejsondata.GetEncryptedJsonData usages * Fix lint errors * Minor fixes * Remove encryption global functions usages from ngalert * Fix lint errors * Minor fixes * Minor fixes * Remove securejsondata.DecryptedValue usage * Refactor the refactor * Remove securejsondata.DecryptedValue usage * Move securejsondata to migrations package * Move securejsondata to migrations package * Minor fix * Fix integration test * Fix integration tests * Undo undesired changes * Fix tests * Add context.Context into encryption methods * Fix tests * Fix tests * Fix tests * Trigger CI * Fix test * Add names to params of encryption service interface * Remove bus from CacheServiceImpl * Add logging * Add keys to logger Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com> * Add missing key to logger Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com> * Undo changes in markdown files * Fix formatting * Add context to secrets service * Rename decryptSecureJsonData to decryptSecureJsonDataFn * Name args in GetDecryptedValueFn * Add template back to NewAlertmanagerNotifier * Copy GetDecryptedValueFn to ngalert * Add logging to pluginsettings * Fix pluginsettings test Co-authored-by: Tania B <yalyna.ts@gmail.com> Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com>
111 lines
3.1 KiB
Go
111 lines
3.1 KiB
Go
package tsdb
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/plugins"
|
|
"github.com/grafana/grafana/pkg/plugins/adapters"
|
|
"github.com/grafana/grafana/pkg/services/datasources"
|
|
"github.com/grafana/grafana/pkg/services/oauthtoken"
|
|
)
|
|
|
|
// nolint:staticcheck // plugins.DataQuery deprecated
|
|
func dataPluginQueryAdapter(pluginID string, handler backend.QueryDataHandler, oAuthService oauthtoken.OAuthTokenService,
|
|
dsService *datasources.Service) plugins.DataPluginFunc {
|
|
return func(ctx context.Context, ds *models.DataSource, query plugins.DataQuery) (plugins.DataResponse, error) {
|
|
jsonDataBytes, err := ds.JsonData.MarshalJSON()
|
|
if err != nil {
|
|
return plugins.DataResponse{}, err
|
|
}
|
|
|
|
instanceSettings := &backend.DataSourceInstanceSettings{
|
|
ID: ds.Id,
|
|
Name: ds.Name,
|
|
URL: ds.Url,
|
|
Database: ds.Database,
|
|
User: ds.User,
|
|
BasicAuthEnabled: ds.BasicAuth,
|
|
BasicAuthUser: ds.BasicAuthUser,
|
|
JSONData: jsonDataBytes,
|
|
DecryptedSecureJSONData: dsService.DecryptedValues(ds),
|
|
Updated: ds.Updated,
|
|
UID: ds.Uid,
|
|
}
|
|
|
|
if query.Headers == nil {
|
|
query.Headers = make(map[string]string)
|
|
}
|
|
|
|
if oAuthService.IsOAuthPassThruEnabled(ds) {
|
|
if token := oAuthService.GetCurrentOAuthToken(ctx, query.User); token != nil {
|
|
delete(query.Headers, "Authorization")
|
|
query.Headers["Authorization"] = fmt.Sprintf("%s %s", token.Type(), token.AccessToken)
|
|
}
|
|
}
|
|
|
|
req := &backend.QueryDataRequest{
|
|
PluginContext: backend.PluginContext{
|
|
OrgID: ds.OrgId,
|
|
PluginID: pluginID,
|
|
User: adapters.BackendUserFromSignedInUser(query.User),
|
|
DataSourceInstanceSettings: instanceSettings,
|
|
},
|
|
Queries: []backend.DataQuery{},
|
|
Headers: query.Headers,
|
|
}
|
|
|
|
for _, q := range query.Queries {
|
|
modelJSON, err := q.Model.MarshalJSON()
|
|
if err != nil {
|
|
return plugins.DataResponse{}, err
|
|
}
|
|
req.Queries = append(req.Queries, backend.DataQuery{
|
|
RefID: q.RefID,
|
|
Interval: time.Duration(q.IntervalMS) * time.Millisecond,
|
|
MaxDataPoints: q.MaxDataPoints,
|
|
TimeRange: backend.TimeRange{
|
|
From: query.TimeRange.GetFromAsTimeUTC(),
|
|
To: query.TimeRange.GetToAsTimeUTC(),
|
|
},
|
|
QueryType: q.QueryType,
|
|
JSON: modelJSON,
|
|
})
|
|
}
|
|
|
|
resp, err := handler.QueryData(ctx, req)
|
|
if err != nil {
|
|
return plugins.DataResponse{}, err
|
|
}
|
|
|
|
tR := plugins.DataResponse{
|
|
Results: make(map[string]plugins.DataQueryResult, len(resp.Responses)),
|
|
}
|
|
|
|
for refID, r := range resp.Responses {
|
|
qr := plugins.DataQueryResult{
|
|
RefID: refID,
|
|
}
|
|
|
|
for _, f := range r.Frames {
|
|
if f.RefID == "" {
|
|
f.RefID = refID
|
|
}
|
|
}
|
|
|
|
qr.Dataframes = plugins.NewDecodedDataFrames(r.Frames)
|
|
|
|
if r.Error != nil {
|
|
qr.Error = r.Error
|
|
}
|
|
|
|
tR.Results[refID] = qr
|
|
}
|
|
|
|
return tR, nil
|
|
}
|
|
}
|