diff --git a/main.go b/main.go index cf11646..41beade 100644 --- a/main.go +++ b/main.go @@ -46,7 +46,7 @@ var rootCmd = &cobra.Command{ global.Log.Info("Redis连接成功") } cache.RedisDb = client - tDengine, err := tdengine.NewTdengine(global.Conf.Taos.Username, global.Conf.Taos.Password, global.Conf.Taos.Host, global.Conf.Taos.Database) + tDengine, err := tdengine.InitTd(global.Conf.Taos.Username, global.Conf.Taos.Password, global.Conf.Taos.Host, global.Conf.Taos.Database) if err != nil { global.Log.Panic("Tdengine连接错误") } else { diff --git a/pkg/tdengine/tdengine.go b/pkg/tdengine/tdengine.go index 1bf6fc1..09552b4 100644 --- a/pkg/tdengine/tdengine.go +++ b/pkg/tdengine/tdengine.go @@ -2,7 +2,9 @@ package tdengine import ( "database/sql" + "encoding/base64" "fmt" + "github.com/PandaXGO/PandaKit/httpclient" _ "github.com/taosdata/driver-go/v3/taosRestful" "strings" "time" @@ -13,6 +15,14 @@ type TdEngine struct { dbName string } +func InitTd(username, password, host, db string) (*TdEngine, error) { + _, err := CreateDataBase(username, password, host, db) + if err != nil { + return nil, err + } + return NewTdengine(username, password, host, db) +} + func NewTdengine(username, password, host, db string) (*TdEngine, error) { dsn := fmt.Sprintf("%s:%s@%s(%s)/%s", username, password, "http", host, db) @@ -24,6 +34,18 @@ func NewTdengine(username, password, host, db string) (*TdEngine, error) { } +// 创建数据库 +func CreateDataBase(username, password, host, dbname string) (float64, error) { + sql := "CREATE DATABASE if not exists " + dbname + " KEEP 365 VGROUPS 10" + url := fmt.Sprintf("http://%s/rest/sql", host) + token := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", username, password))) + data, err := httpclient.NewRequest(url).Header("Authorization", "Basic "+token).PostText(sql).BodyToMap() + if err != nil { + return 0, err + } + return data["rows"].(float64), nil +} + // GetTdEngineAllDb 获取所有数据库 func (s *TdEngine) GetTdEngineAllDb() (data []string, err error) { rows, err := s.db.Query("show databases;")