init.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package db
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/app"
  6. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  7. "gorm.io/driver/postgres"
  8. "gorm.io/gorm"
  9. )
  10. func initDifyPluginDB(host string, port int, db_name string, user string, pass string, sslmode string) error {
  11. // create db if not exists
  12. dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s", host, port, user, pass, "postgres", sslmode)
  13. db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
  14. if err != nil {
  15. return err
  16. }
  17. pgsqlDB, err := db.DB()
  18. if err != nil {
  19. return err
  20. }
  21. // check if the db exists
  22. rows, err := pgsqlDB.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", db_name))
  23. if err != nil {
  24. return err
  25. }
  26. if !rows.Next() {
  27. // create database
  28. _, err = pgsqlDB.Exec(fmt.Sprintf("CREATE DATABASE %s", db_name))
  29. if err != nil {
  30. return err
  31. }
  32. }
  33. // close db
  34. err = pgsqlDB.Close()
  35. if err != nil {
  36. return err
  37. }
  38. // connect to the new db
  39. dsn = fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s", host, port, user, pass, db_name, sslmode)
  40. db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
  41. if err != nil {
  42. return err
  43. }
  44. pgsqlDB, err = db.DB()
  45. if err != nil {
  46. return err
  47. }
  48. // check if uuid-ossp extension exists
  49. rows, err = pgsqlDB.Query("SELECT 1 FROM pg_extension WHERE extname = 'uuid-ossp'")
  50. if err != nil {
  51. return err
  52. }
  53. if !rows.Next() {
  54. // create the uuid-ossp extension
  55. _, err = pgsqlDB.Exec("CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"")
  56. if err != nil {
  57. return err
  58. }
  59. }
  60. pgsqlDB.SetConnMaxIdleTime(time.Minute * 1)
  61. DifyPluginDB = db
  62. return nil
  63. }
  64. func autoMigrate() error {
  65. return DifyPluginDB.AutoMigrate()
  66. }
  67. func Init(config *app.Config) {
  68. err := initDifyPluginDB(
  69. config.DBHost,
  70. int(config.DBPort),
  71. config.DBDatabase,
  72. config.DBUsername, config.DBPassword, config.DBSslMode,
  73. )
  74. if err != nil {
  75. log.Panic("failed to init dify plugin db: %v", err)
  76. }
  77. err = autoMigrate()
  78. if err != nil {
  79. log.Panic("failed to auto migrate: %v", err)
  80. }
  81. log.Info("dify plugin db initialized")
  82. }