Browse Source

fix: async install plugins task

Yeuoly 9 months ago
parent
commit
fc7bfc91b4

+ 11 - 1
internal/core/plugin_manager/manager.go

@@ -152,7 +152,17 @@ func (p *PluginManager) BackwardsInvocation() dify_invocation.BackwardsInvocatio
 
 func (p *PluginManager) SavePackage(plugin_unique_identifier plugin_entities.PluginUniqueIdentifier, pkg []byte) error {
 	// save to storage
-	return os.WriteFile(filepath.Join(p.packageCachePath, plugin_unique_identifier.String()), pkg, 0644)
+	pkg_path := filepath.Join(p.packageCachePath, plugin_unique_identifier.String())
+	pkg_dir := filepath.Dir(pkg_path)
+	if err := os.MkdirAll(pkg_dir, 0755); err != nil {
+		return err
+	}
+
+	if err := os.WriteFile(pkg_path, pkg, 0644); err != nil {
+		return err
+	}
+
+	return nil
 }
 
 func (p *PluginManager) GetPackage(plugin_unique_identifier plugin_entities.PluginUniqueIdentifier) ([]byte, error) {

+ 1 - 1
internal/server/controllers/plugins.go

@@ -86,7 +86,7 @@ func FetchPluginInstallationTasks(c *gin.Context) {
 func FetchPluginInstallationTask(c *gin.Context) {
 	BindRequest(c, func(request struct {
 		TenantID string `uri:"tenant_id" validate:"required"`
-		TaskID   string `uri:"task_id" validate:"required"`
+		TaskID   string `uri:"id" validate:"required"`
 	}) {
 		c.JSON(http.StatusOK, service.FetchPluginInstallationTask(request.TenantID, request.TaskID))
 	})

+ 1 - 1
internal/server/http_server.go

@@ -115,7 +115,7 @@ func (app *App) endpointManagementGroup(group *gin.RouterGroup) {
 func (app *App) pluginManagementGroup(group *gin.RouterGroup, config *app.Config) {
 	group.POST("/install/upload", controllers.UploadPlugin(config))
 	group.POST("/install/identifiers", controllers.InstallPluginFromIdentifiers(config))
-	group.GET("/install/task/:id", controllers.FetchPluginInstallationTask)
+	group.GET("/install/tasks/:id", controllers.FetchPluginInstallationTask)
 	group.GET("/install/tasks", controllers.FetchPluginInstallationTasks)
 	group.GET("/fetch/manifest", controllers.FetchPluginManifest)
 	group.GET("/fetch/identifier", controllers.FetchPluginFromIdentifier)

+ 8 - 2
internal/service/install_plugin.go

@@ -32,7 +32,8 @@ func InstallPluginFromIdentifiers(
 
 	task := &models.InstallTask{
 		Status:           models.InstallTaskStatusRunning,
-		TotalPlugins:     len(plugins_wait_for_installation),
+		TenantID:         tenant_id,
+		TotalPlugins:     len(plugin_unique_identifiers),
 		CompletedPlugins: 0,
 		Plugins:          []models.InstallTaskPluginStatus{},
 	}
@@ -276,10 +277,15 @@ func UninstallPlugin(
 		return entities.NewErrorResponse(-500, err.Error())
 	}
 
+	plugin_unique_identifier, err := plugin_entities.NewPluginUniqueIdentifier(installation.PluginUniqueIdentifier)
+	if err != nil {
+		return entities.NewErrorResponse(-500, fmt.Sprintf("failed to parse plugin unique identifier: %v", err))
+	}
+
 	// Uninstall the plugin
 	_, err = curd.UninstallPlugin(
 		tenant_id,
-		plugin_entities.PluginUniqueIdentifier(installation.PluginUniqueIdentifier),
+		plugin_unique_identifier,
 		installation.ID,
 	)
 	if err != nil {

+ 1 - 0
internal/types/models/task.go

@@ -21,6 +21,7 @@ type InstallTaskPluginStatus struct {
 type InstallTask struct {
 	Model
 	Status           InstallTaskStatus         `json:"status" gorm:"not null"`
+	TenantID         string                    `json:"tenant_id" gorm:"type:uuid;not null"`
 	TotalPlugins     int                       `json:"total_plugins" gorm:"not null"`
 	CompletedPlugins int                       `json:"completed_plugins" gorm:"not null"`
 	Plugins          []InstallTaskPluginStatus `json:"plugins" gorm:"serializer:json"`