From 1cd632cc43efbd1c41f476f2292851feb9283a23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Fri, 7 Apr 2017 12:00:03 +0200 Subject: [PATCH] plugins: added state property to plugins --- pkg/api/dataproxy.go | 11 -- pkg/api/dtos/plugins.go | 2 + pkg/api/plugins.go | 2 + pkg/api/sqldb/sqldb.go | 164 ------------------ pkg/models/datasource.go | 2 - pkg/plugins/models.go | 1 + public/app/features/plugins/ds_edit_ctrl.ts | 1 + .../features/plugins/partials/ds_edit.html | 5 + .../app/plugins/datasource/mysql/plugin.json | 1 + 9 files changed, 12 insertions(+), 177 deletions(-) delete mode 100644 pkg/api/sqldb/sqldb.go diff --git a/pkg/api/dataproxy.go b/pkg/api/dataproxy.go index 17730b42a76..612d013e802 100644 --- a/pkg/api/dataproxy.go +++ b/pkg/api/dataproxy.go @@ -10,7 +10,6 @@ import ( "time" "github.com/grafana/grafana/pkg/api/cloudwatch" - "github.com/grafana/grafana/pkg/api/sqldb" "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/log" "github.com/grafana/grafana/pkg/metrics" @@ -99,16 +98,6 @@ func ProxyDataSourceRequest(c *middleware.Context) { return } - if ds.Type == m.DS_SQLDB { - targetUrl, _ := url.Parse(ds.Url) - if !checkWhiteList(c, targetUrl.Host) { - return - } - - sqldb.HandleRequest(c, ds) - return - } - targetUrl, _ := url.Parse(ds.Url) if !checkWhiteList(c, targetUrl.Host) { return diff --git a/pkg/api/dtos/plugins.go b/pkg/api/dtos/plugins.go index 70e732424ab..f4281f877b3 100644 --- a/pkg/api/dtos/plugins.go +++ b/pkg/api/dtos/plugins.go @@ -21,6 +21,7 @@ type PluginSetting struct { LatestVersion string `json:"latestVersion"` HasUpdate bool `json:"hasUpdate"` + State string `json:"state"` } type PluginListItem struct { @@ -33,6 +34,7 @@ type PluginListItem struct { LatestVersion string `json:"latestVersion"` HasUpdate bool `json:"hasUpdate"` DefaultNavUrl string `json:"defaultNavUrl"` + State string `json:"state"` } type PluginList []PluginListItem diff --git a/pkg/api/plugins.go b/pkg/api/plugins.go index 9d25b9c331e..fe7122f8557 100644 --- a/pkg/api/plugins.go +++ b/pkg/api/plugins.go @@ -48,6 +48,7 @@ func GetPluginList(c *middleware.Context) Response { LatestVersion: pluginDef.GrafanaNetVersion, HasUpdate: pluginDef.GrafanaNetHasUpdate, DefaultNavUrl: pluginDef.DefaultNavUrl, + State: pluginDef.State, } if pluginSetting, exists := pluginSettingsMap[pluginDef.Id]; exists { @@ -97,6 +98,7 @@ func GetPluginSettingById(c *middleware.Context) Response { DefaultNavUrl: def.DefaultNavUrl, LatestVersion: def.GrafanaNetVersion, HasUpdate: def.GrafanaNetHasUpdate, + State: def.State, } query := m.GetPluginSettingByIdQuery{PluginId: pluginId, OrgId: c.OrgId} diff --git a/pkg/api/sqldb/sqldb.go b/pkg/api/sqldb/sqldb.go deleted file mode 100644 index d6d05ffd7d6..00000000000 --- a/pkg/api/sqldb/sqldb.go +++ /dev/null @@ -1,164 +0,0 @@ -package sqldb - -import ( - "encoding/json" - "errors" - "fmt" - "io/ioutil" - "strings" - - "github.com/grafana/grafana/pkg/log" - "github.com/grafana/grafana/pkg/middleware" - m "github.com/grafana/grafana/pkg/models" - - _ "github.com/go-sql-driver/mysql" - "github.com/go-xorm/core" - "github.com/go-xorm/xorm" - _ "github.com/lib/pq" - _ "github.com/mattn/go-sqlite3" -) - -type sqlDataRequest struct { - Query string `json:"query"` - Body []byte `json:"-"` -} - -type seriesStruct struct { - Columns []string `json:"columns"` - Name string `json:"name"` - Values [][]interface{} `json:"values"` -} - -type resultsStruct struct { - Series []seriesStruct `json:"series"` -} - -type dataStruct struct { - Results []resultsStruct `json:"results"` -} - -func getEngine(ds *m.DataSource) (*xorm.Engine, error) { - dbms, err := ds.JsonData.Get("dbms").String() - if err != nil { - return nil, errors.New("Invalid DBMS") - } - - host, err := ds.JsonData.Get("host").String() - if err != nil { - return nil, errors.New("Invalid host") - } - - port, err := ds.JsonData.Get("port").String() - if err != nil { - return nil, errors.New("Invalid port") - } - - constr := "" - - switch dbms { - case "mysql": - constr = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", - ds.User, ds.Password, host, port, ds.Database) - - case "postgres": - sslEnabled, _ := ds.JsonData.Get("ssl").Bool() - sslMode := "disable" - if sslEnabled { - sslMode = "require" - } - - constr = fmt.Sprintf("user=%s password=%s host=%s port=%s dbname=%s sslmode=%s", - ds.User, ds.Password, host, port, ds.Database, sslMode) - - default: - return nil, fmt.Errorf("Unknown DBMS: %s", dbms) - } - - return xorm.NewEngine(dbms, constr) -} - -func getData(db *core.DB, req *sqlDataRequest) (interface{}, error) { - queries := strings.Split(req.Query, ";") - - data := dataStruct{} - data.Results = make([]resultsStruct, 1) - data.Results[0].Series = make([]seriesStruct, 0) - - for i := range queries { - if queries[i] == "" { - continue - } - - rows, err := db.Query(queries[i]) - if err != nil { - return nil, err - } - defer rows.Close() - - name := fmt.Sprintf("table_%d", i+1) - series, err := arrangeResult(rows, name) - if err != nil { - return nil, err - } - data.Results[0].Series = append(data.Results[0].Series, series.(seriesStruct)) - } - - return data, nil -} - -func arrangeResult(rows *core.Rows, name string) (interface{}, error) { - columnNames, err := rows.Columns() - - series := seriesStruct{} - series.Columns = columnNames - series.Name = name - - for rows.Next() { - columnValues := make([]interface{}, len(columnNames)) - - err = rows.ScanSlice(&columnValues) - if err != nil { - return nil, err - } - - // bytes -> string - for i := range columnValues { - switch columnValues[i].(type) { - case []byte: - columnValues[i] = fmt.Sprintf("%s", columnValues[i]) - } - } - - series.Values = append(series.Values, columnValues) - } - - return series, err -} - -func HandleRequest(c *middleware.Context, ds *m.DataSource) { - var req sqlDataRequest - req.Body, _ = ioutil.ReadAll(c.Req.Request.Body) - json.Unmarshal(req.Body, &req) - - log.Debug("SQL request: query='%v'", req.Query) - - engine, err := getEngine(ds) - if err != nil { - c.JsonApiErr(500, "Unable to open SQL connection", err) - return - } - defer engine.Close() - - session := engine.NewSession() - defer session.Close() - - db := session.DB() - - result, err := getData(db, &req) - if err != nil { - c.JsonApiErr(500, fmt.Sprintf("Data error: %v, Query: %s", err.Error(), req.Query), err) - return - } - - c.JSON(200, result) -} diff --git a/pkg/models/datasource.go b/pkg/models/datasource.go index 169189670d6..804880a5d10 100644 --- a/pkg/models/datasource.go +++ b/pkg/models/datasource.go @@ -17,7 +17,6 @@ const ( DS_CLOUDWATCH = "cloudwatch" DS_KAIROSDB = "kairosdb" DS_PROMETHEUS = "prometheus" - DS_SQLDB = "sqldb" DS_ACCESS_DIRECT = "direct" DS_ACCESS_PROXY = "proxy" ) @@ -63,7 +62,6 @@ var knownDatasourcePlugins map[string]bool = map[string]bool{ DS_CLOUDWATCH: true, DS_PROMETHEUS: true, DS_OPENTSDB: true, - DS_SQLDB: true, "opennms": true, "druid": true, "dalmatinerdb": true, diff --git a/pkg/plugins/models.go b/pkg/plugins/models.go index 7de12b4036c..fd04852f2f4 100644 --- a/pkg/plugins/models.go +++ b/pkg/plugins/models.go @@ -39,6 +39,7 @@ type PluginBase struct { Module string `json:"module"` BaseUrl string `json:"baseUrl"` HideFromList bool `json:"hideFromList"` + State string `json:"state"` IncludedInAppId string `json:"-"` PluginDir string `json:"-"` diff --git a/public/app/features/plugins/ds_edit_ctrl.ts b/public/app/features/plugins/ds_edit_ctrl.ts index f1200f01764..3297d8c8322 100644 --- a/public/app/features/plugins/ds_edit_ctrl.ts +++ b/public/app/features/plugins/ds_edit_ctrl.ts @@ -93,6 +93,7 @@ export class DataSourceEditCtrl { this.hasDashboards = false; return this.backendSrv.get('/api/plugins/' + this.current.type + '/settings').then(pluginInfo => { this.datasourceMeta = pluginInfo; + console.log(this.datasourceMeta) ; this.hasDashboards = _.find(pluginInfo.includes, {type: 'dashboard'}); }); } diff --git a/public/app/features/plugins/partials/ds_edit.html b/public/app/features/plugins/partials/ds_edit.html index e94a5300e3d..5cd1470e1b1 100644 --- a/public/app/features/plugins/partials/ds_edit.html +++ b/public/app/features/plugins/partials/ds_edit.html @@ -48,6 +48,11 @@ +
+ This plugin is marked as being in alpha state, which means it is in early development phase and + updates will include breaking changes. +
+ diff --git a/public/app/plugins/datasource/mysql/plugin.json b/public/app/plugins/datasource/mysql/plugin.json index 5f35b3f709f..e26823edbeb 100644 --- a/public/app/plugins/datasource/mysql/plugin.json +++ b/public/app/plugins/datasource/mysql/plugin.json @@ -14,6 +14,7 @@ } }, + "state": "alpha", "alerting": true, "annotations": true, "metrics": true