mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: Fix issues reported by staticcheck; enable stylecheck linter (#28866)
* Chore: Fix issues reported by staticcheck Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> * Apply suggestions from code review Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com>
This commit is contained in:
parent
135b83e17f
commit
676d393ec9
@ -6,32 +6,32 @@ import (
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
)
|
||||
|
||||
func (server *HTTPServer) AdminProvisioningReloadDashboards(c *models.ReqContext) Response {
|
||||
err := server.ProvisioningService.ProvisionDashboards()
|
||||
func (hs *HTTPServer) AdminProvisioningReloadDashboards(c *models.ReqContext) Response {
|
||||
err := hs.ProvisioningService.ProvisionDashboards()
|
||||
if err != nil && err != context.Canceled {
|
||||
return Error(500, "", err)
|
||||
}
|
||||
return Success("Dashboards config reloaded")
|
||||
}
|
||||
|
||||
func (server *HTTPServer) AdminProvisioningReloadDatasources(c *models.ReqContext) Response {
|
||||
err := server.ProvisioningService.ProvisionDatasources()
|
||||
func (hs *HTTPServer) AdminProvisioningReloadDatasources(c *models.ReqContext) Response {
|
||||
err := hs.ProvisioningService.ProvisionDatasources()
|
||||
if err != nil {
|
||||
return Error(500, "", err)
|
||||
}
|
||||
return Success("Datasources config reloaded")
|
||||
}
|
||||
|
||||
func (server *HTTPServer) AdminProvisioningReloadPlugins(c *models.ReqContext) Response {
|
||||
err := server.ProvisioningService.ProvisionPlugins()
|
||||
func (hs *HTTPServer) AdminProvisioningReloadPlugins(c *models.ReqContext) Response {
|
||||
err := hs.ProvisioningService.ProvisionPlugins()
|
||||
if err != nil {
|
||||
return Error(500, "Failed to reload plugins config", err)
|
||||
}
|
||||
return Success("Plugins config reloaded")
|
||||
}
|
||||
|
||||
func (server *HTTPServer) AdminProvisioningReloadNotifications(c *models.ReqContext) Response {
|
||||
err := server.ProvisioningService.ProvisionNotifications()
|
||||
func (hs *HTTPServer) AdminProvisioningReloadNotifications(c *models.ReqContext) Response {
|
||||
err := hs.ProvisioningService.ProvisionNotifications()
|
||||
if err != nil {
|
||||
return Error(500, "", err)
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ func AdminDeleteUser(c *models.ReqContext) Response {
|
||||
}
|
||||
|
||||
// POST /api/admin/users/:id/disable
|
||||
func (server *HTTPServer) AdminDisableUser(c *models.ReqContext) Response {
|
||||
func (hs *HTTPServer) AdminDisableUser(c *models.ReqContext) Response {
|
||||
userID := c.ParamsInt64(":id")
|
||||
|
||||
// External users shouldn't be disabled from API
|
||||
@ -138,7 +138,7 @@ func (server *HTTPServer) AdminDisableUser(c *models.ReqContext) Response {
|
||||
return Error(500, "Failed to disable user", err)
|
||||
}
|
||||
|
||||
err := server.AuthTokenService.RevokeAllUserTokens(c.Req.Context(), userID)
|
||||
err := hs.AuthTokenService.RevokeAllUserTokens(c.Req.Context(), userID)
|
||||
if err != nil {
|
||||
return Error(500, "Failed to disable user", err)
|
||||
}
|
||||
@ -168,24 +168,24 @@ func AdminEnableUser(c *models.ReqContext) Response {
|
||||
}
|
||||
|
||||
// POST /api/admin/users/:id/logout
|
||||
func (server *HTTPServer) AdminLogoutUser(c *models.ReqContext) Response {
|
||||
func (hs *HTTPServer) AdminLogoutUser(c *models.ReqContext) Response {
|
||||
userID := c.ParamsInt64(":id")
|
||||
|
||||
if c.UserId == userID {
|
||||
return Error(400, "You cannot logout yourself", nil)
|
||||
}
|
||||
|
||||
return server.logoutUserFromAllDevicesInternal(c.Req.Context(), userID)
|
||||
return hs.logoutUserFromAllDevicesInternal(c.Req.Context(), userID)
|
||||
}
|
||||
|
||||
// GET /api/admin/users/:id/auth-tokens
|
||||
func (server *HTTPServer) AdminGetUserAuthTokens(c *models.ReqContext) Response {
|
||||
func (hs *HTTPServer) AdminGetUserAuthTokens(c *models.ReqContext) Response {
|
||||
userID := c.ParamsInt64(":id")
|
||||
return server.getUserAuthTokensInternal(c, userID)
|
||||
return hs.getUserAuthTokensInternal(c, userID)
|
||||
}
|
||||
|
||||
// POST /api/admin/users/:id/revoke-auth-token
|
||||
func (server *HTTPServer) AdminRevokeUserAuthToken(c *models.ReqContext, cmd models.RevokeAuthTokenCmd) Response {
|
||||
func (hs *HTTPServer) AdminRevokeUserAuthToken(c *models.ReqContext, cmd models.RevokeAuthTokenCmd) Response {
|
||||
userID := c.ParamsInt64(":id")
|
||||
return server.revokeUserAuthTokenInternal(c, userID, cmd)
|
||||
return hs.revokeUserAuthTokenInternal(c, userID, cmd)
|
||||
}
|
||||
|
@ -1246,7 +1246,7 @@ func (m mockDashboardProvisioningService) GetProvisionedDashboardData(name strin
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (mock mockDashboardProvisioningService) GetProvisionedDashboardDataByDashboardID(dashboardId int64) (*models.DashboardProvisioning, error) {
|
||||
func (m mockDashboardProvisioningService) GetProvisionedDashboardDataByDashboardID(dashboardId int64) (*models.DashboardProvisioning, error) {
|
||||
return &models.DashboardProvisioning{}, nil
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ func (user *LDAPUserDTO) FetchOrgs() error {
|
||||
}
|
||||
|
||||
// ReloadLDAPCfg reloads the LDAP configuration
|
||||
func (server *HTTPServer) ReloadLDAPCfg() Response {
|
||||
func (hs *HTTPServer) ReloadLDAPCfg() Response {
|
||||
if !ldap.IsEnabled() {
|
||||
return Error(http.StatusBadRequest, "LDAP is not enabled", nil)
|
||||
}
|
||||
@ -110,7 +110,7 @@ func (server *HTTPServer) ReloadLDAPCfg() Response {
|
||||
}
|
||||
|
||||
// GetLDAPStatus attempts to connect to all the configured LDAP servers and returns information on whenever they're available or not.
|
||||
func (server *HTTPServer) GetLDAPStatus(c *models.ReqContext) Response {
|
||||
func (hs *HTTPServer) GetLDAPStatus(c *models.ReqContext) Response {
|
||||
if !ldap.IsEnabled() {
|
||||
return Error(http.StatusBadRequest, "LDAP is not enabled", nil)
|
||||
}
|
||||
@ -152,7 +152,7 @@ func (server *HTTPServer) GetLDAPStatus(c *models.ReqContext) Response {
|
||||
}
|
||||
|
||||
// PostSyncUserWithLDAP enables a single Grafana user to be synchronized against LDAP
|
||||
func (server *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) Response {
|
||||
func (hs *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) Response {
|
||||
if !ldap.IsEnabled() {
|
||||
return Error(http.StatusBadRequest, "LDAP is not enabled", nil)
|
||||
}
|
||||
@ -203,7 +203,7 @@ func (server *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) Response {
|
||||
return Error(http.StatusInternalServerError, "Failed to disable the user", err)
|
||||
}
|
||||
|
||||
err = server.AuthTokenService.RevokeAllUserTokens(c.Req.Context(), userId)
|
||||
err = hs.AuthTokenService.RevokeAllUserTokens(c.Req.Context(), userId)
|
||||
if err != nil {
|
||||
return Error(http.StatusInternalServerError, "Failed to remove session tokens for the user", err)
|
||||
}
|
||||
@ -231,7 +231,7 @@ func (server *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) Response {
|
||||
}
|
||||
|
||||
// GetUserFromLDAP finds an user based on a username in LDAP. This helps illustrate how would the particular user be mapped in Grafana when synced.
|
||||
func (server *HTTPServer) GetUserFromLDAP(c *models.ReqContext) Response {
|
||||
func (hs *HTTPServer) GetUserFromLDAP(c *models.ReqContext) Response {
|
||||
if !ldap.IsEnabled() {
|
||||
return Error(http.StatusBadRequest, "LDAP is not enabled", nil)
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
|
||||
"github.com/grafana/grafana/pkg/api/dtos"
|
||||
"github.com/grafana/grafana/pkg/bus"
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
|
@ -12,16 +12,16 @@ import (
|
||||
)
|
||||
|
||||
// GET /api/user/auth-tokens
|
||||
func (server *HTTPServer) GetUserAuthTokens(c *models.ReqContext) Response {
|
||||
return server.getUserAuthTokensInternal(c, c.UserId)
|
||||
func (hs *HTTPServer) GetUserAuthTokens(c *models.ReqContext) Response {
|
||||
return hs.getUserAuthTokensInternal(c, c.UserId)
|
||||
}
|
||||
|
||||
// POST /api/user/revoke-auth-token
|
||||
func (server *HTTPServer) RevokeUserAuthToken(c *models.ReqContext, cmd models.RevokeAuthTokenCmd) Response {
|
||||
return server.revokeUserAuthTokenInternal(c, c.UserId, cmd)
|
||||
func (hs *HTTPServer) RevokeUserAuthToken(c *models.ReqContext, cmd models.RevokeAuthTokenCmd) Response {
|
||||
return hs.revokeUserAuthTokenInternal(c, c.UserId, cmd)
|
||||
}
|
||||
|
||||
func (server *HTTPServer) logoutUserFromAllDevicesInternal(ctx context.Context, userID int64) Response {
|
||||
func (hs *HTTPServer) logoutUserFromAllDevicesInternal(ctx context.Context, userID int64) Response {
|
||||
userQuery := models.GetUserByIdQuery{Id: userID}
|
||||
|
||||
if err := bus.Dispatch(&userQuery); err != nil {
|
||||
@ -31,7 +31,7 @@ func (server *HTTPServer) logoutUserFromAllDevicesInternal(ctx context.Context,
|
||||
return Error(500, "Could not read user from database", err)
|
||||
}
|
||||
|
||||
err := server.AuthTokenService.RevokeAllUserTokens(ctx, userID)
|
||||
err := hs.AuthTokenService.RevokeAllUserTokens(ctx, userID)
|
||||
if err != nil {
|
||||
return Error(500, "Failed to logout user", err)
|
||||
}
|
||||
@ -41,7 +41,7 @@ func (server *HTTPServer) logoutUserFromAllDevicesInternal(ctx context.Context,
|
||||
})
|
||||
}
|
||||
|
||||
func (server *HTTPServer) getUserAuthTokensInternal(c *models.ReqContext, userID int64) Response {
|
||||
func (hs *HTTPServer) getUserAuthTokensInternal(c *models.ReqContext, userID int64) Response {
|
||||
userQuery := models.GetUserByIdQuery{Id: userID}
|
||||
|
||||
if err := bus.Dispatch(&userQuery); err != nil {
|
||||
@ -51,7 +51,7 @@ func (server *HTTPServer) getUserAuthTokensInternal(c *models.ReqContext, userID
|
||||
return Error(500, "Failed to get user", err)
|
||||
}
|
||||
|
||||
tokens, err := server.AuthTokenService.GetUserTokens(c.Req.Context(), userID)
|
||||
tokens, err := hs.AuthTokenService.GetUserTokens(c.Req.Context(), userID)
|
||||
if err != nil {
|
||||
return Error(500, "Failed to get user auth tokens", err)
|
||||
}
|
||||
@ -108,7 +108,7 @@ func (server *HTTPServer) getUserAuthTokensInternal(c *models.ReqContext, userID
|
||||
return JSON(200, result)
|
||||
}
|
||||
|
||||
func (server *HTTPServer) revokeUserAuthTokenInternal(c *models.ReqContext, userID int64, cmd models.RevokeAuthTokenCmd) Response {
|
||||
func (hs *HTTPServer) revokeUserAuthTokenInternal(c *models.ReqContext, userID int64, cmd models.RevokeAuthTokenCmd) Response {
|
||||
userQuery := models.GetUserByIdQuery{Id: userID}
|
||||
|
||||
if err := bus.Dispatch(&userQuery); err != nil {
|
||||
@ -118,7 +118,7 @@ func (server *HTTPServer) revokeUserAuthTokenInternal(c *models.ReqContext, user
|
||||
return Error(500, "Failed to get user", err)
|
||||
}
|
||||
|
||||
token, err := server.AuthTokenService.GetUserToken(c.Req.Context(), userID, cmd.AuthTokenId)
|
||||
token, err := hs.AuthTokenService.GetUserToken(c.Req.Context(), userID, cmd.AuthTokenId)
|
||||
if err != nil {
|
||||
if err == models.ErrUserTokenNotFound {
|
||||
return Error(404, "User auth token not found", err)
|
||||
@ -130,7 +130,7 @@ func (server *HTTPServer) revokeUserAuthTokenInternal(c *models.ReqContext, user
|
||||
return Error(400, "Cannot revoke active user auth token", nil)
|
||||
}
|
||||
|
||||
err = server.AuthTokenService.RevokeToken(c.Req.Context(), token)
|
||||
err = hs.AuthTokenService.RevokeToken(c.Req.Context(), token)
|
||||
if err != nil {
|
||||
if err == models.ErrUserTokenNotFound {
|
||||
return Error(404, "User auth token not found", err)
|
||||
|
@ -22,7 +22,7 @@ func (util *FakeIoUtil) ReadDir(path string) ([]os.FileInfo, error) {
|
||||
return util.FakeReadDir, nil
|
||||
}
|
||||
|
||||
func (i *FakeIoUtil) ReadFile(filename string) ([]byte, error) {
|
||||
func (*FakeIoUtil) ReadFile(filename string) ([]byte, error) {
|
||||
return make([]byte, 0), nil
|
||||
}
|
||||
|
||||
|
@ -89,12 +89,12 @@ type Alert struct {
|
||||
Settings *simplejson.Json
|
||||
}
|
||||
|
||||
func (alert *Alert) ValidToSave() bool {
|
||||
return alert.DashboardId != 0 && alert.OrgId != 0 && alert.PanelId != 0
|
||||
func (a *Alert) ValidToSave() bool {
|
||||
return a.DashboardId != 0 && a.OrgId != 0 && a.PanelId != 0
|
||||
}
|
||||
|
||||
func (alert *Alert) ShouldUpdateState(newState AlertStateType) bool {
|
||||
return alert.State != newState
|
||||
func (a *Alert) ShouldUpdateState(newState AlertStateType) bool {
|
||||
return a.State != newState
|
||||
}
|
||||
|
||||
func (a *Alert) ContainsUpdates(other *Alert) bool {
|
||||
@ -117,10 +117,10 @@ func (a *Alert) ContainsUpdates(other *Alert) bool {
|
||||
return result
|
||||
}
|
||||
|
||||
func (alert *Alert) GetTagsFromSettings() []*Tag {
|
||||
func (a *Alert) GetTagsFromSettings() []*Tag {
|
||||
tags := []*Tag{}
|
||||
if alert.Settings != nil {
|
||||
if data, ok := alert.Settings.CheckGet("alertRuleTags"); ok {
|
||||
if a.Settings != nil {
|
||||
if data, ok := a.Settings.CheckGet("alertRuleTags"); ok {
|
||||
for tagNameString, tagValue := range data.MustMap() {
|
||||
// MustMap() already guarantees the return of a `map[string]interface{}`.
|
||||
// Therefore we only need to verify that tagValue is a String.
|
||||
|
@ -294,8 +294,8 @@ func SlugifyTitle(title string) string {
|
||||
}
|
||||
|
||||
// GetUrl return the html url for a folder if it's folder, otherwise for a dashboard
|
||||
func (dash *Dashboard) GetUrl() string {
|
||||
return GetDashboardFolderUrl(dash.IsFolder, dash.Uid, dash.Slug)
|
||||
func (d *Dashboard) GetUrl() string {
|
||||
return GetDashboardFolderUrl(d.IsFolder, d.Uid, d.Slug)
|
||||
}
|
||||
|
||||
// Return the html url for a dashboard
|
||||
|
@ -204,16 +204,16 @@ type UpdateUserLastSeenAtCommand struct {
|
||||
UserId int64
|
||||
}
|
||||
|
||||
func (user *SignedInUser) HasRole(role RoleType) bool {
|
||||
if user.IsGrafanaAdmin {
|
||||
func (u *SignedInUser) HasRole(role RoleType) bool {
|
||||
if u.IsGrafanaAdmin {
|
||||
return true
|
||||
}
|
||||
|
||||
return user.OrgRole.Includes(role)
|
||||
return u.OrgRole.Includes(role)
|
||||
}
|
||||
|
||||
func (user *SignedInUser) IsRealUser() bool {
|
||||
return user.UserId != 0
|
||||
func (u *SignedInUser) IsRealUser() bool {
|
||||
return u.UserId != 0
|
||||
}
|
||||
|
||||
type UserProfileDTO struct {
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
datasourceV1 "github.com/grafana/grafana-plugin-model/go/datasource"
|
||||
rendererV1 "github.com/grafana/grafana-plugin-model/go/renderer"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/grpcplugin"
|
||||
sdkgrpcplugin "github.com/grafana/grafana-plugin-sdk-go/backend/grpcplugin"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/plugins/backendplugin"
|
||||
"github.com/grafana/grafana/pkg/plugins/backendplugin/pluginextensionv2"
|
||||
@ -28,8 +27,8 @@ var handshake = goplugin.HandshakeConfig{
|
||||
ProtocolVersion: DefaultProtocolVersion,
|
||||
|
||||
// The magic cookie values should NEVER be changed.
|
||||
MagicCookieKey: sdkgrpcplugin.MagicCookieKey,
|
||||
MagicCookieValue: sdkgrpcplugin.MagicCookieValue,
|
||||
MagicCookieKey: grpcplugin.MagicCookieKey,
|
||||
MagicCookieValue: grpcplugin.MagicCookieValue,
|
||||
}
|
||||
|
||||
func newClientConfig(executablePath string, env []string, logger log.Logger, versionedPlugins map[int]goplugin.PluginSet) *goplugin.ClientConfig {
|
||||
@ -69,10 +68,10 @@ type PluginDescriptor struct {
|
||||
// getV2PluginSet returns list of plugins supported on v2.
|
||||
func getV2PluginSet() goplugin.PluginSet {
|
||||
return goplugin.PluginSet{
|
||||
"diagnostics": &sdkgrpcplugin.DiagnosticsGRPCPlugin{},
|
||||
"resource": &sdkgrpcplugin.ResourceGRPCPlugin{},
|
||||
"data": &sdkgrpcplugin.DataGRPCPlugin{},
|
||||
"transform": &sdkgrpcplugin.TransformGRPCPlugin{},
|
||||
"diagnostics": &grpcplugin.DiagnosticsGRPCPlugin{},
|
||||
"resource": &grpcplugin.ResourceGRPCPlugin{},
|
||||
"data": &grpcplugin.DataGRPCPlugin{},
|
||||
"transform": &grpcplugin.TransformGRPCPlugin{},
|
||||
"renderer": &pluginextensionv2.RendererGRPCPlugin{},
|
||||
}
|
||||
}
|
||||
@ -87,7 +86,7 @@ func NewBackendPlugin(pluginID, executablePath string, startFns PluginStartFuncs
|
||||
DefaultProtocolVersion: {
|
||||
pluginID: &datasourceV1.DatasourcePluginImpl{},
|
||||
},
|
||||
sdkgrpcplugin.ProtocolVersion: getV2PluginSet(),
|
||||
grpcplugin.ProtocolVersion: getV2PluginSet(),
|
||||
},
|
||||
startFns: startFns,
|
||||
})
|
||||
@ -103,7 +102,7 @@ func NewRendererPlugin(pluginID, executablePath string, startFns PluginStartFunc
|
||||
DefaultProtocolVersion: {
|
||||
pluginID: &rendererV1.RendererPluginImpl{},
|
||||
},
|
||||
sdkgrpcplugin.ProtocolVersion: getV2PluginSet(),
|
||||
grpcplugin.ProtocolVersion: getV2PluginSet(),
|
||||
},
|
||||
startFns: startFns,
|
||||
})
|
||||
|
@ -23,11 +23,11 @@ import (
|
||||
|
||||
var (
|
||||
// ErrPluginNotRegistered error returned when plugin not registered.
|
||||
ErrPluginNotRegistered = errors.New("Plugin not registered")
|
||||
ErrPluginNotRegistered = errors.New("plugin not registered")
|
||||
// ErrHealthCheckFailed error returned when health check failed.
|
||||
ErrHealthCheckFailed = errors.New("Health check failed")
|
||||
ErrHealthCheckFailed = errors.New("health check failed")
|
||||
// ErrPluginUnavailable error returned when plugin is unavailable.
|
||||
ErrPluginUnavailable = errors.New("Plugin unavailable")
|
||||
ErrPluginUnavailable = errors.New("plugin unavailable")
|
||||
// ErrMethodNotImplemented error returned when plugin method not implemented.
|
||||
ErrMethodNotImplemented = errors.New("method not implemented")
|
||||
)
|
||||
@ -81,7 +81,7 @@ func (m *manager) Register(pluginID string, factory PluginFactoryFunc) error {
|
||||
defer m.pluginsMu.Unlock()
|
||||
|
||||
if _, exists := m.plugins[pluginID]; exists {
|
||||
return errors.New("Backend plugin already registered")
|
||||
return fmt.Errorf("backend plugin %s already registered", pluginID)
|
||||
}
|
||||
|
||||
pluginSettings := pluginSettings{}
|
||||
@ -141,7 +141,7 @@ func (m *manager) StartPlugin(ctx context.Context, pluginID string) error {
|
||||
}
|
||||
|
||||
if p.IsManaged() {
|
||||
return errors.New("Backend plugin is managed and cannot be manually started")
|
||||
return errors.New("backend plugin is managed and cannot be manually started")
|
||||
}
|
||||
|
||||
return startPluginAndRestartKilledProcesses(ctx, p)
|
||||
@ -241,7 +241,7 @@ func (m *manager) callResourceInternal(w http.ResponseWriter, req *http.Request,
|
||||
|
||||
body, err := ioutil.ReadAll(req.Body)
|
||||
if err != nil {
|
||||
return errors.New("Failed to read request body")
|
||||
return fmt.Errorf("failed to read request body: %w", err)
|
||||
}
|
||||
|
||||
crReq := &backend.CallResourceRequest{
|
||||
@ -315,13 +315,13 @@ func flushStream(plugin Plugin, stream CallResourceClientResponseStream, w http.
|
||||
resp, err := stream.Recv()
|
||||
if err == io.EOF {
|
||||
if processedStreams == 0 {
|
||||
return errors.New("Received empty resource response")
|
||||
return errors.New("received empty resource response")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if err != nil {
|
||||
if processedStreams == 0 {
|
||||
return errutil.Wrap("Failed to receive response from resource call", err)
|
||||
return errutil.Wrap("failed to receive response from resource call", err)
|
||||
}
|
||||
|
||||
plugin.Logger().Error("Failed to receive response from resource call", "error", err)
|
||||
|
@ -23,7 +23,7 @@ type callResourceResponseStream struct {
|
||||
|
||||
func (s *callResourceResponseStream) Send(res *backend.CallResourceResponse) error {
|
||||
if s.closed {
|
||||
return errors.New("Cannot send to a closed stream")
|
||||
return errors.New("cannot send to a closed stream")
|
||||
}
|
||||
|
||||
select {
|
||||
@ -48,7 +48,7 @@ func (s *callResourceResponseStream) Recv() (*backend.CallResourceResponse, erro
|
||||
|
||||
func (s *callResourceResponseStream) Close() error {
|
||||
if s.closed {
|
||||
return errors.New("Cannot close a closed stream")
|
||||
return errors.New("cannot close a closed stream")
|
||||
}
|
||||
|
||||
close(s.stream)
|
||||
|
@ -113,8 +113,8 @@ type DashTemplateEvaluator struct {
|
||||
result *simplejson.Json
|
||||
}
|
||||
|
||||
func (this *DashTemplateEvaluator) findInput(varName string, varType string) *ImportDashboardInput {
|
||||
for _, input := range this.inputs {
|
||||
func (e *DashTemplateEvaluator) findInput(varName string, varType string) *ImportDashboardInput {
|
||||
for _, input := range e.inputs {
|
||||
if varType == input.Type && (input.Name == varName || input.Name == "*") {
|
||||
return &input
|
||||
}
|
||||
@ -123,34 +123,34 @@ func (this *DashTemplateEvaluator) findInput(varName string, varType string) *Im
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *DashTemplateEvaluator) Eval() (*simplejson.Json, error) {
|
||||
this.result = simplejson.New()
|
||||
this.variables = make(map[string]string)
|
||||
func (e *DashTemplateEvaluator) Eval() (*simplejson.Json, error) {
|
||||
e.result = simplejson.New()
|
||||
e.variables = make(map[string]string)
|
||||
|
||||
// check that we have all inputs we need
|
||||
for _, inputDef := range this.template.Get("__inputs").MustArray() {
|
||||
for _, inputDef := range e.template.Get("__inputs").MustArray() {
|
||||
inputDefJson := simplejson.NewFromAny(inputDef)
|
||||
inputName := inputDefJson.Get("name").MustString()
|
||||
inputType := inputDefJson.Get("type").MustString()
|
||||
input := this.findInput(inputName, inputType)
|
||||
input := e.findInput(inputName, inputType)
|
||||
|
||||
if input == nil {
|
||||
return nil, &DashboardInputMissingError{VariableName: inputName}
|
||||
}
|
||||
|
||||
this.variables["${"+inputName+"}"] = input.Value
|
||||
e.variables["${"+inputName+"}"] = input.Value
|
||||
}
|
||||
|
||||
return simplejson.NewFromAny(this.evalObject(this.template)), nil
|
||||
return simplejson.NewFromAny(e.evalObject(e.template)), nil
|
||||
}
|
||||
|
||||
func (this *DashTemplateEvaluator) evalValue(source *simplejson.Json) interface{} {
|
||||
func (e *DashTemplateEvaluator) evalValue(source *simplejson.Json) interface{} {
|
||||
sourceValue := source.Interface()
|
||||
|
||||
switch v := sourceValue.(type) {
|
||||
case string:
|
||||
interpolated := varRegex.ReplaceAllStringFunc(v, func(match string) string {
|
||||
replacement, exists := this.variables[match]
|
||||
replacement, exists := e.variables[match]
|
||||
if exists {
|
||||
return replacement
|
||||
}
|
||||
@ -162,11 +162,11 @@ func (this *DashTemplateEvaluator) evalValue(source *simplejson.Json) interface{
|
||||
case json.Number:
|
||||
return v
|
||||
case map[string]interface{}:
|
||||
return this.evalObject(source)
|
||||
return e.evalObject(source)
|
||||
case []interface{}:
|
||||
array := make([]interface{}, 0)
|
||||
for _, item := range v {
|
||||
array = append(array, this.evalValue(simplejson.NewFromAny(item)))
|
||||
array = append(array, e.evalValue(simplejson.NewFromAny(item)))
|
||||
}
|
||||
return array
|
||||
}
|
||||
@ -174,14 +174,14 @@ func (this *DashTemplateEvaluator) evalValue(source *simplejson.Json) interface{
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *DashTemplateEvaluator) evalObject(source *simplejson.Json) interface{} {
|
||||
func (e *DashTemplateEvaluator) evalObject(source *simplejson.Json) interface{} {
|
||||
result := make(map[string]interface{})
|
||||
|
||||
for key, value := range source.MustMap() {
|
||||
if key == "__inputs" {
|
||||
continue
|
||||
}
|
||||
result[key] = this.evalValue(simplejson.NewFromAny(value))
|
||||
result[key] = e.evalValue(simplejson.NewFromAny(value))
|
||||
}
|
||||
|
||||
return result
|
||||
|
@ -165,6 +165,6 @@ func (tw *DatasourcePluginWrapper) mapRowValue(rv *datasource.RowValue) (interfa
|
||||
case datasource.RowValue_TYPE_BYTES:
|
||||
return rv.BytesValue, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("Unsupported row value %v from plugin", rv.Kind)
|
||||
return nil, fmt.Errorf("unsupported row value %v from plugin", rv.Kind)
|
||||
}
|
||||
}
|
||||
|
@ -302,7 +302,7 @@ func (pm *PluginManager) GetDatasource(pluginID string) (*DataSourcePlugin, bool
|
||||
return ds, exist
|
||||
}
|
||||
|
||||
func (scanner *PluginScanner) walker(currentPath string, f os.FileInfo, err error) error {
|
||||
func (s *PluginScanner) walker(currentPath string, f os.FileInfo, err error) error {
|
||||
// We scan all the subfolders for plugin.json (with some exceptions) so that we also load embedded plugins, for
|
||||
// example https://github.com/raintank/worldping-app/tree/master/dist/grafana-worldmap-panel worldmap panel plugin
|
||||
// is embedded in worldping app.
|
||||
@ -322,9 +322,9 @@ func (scanner *PluginScanner) walker(currentPath string, f os.FileInfo, err erro
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := scanner.loadPlugin(currentPath); err != nil {
|
||||
scanner.log.Error("Failed to load plugin", "error", err, "pluginPath", filepath.Dir(currentPath))
|
||||
scanner.errors = append(scanner.errors, err)
|
||||
if err := s.loadPlugin(currentPath); err != nil {
|
||||
s.log.Error("Failed to load plugin", "error", err, "pluginPath", filepath.Dir(currentPath))
|
||||
s.errors = append(s.errors, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -367,7 +367,7 @@ func (s *PluginScanner) loadPlugin(pluginJSONFilePath string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (scanner *PluginScanner) IsBackendOnlyPlugin(pluginType string) bool {
|
||||
func (*PluginScanner) IsBackendOnlyPlugin(pluginType string) bool {
|
||||
return pluginType == "renderer" || pluginType == "transform"
|
||||
}
|
||||
|
||||
|
@ -149,7 +149,7 @@ func (s *transformCallback) QueryData(ctx context.Context, req *pluginv2.QueryDa
|
||||
}
|
||||
|
||||
if err := bus.Dispatch(getDsInfo); err != nil {
|
||||
return nil, fmt.Errorf("Could not find datasource %v", err)
|
||||
return nil, fmt.Errorf("could not find datasource: %w", err)
|
||||
}
|
||||
|
||||
// Convert plugin-model (datasource) queries to tsdb queries
|
||||
|
@ -25,14 +25,14 @@ type UsageStatsQuerier interface {
|
||||
|
||||
// QueryUsageStats returns usage stats about alert rules
|
||||
// configured in Grafana.
|
||||
func (ae *AlertEngine) QueryUsageStats() (*UsageStats, error) {
|
||||
func (e *AlertEngine) QueryUsageStats() (*UsageStats, error) {
|
||||
cmd := &models.GetAllAlertsQuery{}
|
||||
err := ae.Bus.Dispatch(cmd)
|
||||
err := e.Bus.Dispatch(cmd)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dsUsage, err := ae.mapRulesToUsageStats(cmd.Result)
|
||||
dsUsage, err := e.mapRulesToUsageStats(cmd.Result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -42,13 +42,13 @@ func (ae *AlertEngine) QueryUsageStats() (*UsageStats, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (ae *AlertEngine) mapRulesToUsageStats(rules []*models.Alert) (DatasourceAlertUsage, error) {
|
||||
func (e *AlertEngine) mapRulesToUsageStats(rules []*models.Alert) (DatasourceAlertUsage, error) {
|
||||
// map of datasourceId type and frequency
|
||||
typeCount := map[int64]int{}
|
||||
for _, a := range rules {
|
||||
dss, err := ae.parseAlertRuleModel(a.Settings)
|
||||
dss, err := e.parseAlertRuleModel(a.Settings)
|
||||
if err != nil {
|
||||
ae.log.Debug("could not parse settings for alert rule", "id", a.Id)
|
||||
e.log.Debug("could not parse settings for alert rule", "id", a.Id)
|
||||
continue
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ func (ae *AlertEngine) mapRulesToUsageStats(rules []*models.Alert) (DatasourceAl
|
||||
result := map[string]int{}
|
||||
for k, v := range typeCount {
|
||||
query := &models.GetDataSourceByIdQuery{Id: k}
|
||||
err := ae.Bus.Dispatch(query)
|
||||
err := e.Bus.Dispatch(query)
|
||||
if err != nil {
|
||||
return map[string]int{}, nil
|
||||
}
|
||||
@ -74,7 +74,7 @@ func (ae *AlertEngine) mapRulesToUsageStats(rules []*models.Alert) (DatasourceAl
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (ae *AlertEngine) parseAlertRuleModel(settings json.Marshaler) ([]int64, error) {
|
||||
func (e *AlertEngine) parseAlertRuleModel(settings json.Marshaler) ([]int64, error) {
|
||||
datasourceIDs := []int64{}
|
||||
model := alertJSONModel{}
|
||||
|
||||
|
@ -7,31 +7,31 @@ import (
|
||||
"github.com/grafana/grafana/pkg/services/sqlstore"
|
||||
)
|
||||
|
||||
func (srv *UserAuthTokenService) Run(ctx context.Context) error {
|
||||
func (s *UserAuthTokenService) Run(ctx context.Context) error {
|
||||
var err error
|
||||
ticker := time.NewTicker(time.Hour)
|
||||
maxInactiveLifetime := srv.Cfg.LoginMaxInactiveLifetime
|
||||
maxLifetime := srv.Cfg.LoginMaxLifetime
|
||||
maxInactiveLifetime := s.Cfg.LoginMaxInactiveLifetime
|
||||
maxLifetime := s.Cfg.LoginMaxLifetime
|
||||
|
||||
err = srv.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func() {
|
||||
if _, err := srv.deleteExpiredTokens(ctx, maxInactiveLifetime, maxLifetime); err != nil {
|
||||
srv.log.Error("An error occurred while deleting expired tokens", "err", err)
|
||||
err = s.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func() {
|
||||
if _, err := s.deleteExpiredTokens(ctx, maxInactiveLifetime, maxLifetime); err != nil {
|
||||
s.log.Error("An error occurred while deleting expired tokens", "err", err)
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
srv.log.Error("failed to lock and execute cleanup of expired auth token", "error", err)
|
||||
s.log.Error("failed to lock and execute cleanup of expired auth token", "error", err)
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
err = srv.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func() {
|
||||
if _, err := srv.deleteExpiredTokens(ctx, maxInactiveLifetime, maxLifetime); err != nil {
|
||||
srv.log.Error("An error occurred while deleting expired tokens", "err", err)
|
||||
err = s.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func() {
|
||||
if _, err := s.deleteExpiredTokens(ctx, maxInactiveLifetime, maxLifetime); err != nil {
|
||||
s.log.Error("An error occurred while deleting expired tokens", "err", err)
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
srv.log.Error("failed to lock and execute cleanup of expired auth token", "error", err)
|
||||
s.log.Error("failed to lock and execute cleanup of expired auth token", "error", err)
|
||||
}
|
||||
|
||||
case <-ctx.Done():
|
||||
@ -40,14 +40,14 @@ func (srv *UserAuthTokenService) Run(ctx context.Context) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (srv *UserAuthTokenService) deleteExpiredTokens(ctx context.Context, maxInactiveLifetime, maxLifetime time.Duration) (int64, error) {
|
||||
func (s *UserAuthTokenService) deleteExpiredTokens(ctx context.Context, maxInactiveLifetime, maxLifetime time.Duration) (int64, error) {
|
||||
createdBefore := getTime().Add(-maxLifetime)
|
||||
rotatedBefore := getTime().Add(-maxInactiveLifetime)
|
||||
|
||||
srv.log.Debug("starting cleanup of expired auth tokens", "createdBefore", createdBefore, "rotatedBefore", rotatedBefore)
|
||||
s.log.Debug("starting cleanup of expired auth tokens", "createdBefore", createdBefore, "rotatedBefore", rotatedBefore)
|
||||
|
||||
var affected int64
|
||||
err := srv.SQLStore.WithDbSession(ctx, func(dbSession *sqlstore.DBSession) error {
|
||||
err := s.SQLStore.WithDbSession(ctx, func(dbSession *sqlstore.DBSession) error {
|
||||
sql := `DELETE from user_auth_token WHERE created_at <= ? OR rotated_at <= ?`
|
||||
res, err := dbSession.Exec(sql, createdBefore.Unix(), rotatedBefore.Unix())
|
||||
if err != nil {
|
||||
@ -56,11 +56,11 @@ func (srv *UserAuthTokenService) deleteExpiredTokens(ctx context.Context, maxIna
|
||||
|
||||
affected, err = res.RowsAffected()
|
||||
if err != nil {
|
||||
srv.log.Error("failed to cleanup expired auth tokens", "error", err)
|
||||
s.log.Error("failed to cleanup expired auth tokens", "error", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
srv.log.Debug("cleanup of expired auth tokens done", "count", affected)
|
||||
s.log.Debug("cleanup of expired auth tokens done", "count", affected)
|
||||
|
||||
return nil
|
||||
})
|
||||
|
@ -147,24 +147,24 @@ const (
|
||||
VIEWER_ACCESS = CAN_VIEW
|
||||
)
|
||||
|
||||
func (flag permissionFlags) canAdmin() bool {
|
||||
return flag&CAN_ADMIN != 0
|
||||
func (f permissionFlags) canAdmin() bool {
|
||||
return f&CAN_ADMIN != 0
|
||||
}
|
||||
|
||||
func (flag permissionFlags) canEdit() bool {
|
||||
return flag&CAN_EDIT != 0
|
||||
func (f permissionFlags) canEdit() bool {
|
||||
return f&CAN_EDIT != 0
|
||||
}
|
||||
|
||||
func (flag permissionFlags) canSave() bool {
|
||||
return flag&CAN_SAVE != 0
|
||||
func (f permissionFlags) canSave() bool {
|
||||
return f&CAN_SAVE != 0
|
||||
}
|
||||
|
||||
func (flag permissionFlags) canView() bool {
|
||||
return flag&CAN_VIEW != 0
|
||||
func (f permissionFlags) canView() bool {
|
||||
return f&CAN_VIEW != 0
|
||||
}
|
||||
|
||||
func (flag permissionFlags) noAccess() bool {
|
||||
return flag&(CAN_ADMIN|CAN_EDIT|CAN_SAVE|CAN_VIEW) == 0
|
||||
func (f permissionFlags) noAccess() bool {
|
||||
return f&(CAN_ADMIN|CAN_EDIT|CAN_SAVE|CAN_VIEW) == 0
|
||||
}
|
||||
|
||||
func (f permissionFlags) String() string {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||
. "github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||
)
|
||||
|
||||
@ -17,12 +16,12 @@ func addShortURLMigrations(mg *Migrator) {
|
||||
{Name: "created_at", Type: DB_Int, Nullable: false},
|
||||
{Name: "last_seen_at", Type: DB_Int, Nullable: true},
|
||||
},
|
||||
Indices: []*migrator.Index{
|
||||
{Cols: []string{"org_id", "uid"}, Type: migrator.UniqueIndex},
|
||||
Indices: []*Index{
|
||||
{Cols: []string{"org_id", "uid"}, Type: UniqueIndex},
|
||||
},
|
||||
}
|
||||
|
||||
mg.AddMigration("create short_url table v1", NewAddTableMigration(shortURLV1))
|
||||
|
||||
mg.AddMigration("add index short_url.org_id-uid", migrator.NewAddIndexMigration(shortURLV1, shortURLV1.Indices[0]))
|
||||
mg.AddMigration("add index short_url.org_id-uid", NewAddIndexMigration(shortURLV1, shortURLV1.Indices[0]))
|
||||
}
|
||||
|
@ -79,8 +79,8 @@ type BaseDialect struct {
|
||||
driverName string
|
||||
}
|
||||
|
||||
func (d *BaseDialect) DriverName() string {
|
||||
return d.driverName
|
||||
func (b *BaseDialect) DriverName() string {
|
||||
return b.driverName
|
||||
}
|
||||
|
||||
func (b *BaseDialect) ShowCreateNull() bool {
|
||||
@ -107,7 +107,7 @@ func (b *BaseDialect) Default(col *Column) string {
|
||||
return col.Default
|
||||
}
|
||||
|
||||
func (db *BaseDialect) DateTimeFunc(value string) string {
|
||||
func (b *BaseDialect) DateTimeFunc(value string) string {
|
||||
return value
|
||||
}
|
||||
|
||||
@ -145,12 +145,12 @@ func (b *BaseDialect) CreateTableSql(table *Table) string {
|
||||
return sql
|
||||
}
|
||||
|
||||
func (db *BaseDialect) AddColumnSql(tableName string, col *Column) string {
|
||||
return fmt.Sprintf("alter table %s ADD COLUMN %s", db.dialect.Quote(tableName), col.StringNoPk(db.dialect))
|
||||
func (b *BaseDialect) AddColumnSql(tableName string, col *Column) string {
|
||||
return fmt.Sprintf("alter table %s ADD COLUMN %s", b.dialect.Quote(tableName), col.StringNoPk(b.dialect))
|
||||
}
|
||||
|
||||
func (db *BaseDialect) CreateIndexSql(tableName string, index *Index) string {
|
||||
quote := db.dialect.Quote
|
||||
func (b *BaseDialect) CreateIndexSql(tableName string, index *Index) string {
|
||||
quote := b.dialect.Quote
|
||||
var unique string
|
||||
if index.Type == UniqueIndex {
|
||||
unique = " UNIQUE"
|
||||
@ -160,66 +160,66 @@ func (db *BaseDialect) CreateIndexSql(tableName string, index *Index) string {
|
||||
|
||||
quotedCols := []string{}
|
||||
for _, col := range index.Cols {
|
||||
quotedCols = append(quotedCols, db.dialect.Quote(col))
|
||||
quotedCols = append(quotedCols, b.dialect.Quote(col))
|
||||
}
|
||||
|
||||
return fmt.Sprintf("CREATE%s INDEX %v ON %v (%v);", unique, quote(idxName), quote(tableName), strings.Join(quotedCols, ","))
|
||||
}
|
||||
|
||||
func (db *BaseDialect) QuoteColList(cols []string) string {
|
||||
func (b *BaseDialect) QuoteColList(cols []string) string {
|
||||
var sourceColsSql = ""
|
||||
for _, col := range cols {
|
||||
sourceColsSql += db.dialect.Quote(col)
|
||||
sourceColsSql += b.dialect.Quote(col)
|
||||
sourceColsSql += "\n, "
|
||||
}
|
||||
return strings.TrimSuffix(sourceColsSql, "\n, ")
|
||||
}
|
||||
|
||||
func (db *BaseDialect) CopyTableData(sourceTable string, targetTable string, sourceCols []string, targetCols []string) string {
|
||||
sourceColsSql := db.QuoteColList(sourceCols)
|
||||
targetColsSql := db.QuoteColList(targetCols)
|
||||
func (b *BaseDialect) CopyTableData(sourceTable string, targetTable string, sourceCols []string, targetCols []string) string {
|
||||
sourceColsSql := b.QuoteColList(sourceCols)
|
||||
targetColsSql := b.QuoteColList(targetCols)
|
||||
|
||||
quote := db.dialect.Quote
|
||||
quote := b.dialect.Quote
|
||||
return fmt.Sprintf("INSERT INTO %s (%s) SELECT %s FROM %s", quote(targetTable), targetColsSql, sourceColsSql, quote(sourceTable))
|
||||
}
|
||||
|
||||
func (db *BaseDialect) DropTable(tableName string) string {
|
||||
quote := db.dialect.Quote
|
||||
func (b *BaseDialect) DropTable(tableName string) string {
|
||||
quote := b.dialect.Quote
|
||||
return fmt.Sprintf("DROP TABLE IF EXISTS %s", quote(tableName))
|
||||
}
|
||||
|
||||
func (db *BaseDialect) RenameTable(oldName string, newName string) string {
|
||||
quote := db.dialect.Quote
|
||||
func (b *BaseDialect) RenameTable(oldName string, newName string) string {
|
||||
quote := b.dialect.Quote
|
||||
return fmt.Sprintf("ALTER TABLE %s RENAME TO %s", quote(oldName), quote(newName))
|
||||
}
|
||||
|
||||
func (db *BaseDialect) ColumnCheckSql(tableName, columnName string) (string, []interface{}) {
|
||||
func (b *BaseDialect) ColumnCheckSql(tableName, columnName string) (string, []interface{}) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (db *BaseDialect) DropIndexSql(tableName string, index *Index) string {
|
||||
quote := db.dialect.Quote
|
||||
func (b *BaseDialect) DropIndexSql(tableName string, index *Index) string {
|
||||
quote := b.dialect.Quote
|
||||
name := index.XName(tableName)
|
||||
return fmt.Sprintf("DROP INDEX %v ON %s", quote(name), quote(tableName))
|
||||
}
|
||||
|
||||
func (db *BaseDialect) UpdateTableSql(tableName string, columns []*Column) string {
|
||||
func (b *BaseDialect) UpdateTableSql(tableName string, columns []*Column) string {
|
||||
return "-- NOT REQUIRED"
|
||||
}
|
||||
|
||||
func (db *BaseDialect) ColString(col *Column) string {
|
||||
sql := db.dialect.Quote(col.Name) + " "
|
||||
func (b *BaseDialect) ColString(col *Column) string {
|
||||
sql := b.dialect.Quote(col.Name) + " "
|
||||
|
||||
sql += db.dialect.SqlType(col) + " "
|
||||
sql += b.dialect.SqlType(col) + " "
|
||||
|
||||
if col.IsPrimaryKey {
|
||||
sql += "PRIMARY KEY "
|
||||
if col.IsAutoIncrement {
|
||||
sql += db.dialect.AutoIncrStr() + " "
|
||||
sql += b.dialect.AutoIncrStr() + " "
|
||||
}
|
||||
}
|
||||
|
||||
if db.dialect.ShowCreateNull() {
|
||||
if b.dialect.ShowCreateNull() {
|
||||
if col.Nullable {
|
||||
sql += "NULL "
|
||||
} else {
|
||||
@ -228,18 +228,18 @@ func (db *BaseDialect) ColString(col *Column) string {
|
||||
}
|
||||
|
||||
if col.Default != "" {
|
||||
sql += "DEFAULT " + db.dialect.Default(col) + " "
|
||||
sql += "DEFAULT " + b.dialect.Default(col) + " "
|
||||
}
|
||||
|
||||
return sql
|
||||
}
|
||||
|
||||
func (db *BaseDialect) ColStringNoPk(col *Column) string {
|
||||
sql := db.dialect.Quote(col.Name) + " "
|
||||
func (b *BaseDialect) ColStringNoPk(col *Column) string {
|
||||
sql := b.dialect.Quote(col.Name) + " "
|
||||
|
||||
sql += db.dialect.SqlType(col) + " "
|
||||
sql += b.dialect.SqlType(col) + " "
|
||||
|
||||
if db.dialect.ShowCreateNull() {
|
||||
if b.dialect.ShowCreateNull() {
|
||||
if col.Nullable {
|
||||
sql += "NULL "
|
||||
} else {
|
||||
@ -248,36 +248,36 @@ func (db *BaseDialect) ColStringNoPk(col *Column) string {
|
||||
}
|
||||
|
||||
if col.Default != "" {
|
||||
sql += "DEFAULT " + db.dialect.Default(col) + " "
|
||||
sql += "DEFAULT " + b.dialect.Default(col) + " "
|
||||
}
|
||||
|
||||
return sql
|
||||
}
|
||||
|
||||
func (db *BaseDialect) Limit(limit int64) string {
|
||||
func (b *BaseDialect) Limit(limit int64) string {
|
||||
return fmt.Sprintf(" LIMIT %d", limit)
|
||||
}
|
||||
|
||||
func (db *BaseDialect) LimitOffset(limit int64, offset int64) string {
|
||||
func (b *BaseDialect) LimitOffset(limit int64, offset int64) string {
|
||||
return fmt.Sprintf(" LIMIT %d OFFSET %d", limit, offset)
|
||||
}
|
||||
|
||||
func (db *BaseDialect) PreInsertId(table string, sess *xorm.Session) error {
|
||||
func (b *BaseDialect) PreInsertId(table string, sess *xorm.Session) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *BaseDialect) PostInsertId(table string, sess *xorm.Session) error {
|
||||
func (b *BaseDialect) PostInsertId(table string, sess *xorm.Session) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *BaseDialect) CleanDB() error {
|
||||
func (b *BaseDialect) CleanDB() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *BaseDialect) NoOpSql() string {
|
||||
func (b *BaseDialect) NoOpSql() string {
|
||||
return "SELECT 0;"
|
||||
}
|
||||
|
||||
func (db *BaseDialect) TruncateDBTables() error {
|
||||
func (b *BaseDialect) TruncateDBTables() error {
|
||||
return nil
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ func (db *Postgres) Quote(name string) string {
|
||||
return "\"" + name + "\""
|
||||
}
|
||||
|
||||
func (b *Postgres) LikeStr() string {
|
||||
func (db *Postgres) LikeStr() string {
|
||||
return "ILIKE"
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ func (db *Postgres) BooleanStr(value bool) string {
|
||||
return strconv.FormatBool(value)
|
||||
}
|
||||
|
||||
func (b *Postgres) Default(col *Column) string {
|
||||
func (db *Postgres) Default(col *Column) string {
|
||||
if col.Type == DB_Bool {
|
||||
if col.Default == "0" {
|
||||
return "FALSE"
|
||||
|
@ -325,26 +325,26 @@ type Cfg struct {
|
||||
}
|
||||
|
||||
// IsExpressionsEnabled returns whether the expressions feature is enabled.
|
||||
func (c Cfg) IsExpressionsEnabled() bool {
|
||||
return c.FeatureToggles["expressions"]
|
||||
func (cfg Cfg) IsExpressionsEnabled() bool {
|
||||
return cfg.FeatureToggles["expressions"]
|
||||
}
|
||||
|
||||
// IsLiveEnabled returns if grafana live should be enabled
|
||||
func (c Cfg) IsLiveEnabled() bool {
|
||||
return c.FeatureToggles["live"]
|
||||
func (cfg Cfg) IsLiveEnabled() bool {
|
||||
return cfg.FeatureToggles["live"]
|
||||
}
|
||||
|
||||
// IsNgAlertEnabled returns whether the standalone alerts feature is enabled.
|
||||
func (c Cfg) IsNgAlertEnabled() bool {
|
||||
return c.FeatureToggles["ngalert"]
|
||||
func (cfg Cfg) IsNgAlertEnabled() bool {
|
||||
return cfg.FeatureToggles["ngalert"]
|
||||
}
|
||||
|
||||
func (c Cfg) IsDatabaseMetricsEnabled() bool {
|
||||
return c.FeatureToggles["database_metrics"]
|
||||
func (cfg Cfg) IsDatabaseMetricsEnabled() bool {
|
||||
return cfg.FeatureToggles["database_metrics"]
|
||||
}
|
||||
|
||||
func (c Cfg) IsHTTPRequestHistogramEnabled() bool {
|
||||
return c.FeatureToggles["http_request_histogram"]
|
||||
func (cfg Cfg) IsHTTPRequestHistogramEnabled() bool {
|
||||
return cfg.FeatureToggles["http_request_histogram"]
|
||||
}
|
||||
|
||||
type CommandLineArgs struct {
|
||||
|
@ -13,7 +13,7 @@ func HandleRequest(ctx context.Context, dsInfo *models.DataSource, req *TsdbQuer
|
||||
var endpoint TsdbQueryEndpoint
|
||||
fn, exists := registry[dsInfo.Type]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("Could not find executor for data source type: %s", dsInfo.Type)
|
||||
return nil, fmt.Errorf("could not find executor for data source type: %s", dsInfo.Type)
|
||||
}
|
||||
|
||||
var err error
|
||||
|
@ -199,7 +199,7 @@ func (e *sqlQueryEndpoint) Query(ctx context.Context, dsInfo *models.DataSource,
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// global macros/substitutions for all sql datasources
|
||||
// Interpolate provides global macros/substitutions for all sql datasources.
|
||||
var Interpolate = func(query *tsdb.Query, timeRange *tsdb.TimeRange, sql string) (string, error) {
|
||||
minInterval, err := tsdb.GetIntervalFrom(query.DataSource, query.Model, time.Second*60)
|
||||
if err != nil {
|
||||
|
@ -32,7 +32,7 @@ enable = [
|
||||
"exportloopref",
|
||||
"staticcheck",
|
||||
"structcheck",
|
||||
# "stylecheck",
|
||||
"stylecheck",
|
||||
"typecheck",
|
||||
"unconvert",
|
||||
"unused",
|
||||
@ -44,6 +44,18 @@ enable = [
|
||||
# Disabled linters (might want them later)
|
||||
# "unparam"
|
||||
|
||||
# Enable when appropriate
|
||||
# Poorly chosen identifier
|
||||
[[issues.exclude-rules]]
|
||||
linters = ["stylecheck"]
|
||||
text = "ST1003"
|
||||
|
||||
# Enable when appropriate
|
||||
# Dot imports that aren't in external test packages are discouraged.
|
||||
[[issues.exclude-rules]]
|
||||
linters = ["stylecheck"]
|
||||
text = "ST1001"
|
||||
|
||||
[[issues.exclude-rules]]
|
||||
linters = ["gosec"]
|
||||
text = "G108"
|
||||
|
Loading…
Reference in New Issue
Block a user