server.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package server
  2. import (
  3. "github.com/getsentry/sentry-go"
  4. "github.com/langgenius/dify-plugin-daemon/internal/cluster"
  5. "github.com/langgenius/dify-plugin-daemon/internal/core/persistence"
  6. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_manager"
  7. "github.com/langgenius/dify-plugin-daemon/internal/db"
  8. "github.com/langgenius/dify-plugin-daemon/internal/oss"
  9. "github.com/langgenius/dify-plugin-daemon/internal/oss/local"
  10. "github.com/langgenius/dify-plugin-daemon/internal/oss/s3"
  11. "github.com/langgenius/dify-plugin-daemon/internal/types/app"
  12. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  13. "github.com/langgenius/dify-plugin-daemon/internal/utils/routine"
  14. )
  15. func initOSS(config *app.Config) oss.OSS {
  16. // init oss
  17. var oss oss.OSS
  18. var err error
  19. if config.PluginStorageType == "aws_s3" {
  20. oss, err = s3.NewAWSS3Storage(
  21. config.AWSAccessKey,
  22. config.AWSSecretKey,
  23. config.AWSRegion,
  24. config.PluginStorageOSSBucket,
  25. )
  26. if err != nil {
  27. log.Panic("Failed to create aws s3 storage: %s", err)
  28. }
  29. } else if config.PluginStorageType == "local" {
  30. oss = local.NewLocalStorage(config.PluginStorageLocalRoot)
  31. } else {
  32. log.Panic("Invalid plugin storage type: %s", config.PluginStorageType)
  33. }
  34. return oss
  35. }
  36. func (app *App) Run(config *app.Config) {
  37. // init routine pool
  38. if config.SentryEnabled {
  39. routine.InitPool(config.RoutinePoolSize, sentry.ClientOptions{
  40. Dsn: config.SentryDSN,
  41. AttachStacktrace: config.SentryAttachStacktrace,
  42. TracesSampleRate: config.SentryTracesSampleRate,
  43. SampleRate: config.SentrySampleRate,
  44. EnableTracing: config.SentryTracingEnabled,
  45. })
  46. } else {
  47. routine.InitPool(config.RoutinePoolSize)
  48. }
  49. // init db
  50. db.Init(config)
  51. // init oss
  52. oss := initOSS(config)
  53. // create manager
  54. manager := plugin_manager.InitGlobalManager(oss, config)
  55. // create cluster
  56. app.cluster = cluster.NewCluster(config, manager)
  57. // register plugin lifetime event
  58. manager.AddPluginRegisterHandler(app.cluster.RegisterPlugin)
  59. // init manager
  60. manager.Launch(config)
  61. // init persistence
  62. persistence.InitPersistence(oss, config)
  63. // launch cluster
  64. app.cluster.Launch()
  65. // start http server
  66. app.server(config)
  67. // block
  68. select {}
  69. }