Skip to content

Commit 2946b9d

Browse files
committed
chore: mysql pg plugin move internal plugin
1 parent 1ee1df3 commit 2946b9d

File tree

6 files changed

+83
-104
lines changed

6 files changed

+83
-104
lines changed

query/internal/plugins/external/mysql/mysql.go renamed to query/internal/plugins/builtin/mysql/mysql.go

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package mysql
22

33
import (
4+
"context"
45
"database/sql"
56
"database/sql/driver"
7+
"fmt"
68
"reflect"
79
"sync"
10+
"time"
811

9-
pluginUtils "github.com/DataObserve/datav/query/internal/plugins/utils"
1012
"github.com/DataObserve/datav/query/pkg/colorlog"
1113
"github.com/DataObserve/datav/query/pkg/models"
1214
"github.com/gin-gonic/gin"
15+
16+
_ "github.com/go-sql-driver/mysql"
1317
)
1418

1519
var datasourceName = "mysql"
@@ -26,7 +30,7 @@ func (*MysqlPlugin) Query(c *gin.Context, ds *models.Datasource) models.PluginRe
2630
query := c.Query("query")
2731
conn, ok := conns[ds.Id]
2832
if !ok {
29-
conn, err := pluginUtils.ConnectToMysql(ds.URL, ds.Data["database"], ds.Data["username"], ds.Data["password"])
33+
conn, err := connectToMysql(ds.URL, ds.Data["database"], ds.Data["username"], ds.Data["password"])
3034
if err != nil {
3135
colorlog.RootLogger.Warn("connect to mysql error:", err, "ds_id", ds.Id, "url", ds.URL)
3236
return models.PluginResult{
@@ -111,10 +115,45 @@ func (*MysqlPlugin) Query(c *gin.Context, ds *models.Datasource) models.PluginRe
111115
}
112116

113117
func (*MysqlPlugin) TestDatasource(c *gin.Context) models.PluginResult {
114-
return pluginUtils.TestMysqlDatasource(c)
118+
return TestMysqlDatasource(c)
115119
}
116120

117121
func init() {
118122
// register datasource
119123
models.RegisterPlugin(datasourceName, &MysqlPlugin{})
120124
}
125+
126+
func TestMysqlDatasource(c *gin.Context) models.PluginResult {
127+
url := c.Query("url")
128+
database := c.Query("database")
129+
username := c.Query("username")
130+
password := c.Query("password")
131+
db, err := connectToMysql(url, database, username, password)
132+
if err != nil {
133+
return models.GenPluginResult(models.PluginStatusError, err.Error(), nil)
134+
}
135+
if err = db.PingContext(context.Background()); err != nil {
136+
return models.GenPluginResult(models.PluginStatusError, err.Error(), nil)
137+
}
138+
return models.GenPluginResult(models.PluginStatusSuccess, "", nil)
139+
}
140+
141+
func connectToMysql(url, database, username, password string) (*sql.DB, error) {
142+
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true", username, password, url, database)
143+
colorlog.RootLogger.Debug("connect to mysql dsn: ", dsn)
144+
145+
db, err := sql.Open("mysql", dsn)
146+
if err != nil {
147+
return nil, err
148+
}
149+
db.SetMaxIdleConns(5)
150+
db.SetMaxOpenConns(5)
151+
db.SetConnMaxLifetime(time.Duration(10) * time.Minute)
152+
db.SetConnMaxIdleTime(time.Duration(10) * time.Minute)
153+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
154+
defer cancel()
155+
if err = db.PingContext(ctx); err != nil {
156+
return nil, err
157+
}
158+
return db, nil
159+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
11
package builtin
2+
3+
import (
4+
_ "github.com/DataObserve/datav/query/internal/plugins/builtin/mysql"
5+
_ "github.com/DataObserve/datav/query/internal/plugins/builtin/postgresql"
6+
)

query/internal/plugins/external/postgresql/postgresql.go renamed to query/internal/plugins/builtin/postgresql/postgresql.go

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package postgresql
22

33
import (
4+
"context"
45
"database/sql"
56
"database/sql/driver"
7+
"fmt"
68
"reflect"
79
"sync"
810
"time"
911

10-
pluginUtils "github.com/DataObserve/datav/query/internal/plugins/utils"
1112
"github.com/DataObserve/datav/query/pkg/colorlog"
1213
"github.com/DataObserve/datav/query/pkg/models"
1314
"github.com/gin-gonic/gin"
15+
_ "github.com/lib/pq"
1416
)
1517

1618
var datasourceName = "postgresql"
@@ -27,7 +29,7 @@ func (*PostgreSQLPlugin) Query(c *gin.Context, ds *models.Datasource) models.Plu
2729
query := c.Query("query")
2830
conn, ok := conns[ds.Id]
2931
if !ok {
30-
conn, err := pluginUtils.ConnectToPostgreSQL(ds.URL, ds.Data["database"], ds.Data["username"], ds.Data["password"])
32+
conn, err := connectToPostgreSQL(ds.URL, ds.Data["database"], ds.Data["username"], ds.Data["password"])
3133
if err != nil {
3234
colorlog.RootLogger.Warn("connect to postgresql error:", err, "ds_id", ds.Id, "url", ds.URL)
3335
return models.PluginResult{
@@ -111,10 +113,41 @@ func (*PostgreSQLPlugin) Query(c *gin.Context, ds *models.Datasource) models.Plu
111113
}
112114

113115
func (*PostgreSQLPlugin) TestDatasource(c *gin.Context) models.PluginResult {
114-
return pluginUtils.TestPostgresqlDatasource(c)
116+
url := c.Query("url")
117+
database := c.Query("database")
118+
username := c.Query("username")
119+
password := c.Query("password")
120+
db, err := connectToPostgreSQL(url, database, username, password)
121+
if err != nil {
122+
return models.GenPluginResult(models.PluginStatusError, err.Error(), nil)
123+
}
124+
if err = db.PingContext(context.Background()); err != nil {
125+
return models.GenPluginResult(models.PluginStatusError, err.Error(), nil)
126+
}
127+
return models.GenPluginResult(models.PluginStatusSuccess, "", nil)
115128
}
116129

117130
func init() {
118131
// register datasource
119132
models.RegisterPlugin(datasourceName, &PostgreSQLPlugin{})
120133
}
134+
135+
func connectToPostgreSQL(url, database, username, password string) (*sql.DB, error) {
136+
dsn := fmt.Sprintf("postgres://%s:%s@%s/%s", username, password, url, database)
137+
colorlog.RootLogger.Debug("connect to postgresql dsn: ", dsn)
138+
139+
db, err := sql.Open("postgres", dsn)
140+
if err != nil {
141+
return nil, err
142+
}
143+
db.SetMaxIdleConns(5)
144+
db.SetMaxOpenConns(5)
145+
db.SetConnMaxLifetime(time.Duration(10) * time.Minute)
146+
db.SetConnMaxIdleTime(time.Duration(10) * time.Minute)
147+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
148+
defer cancel()
149+
if err = db.PingContext(ctx); err != nil {
150+
return nil, err
151+
}
152+
return db, nil
153+
}

query/internal/plugins/external/plugins.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,4 @@ package external
44

55
import (
66
_ "github.com/DataObserve/datav/query/internal/plugins/external/clickhouse"
7-
_ "github.com/DataObserve/datav/query/internal/plugins/external/mysql"
8-
_ "github.com/DataObserve/datav/query/internal/plugins/external/postgresql"
97
)

query/internal/plugins/utils/mysql.go

Lines changed: 0 additions & 48 deletions
This file was deleted.

query/internal/plugins/utils/postgresql.go

Lines changed: 0 additions & 48 deletions
This file was deleted.

0 commit comments

Comments
 (0)