| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | package dbimport (	"fmt"	"time"	"github.com/langgenius/dify-plugin-daemon/internal/types/app"	"github.com/langgenius/dify-plugin-daemon/internal/types/models"	"github.com/langgenius/dify-plugin-daemon/internal/utils/log"	"gorm.io/driver/postgres"	"gorm.io/gorm")func initDifyPluginDB(host string, port int, db_name string, user string, pass string, sslmode string) error {	// create db if not exists	dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s", host, port, user, pass, "postgres", sslmode)	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})	if err != nil {		return err	}	pgsqlDB, err := db.DB()	if err != nil {		return err	}	// check if the db exists	rows, err := pgsqlDB.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", db_name))	if err != nil {		return err	}	if !rows.Next() {		// create database		_, err = pgsqlDB.Exec(fmt.Sprintf("CREATE DATABASE %s", db_name))		if err != nil {			return err		}	}	// close db	err = pgsqlDB.Close()	if err != nil {		return err	}	// connect to the new db	dsn = fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s", host, port, user, pass, db_name, sslmode)	db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})	if err != nil {		return err	}	pgsqlDB, err = db.DB()	if err != nil {		return err	}	// check if uuid-ossp extension exists	rows, err = pgsqlDB.Query("SELECT 1 FROM pg_extension WHERE extname = 'uuid-ossp'")	if err != nil {		return err	}	if !rows.Next() {		// create the uuid-ossp extension		_, err = pgsqlDB.Exec("CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"")		if err != nil {			return err		}	}	pgsqlDB.SetConnMaxIdleTime(time.Minute * 1)	DifyPluginDB = db	return nil}func autoMigrate() error {	return DifyPluginDB.AutoMigrate(		models.Plugin{},		models.PluginInstallation{},		models.Endpoint{},		models.ServerlessRuntime{},	)}func Init(config *app.Config) {	err := initDifyPluginDB(		config.DBHost,		int(config.DBPort),		config.DBDatabase,		config.DBUsername, config.DBPassword, config.DBSslMode,	)	if err != nil {		log.Panic("failed to init dify plugin db: %v", err)	}	err = autoMigrate()	if err != nil {		log.Panic("failed to auto migrate: %v", err)	}	log.Info("dify plugin db initialized")}func Close() {	db, err := DifyPluginDB.DB()	if err != nil {		log.Error("failed to close dify plugin db: %v", err)		return	}	err = db.Close()	if err != nil {		log.Error("failed to close dify plugin db: %v", err)		return	}	log.Info("dify plugin db closed")}
 |