mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-11-07 00:05:14 +00:00
* feat(mcp): add Panel MCP task configuration and website binding structures * fix(mcp): correct variable assignment in mcpWebsiteDomain function
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/1Panel-dev/1Panel/agent/app/dto"
|
|
"github.com/1Panel-dev/1Panel/agent/app/model"
|
|
"github.com/1Panel-dev/1Panel/agent/utils/mcpapi"
|
|
)
|
|
|
|
func (u *MysqlService) CreateForMCP(ctx context.Context, req dto.MysqlDBCreate) (*model.DatabaseMysql, error) {
|
|
if req.From != "local" || ctx.Err() != nil {
|
|
return nil, errors.New("invalid MCP database target or request")
|
|
}
|
|
writeContext, cancel := context.WithTimeout(context.WithoutCancel(ctx), 310*time.Second)
|
|
defer cancel()
|
|
created, err := createMCPMysqlDatabase(writeContext, req)
|
|
if err != nil {
|
|
return nil, mcpapi.SanitizeBusinessError(err, "database creation failed; inspect the invocation before retrying")
|
|
}
|
|
return created, nil
|
|
}
|
|
|
|
func createMCPMysqlDatabase(ctx context.Context, req dto.MysqlDBCreate) (*model.DatabaseMysql, error) {
|
|
creation, err := prepareMysqlCreation(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
local, version, err := loadInstalledLocalMysqlClient(creation.request.Database)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer local.Close()
|
|
deadline := time.Now().Add(300 * time.Second)
|
|
if writeDeadline, ok := ctx.Deadline(); ok && writeDeadline.Add(-10*time.Second).Before(deadline) {
|
|
deadline = writeDeadline.Add(-10 * time.Second)
|
|
}
|
|
sqlContext, cancel := context.WithDeadline(ctx, deadline)
|
|
err = local.CreateWithContext(sqlContext, creation.createInfo(version))
|
|
cancel()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := saveMysqlCreationMetadata(ctx, creation.request, creation.permissionHosts, &creation.item); err != nil {
|
|
return nil, err
|
|
}
|
|
return &creation.item, nil
|
|
}
|