Files
MyGoNavi/internal/app/data_sync_job_cdc.go
Syngnat 11dbb1f9dd feat(sync): 接入同步任务编排与安全执行 API
- 接入任务持久化、生命周期、调度运行与检查点管理
- 提供 ID 作用域元数据、能力解析、预检和生产审批接口
- 串联水位与 MongoDB CDC 执行、错误行隔离及安全重放
2026-08-08 19:13:25 +08:00

51 lines
1.5 KiB
Go

package app
import (
"context"
"errors"
"strings"
"time"
"GoNavi-Wails/internal/connection"
"GoNavi-Wails/internal/synccdc"
)
const dataSyncCDCProbeTimeout = 15 * time.Second
func (a *App) dataSyncCDCAdapters() *synccdc.Registry {
if a != nil && a.dataSyncCDCRegistry != nil {
return a.dataSyncCDCRegistry
}
return synccdc.NewRegistry()
}
func (a *App) probeDataSyncCDC(config connection.ConnectionConfig, adapterName string) (synccdc.Capability, error) {
adapterName = strings.TrimSpace(adapterName)
if adapterName == "" {
return synccdc.Capability{}, errors.New("CDC adapter is required")
}
adapter, err := a.dataSyncCDCAdapters().Get(adapterName)
if err != nil {
return synccdc.Capability{}, err
}
ctx, cancel := context.WithTimeout(context.Background(), dataSyncCDCProbeTimeout)
defer cancel()
return adapter.Probe(ctx, config)
}
func (a *App) DataSyncCDCAdapterList() connection.QueryResult {
return connection.QueryResult{Success: true, Data: a.dataSyncCDCAdapters().Names()}
}
func (a *App) DataSyncCDCProbe(connectionID, database, schema, adapterName string) connection.QueryResult {
endpoint, err := a.resolveDataSyncJobEndpoint(connectionID, database, schema)
if err != nil {
return connection.QueryResult{Success: false, Message: err.Error()}
}
capability, err := a.probeDataSyncCDC(normalizeMetadataRunConfig(endpoint.Config, endpoint.Database), adapterName)
if err != nil {
return connection.QueryResult{Success: false, Message: err.Error()}
}
return connection.QueryResult{Success: true, Data: capability}
}